privatenumber / link

๐Ÿ”— A better `npm link`
197 stars 8 forks source link

feat(publish): watch mode #24

Open roryabraham opened 4 months ago

roryabraham commented 4 months ago

Fixes https://github.com/privatenumber/link/issues/22

This PR adds a --watch flag to the publish command. If the source file is deleted and re-created (as is the case for some build systems, such as https://github.com/callstack/react-native-builder-bob), then the --watch flag will re-establish the hard link with the new file in the source file path.

privatenumber commented 2 months ago

Will pick up the work in this PR

roryabraham commented 2 months ago

Awesome! Hopefully what I had here helps ๐Ÿ™‚

privatenumber commented 2 months ago

@roryabraham Would you mind reviewing this PR whenever? I plan to release this soon but no rushโ€”feel free to review even afterwards.

You can test it with

npx 'privatenumber/link#npm/publish-watch'

(FYI GitHub Actions is stuck right now)

roryabraham commented 2 months ago

So I've tested this with my full e2e testing flow and it seems closer than what I had before. If I run:

npx 'privatenumber/link#npm/publish-watch' publish --watch ~/react-native-live-markdown

then the files in ~/react-native-live-markdown are correctly linked to node_modules/@expensify/react-native-live-markdown.

When I change files in ~/react-native-live-markdown, I've got a nodemon process that will re-run the build of that dependency. npx link will correctly observe that the file changed, but it seems like there's some race condition, and I end up with an error:

Error: ENOENT: no such file or directory, lstat '/Users/roryabraham/react-native-live-markdown/lib/module/MarkdownTextInput.js'

manually inspecting my filesystem a moment later, I see that file does exist.

More logs ``` 10:46:56 AM Detected change in ../../react-native-live-markdown/src/MarkdownTextInput.web.tsx Linking @expensify/react-native-live-markdown in publish mode: โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/NativeProxy.cpp โ†’ ../../react-native-live-markdown/android/src/main/new_arch/NativeProxy.cpp โœ” node_modules/@expensify/react-native-live-markdown/LICENSE โ†’ ../../react-native-live-markdown/LICENSE โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/MarkdownUtils.cpp โ†’ ../../react-native-live-markdown/android/src/main/cpp/MarkdownUtils.cpp โœ” node_modules/@expensify/react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorShadowNode.cpp โ†’ ../../react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorShadowNode.cpp โœ” node_modules/@expensify/react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownShadowFamilyRegistry.cpp โ†’ ../../react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownShadowFamilyRegistry.cpp โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/OnLoad.cpp โ†’ ../../react-native-live-markdown/android/src/main/cpp/OnLoad.cpp โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/MarkdownCommitHook.cpp โ†’ ../../react-native-live-markdown/android/src/main/new_arch/MarkdownCommitHook.cpp โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/OnLoad.cpp โ†’ ../../react-native-live-markdown/android/src/main/new_arch/OnLoad.cpp โœ” node_modules/@expensify/react-native-live-markdown/src/web/MarkdownTextInput.css โ†’ ../../react-native-live-markdown/src/web/MarkdownTextInput.css โœ” node_modules/@expensify/react-native-live-markdown/android/build.gradle โ†’ ../../react-native-live-markdown/android/build.gradle โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/RNLiveMarkdownSpec.cpp โ†’ ../../react-native-live-markdown/android/src/main/new_arch/RNLiveMarkdownSpec.cpp โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/MarkdownCommitHook.h โ†’ ../../react-native-live-markdown/android/src/main/new_arch/MarkdownCommitHook.h โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/MarkdownTextInput.css โ†’ ../../react-native-live-markdown/lib/module/web/MarkdownTextInput.css โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownCommitHook.h โ†’ ../../react-native-live-markdown/ios/MarkdownCommitHook.h โœ” node_modules/@expensify/react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownShadowFamilyRegistry.h โ†’ ../../react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownShadowFamilyRegistry.h โœ” node_modules/@expensify/react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorShadowNode.h โ†’ ../../react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorShadowNode.h โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/MarkdownTextInput.css โ†’ ../../react-native-live-markdown/lib/commonjs/web/MarkdownTextInput.css โœ” node_modules/@expensify/react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorState.h โ†’ ../../react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorState.h โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/MarkdownUtils.h โ†’ ../../react-native-live-markdown/android/src/main/cpp/MarkdownUtils.h โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownTextInputDecoratorView.h โ†’ ../../react-native-live-markdown/ios/MarkdownTextInputDecoratorView.h โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownTextInputDecoratorComponentView.h โ†’ ../../react-native-live-markdown/ios/MarkdownTextInputDecoratorComponentView.h โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownTextInputDecoratorViewManager.h โ†’ ../../react-native-live-markdown/ios/MarkdownTextInputDecoratorViewManager.h โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTBackedTextFieldDelegateAdapter+Markdown.h โ†’ ../../react-native-live-markdown/ios/RCTBackedTextFieldDelegateAdapter+Markdown.h โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/NativeProxy.h โ†’ ../../react-native-live-markdown/android/src/main/new_arch/NativeProxy.h โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTBaseTextInputView+Markdown.h โ†’ ../../react-native-live-markdown/ios/RCTBaseTextInputView+Markdown.h โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTMarkdownStyle.h โ†’ ../../react-native-live-markdown/ios/RCTMarkdownStyle.h โœ” node_modules/@expensify/react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorViewComponentDescriptor.h โ†’ ../../react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorViewComponentDescriptor.h โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownLayoutManager.h โ†’ ../../react-native-live-markdown/ios/MarkdownLayoutManager.h โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTLiveMarkdownModule.h โ†’ ../../react-native-live-markdown/ios/RCTLiveMarkdownModule.h โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/CustomFabricUIManager.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/CustomFabricUIManager.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/LiveMarkdownModule.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/LiveMarkdownModule.java โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTTextInputComponentView+Markdown.h โ†’ ../../react-native-live-markdown/ios/RCTTextInputComponentView+Markdown.h โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTUITextView+Markdown.h โ†’ ../../react-native-live-markdown/ios/RCTUITextView+Markdown.h โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/RNLiveMarkdownSpec.h โ†’ ../../react-native-live-markdown/android/src/main/new_arch/RNLiveMarkdownSpec.h โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/CustomMountingManager.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/CustomMountingManager.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/LiveMarkdownPackage.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/LiveMarkdownPackage.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownEmojiSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownEmojiSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownFontFamilySpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownFontFamilySpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownFontSizeSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownFontSizeSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownForegroundColorSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownForegroundColorSpan.java โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTMarkdownUtils.h โ†’ ../../react-native-live-markdown/ios/RCTMarkdownUtils.h โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownLineHeightSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownLineHeightSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownStyle.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownStyle.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownItalicSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownItalicSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownStrikethroughSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownStrikethroughSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownTextInputDecoratorView.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownTextInputDecoratorView.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownBlockquoteSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownBlockquoteSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownBoldSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownBoldSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownBackgroundColorSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownBackgroundColorSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownUnderlineSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownUnderlineSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/newarch/MarkdownTextInputDecoratorViewManagerSpec.java โ†’ ../../react-native-live-markdown/android/src/newarch/MarkdownTextInputDecoratorViewManagerSpec.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownTextWatcher.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownTextWatcher.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownTextInputDecoratorViewManager.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownTextInputDecoratorViewManager.java โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/browserUtils.js โ†’ ../../react-native-live-markdown/lib/module/web/browserUtils.js โœ” node_modules/@expensify/react-native-live-markdown/android/src/oldarch/NativeLiveMarkdownModuleSpec.java โ†’ ../../react-native-live-markdown/android/src/oldarch/NativeLiveMarkdownModuleSpec.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/oldarch/MarkdownTextInputDecoratorViewManagerSpec.java โ†’ ../../react-native-live-markdown/android/src/oldarch/MarkdownTextInputDecoratorViewManagerSpec.java โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/index.js โ†’ ../../react-native-live-markdown/lib/commonjs/index.js โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownUtils.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownUtils.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/oldarch/NativeProxy.java โ†’ ../../react-native-live-markdown/android/src/oldarch/NativeProxy.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/newarch/NativeProxy.java โ†’ ../../react-native-live-markdown/android/src/newarch/NativeProxy.java โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/cursorUtils.js โ†’ ../../react-native-live-markdown/lib/commonjs/web/cursorUtils.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/index.js โ†’ ../../react-native-live-markdown/lib/module/index.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/browserUtils.js โ†’ ../../react-native-live-markdown/lib/commonjs/web/browserUtils.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/InputHistory.js โ†’ ../../react-native-live-markdown/lib/module/web/InputHistory.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/InputHistory.js โ†’ ../../react-native-live-markdown/lib/commonjs/web/InputHistory.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/MarkdownTextInput.js โ†’ ../../react-native-live-markdown/lib/module/MarkdownTextInput.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/MarkdownTextInput.web.js โ†’ ../../react-native-live-markdown/lib/commonjs/MarkdownTextInput.web.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/MarkdownTextInput.web.js โ†’ ../../react-native-live-markdown/lib/module/MarkdownTextInput.web.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/MarkdownTextInput.js โ†’ ../../react-native-live-markdown/lib/commonjs/MarkdownTextInput.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/NativeLiveMarkdownModule.js โ†’ ../../react-native-live-markdown/lib/commonjs/NativeLiveMarkdownModule.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/NativeLiveMarkdownModule.js โ†’ ../../react-native-live-markdown/lib/module/NativeLiveMarkdownModule.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/MarkdownTextInputDecoratorViewNativeComponent.js โ†’ ../../react-native-live-markdown/lib/commonjs/MarkdownTextInputDecoratorViewNativeComponent.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/cursorUtils.js โ†’ ../../react-native-live-markdown/lib/module/web/cursorUtils.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/MarkdownTextInputDecoratorViewNativeComponent.js โ†’ ../../react-native-live-markdown/lib/module/MarkdownTextInputDecoratorViewNativeComponent.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/parserUtils.js โ†’ ../../react-native-live-markdown/lib/commonjs/web/parserUtils.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/react-native-web.d.js โ†’ ../../react-native-live-markdown/lib/commonjs/react-native-web.d.js โœ” node_modules/@expensify/react-native-live-markdown/parser/react-native-live-markdown-parser.js โ†’ ../../react-native-live-markdown/parser/react-native-live-markdown-parser.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/styleUtils.js โ†’ ../../react-native-live-markdown/lib/module/styleUtils.js โœ” node_modules/@expensify/react-native-live-markdown/package.json โ†’ ../../react-native-live-markdown/package.json โœ” node_modules/@expensify/react-native-live-markdown/lib/module/react-native-web.d.js โ†’ ../../react-native-live-markdown/lib/module/react-native-web.d.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/parserUtils.js โ†’ ../../react-native-live-markdown/lib/module/web/parserUtils.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/styleUtils.js โ†’ ../../react-native-live-markdown/lib/commonjs/styleUtils.js โœ” node_modules/@expensify/react-native-live-markdown/react-native.config.js โ†’ ../../react-native-live-markdown/react-native.config.js โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/browserUtils.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/web/browserUtils.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/browserUtils.js.map โ†’ ../../react-native-live-markdown/lib/module/web/browserUtils.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/parser/react-native-live-markdown-parser.js โ†’ ../../react-native-live-markdown/lib/parser/react-native-live-markdown-parser.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/cursorUtils.js.map โ†’ ../../react-native-live-markdown/lib/module/web/cursorUtils.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/cursorUtils.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/web/cursorUtils.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/browserUtils.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/web/browserUtils.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/index.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/index.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/InputHistory.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/web/InputHistory.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/cursorUtils.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/web/cursorUtils.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/index.js.map โ†’ ../../react-native-live-markdown/lib/module/index.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/InputHistory.js.map โ†’ ../../react-native-live-markdown/lib/module/web/InputHistory.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/index.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/index.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/MarkdownTextInput.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/MarkdownTextInput.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/MarkdownTextInput.web.js.map โ†’ ../../react-native-live-markdown/lib/module/MarkdownTextInput.web.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.web.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/MarkdownTextInput.web.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/MarkdownTextInput.web.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/MarkdownTextInput.web.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/MarkdownTextInput.js.map โ†’ ../../react-native-live-markdown/lib/module/MarkdownTextInput.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInputDecoratorViewNativeComponent.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/MarkdownTextInputDecoratorViewNativeComponent.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/NativeLiveMarkdownModule.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/NativeLiveMarkdownModule.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/parserUtils.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/web/parserUtils.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/NativeLiveMarkdownModule.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/NativeLiveMarkdownModule.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/parserUtils.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/web/parserUtils.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/InputHistory.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/web/InputHistory.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/MarkdownTextInputDecoratorViewNativeComponent.js.map โ†’ ../../react-native-live-markdown/lib/module/MarkdownTextInputDecoratorViewNativeComponent.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/MarkdownTextInputDecoratorViewNativeComponent.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/MarkdownTextInputDecoratorViewNativeComponent.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/styleUtils.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/styleUtils.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/parserUtils.js.map โ†’ ../../react-native-live-markdown/lib/module/web/parserUtils.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/styleUtils.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/styleUtils.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/styleUtils.js.map โ†’ ../../react-native-live-markdown/lib/module/styleUtils.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/NativeLiveMarkdownModule.js.map โ†’ ../../react-native-live-markdown/lib/module/NativeLiveMarkdownModule.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/react-native-web.d.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/react-native-web.d.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/react-native-web.d.js.map โ†’ ../../react-native-live-markdown/lib/module/react-native-web.d.js.map โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownLayoutManager.mm โ†’ ../../react-native-live-markdown/ios/MarkdownLayoutManager.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTBaseTextInputView+Markdown.mm โ†’ ../../react-native-live-markdown/ios/RCTBaseTextInputView+Markdown.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownTextInputDecoratorViewManager.mm โ†’ ../../react-native-live-markdown/ios/MarkdownTextInputDecoratorViewManager.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownTextInputDecoratorComponentView.mm โ†’ ../../react-native-live-markdown/ios/MarkdownTextInputDecoratorComponentView.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownTextInputDecoratorView.mm โ†’ ../../react-native-live-markdown/ios/MarkdownTextInputDecoratorView.mm โœ” node_modules/@expensify/react-native-live-markdown/README.md โ†’ ../../react-native-live-markdown/README.md โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTMarkdownStyle.mm โ†’ ../../react-native-live-markdown/ios/RCTMarkdownStyle.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTBackedTextFieldDelegateAdapter+Markdown.mm โ†’ ../../react-native-live-markdown/ios/RCTBackedTextFieldDelegateAdapter+Markdown.mm โœ” node_modules/@expensify/react-native-live-markdown/RNLiveMarkdown.podspec โ†’ ../../react-native-live-markdown/RNLiveMarkdown.podspec โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTMarkdownUtils.mm โ†’ ../../react-native-live-markdown/ios/RCTMarkdownUtils.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTLiveMarkdownModule.mm โ†’ ../../react-native-live-markdown/ios/RCTLiveMarkdownModule.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTUITextView+Markdown.mm โ†’ ../../react-native-live-markdown/ios/RCTUITextView+Markdown.mm โœ” node_modules/@expensify/react-native-live-markdown/android/gradle.properties โ†’ ../../react-native-live-markdown/android/gradle.properties โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTTextInputComponentView+Markdown.mm โ†’ ../../react-native-live-markdown/ios/RCTTextInputComponentView+Markdown.mm โœ” node_modules/@expensify/react-native-live-markdown/android/proguard-rules.pro โ†’ ../../react-native-live-markdown/android/proguard-rules.pro โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/browserUtils.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/web/browserUtils.d.ts โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownCommitHook.mm โ†’ ../../react-native-live-markdown/ios/MarkdownCommitHook.mm โœ” node_modules/@expensify/react-native-live-markdown/src/web/cursorUtils.ts โ†’ ../../react-native-live-markdown/src/web/cursorUtils.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/cursorUtils.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/web/cursorUtils.d.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/InputHistory.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/web/InputHistory.d.ts โœ” node_modules/@expensify/react-native-live-markdown/src/web/InputHistory.ts โ†’ ../../react-native-live-markdown/src/web/InputHistory.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/index.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/index.d.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.web.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/MarkdownTextInput.web.d.ts โœ” node_modules/@expensify/react-native-live-markdown/src/web/browserUtils.ts โ†’ ../../react-native-live-markdown/src/web/browserUtils.ts โœ” node_modules/@expensify/react-native-live-markdown/src/MarkdownTextInputDecoratorViewNativeComponent.ts โ†’ ../../react-native-live-markdown/src/MarkdownTextInputDecoratorViewNativeComponent.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInputDecoratorViewNativeComponent.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/MarkdownTextInputDecoratorViewNativeComponent.d.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/parserUtils.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/web/parserUtils.d.ts โœ” node_modules/@expensify/react-native-live-markdown/src/NativeLiveMarkdownModule.ts โ†’ ../../react-native-live-markdown/src/NativeLiveMarkdownModule.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/styleUtils.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/styleUtils.d.ts โœ” node_modules/@expensify/react-native-live-markdown/src/index.tsx โ†’ ../../react-native-live-markdown/src/index.tsx โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/NativeLiveMarkdownModule.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/NativeLiveMarkdownModule.d.ts โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/CMakeLists.txt โ†’ ../../react-native-live-markdown/android/src/main/cpp/CMakeLists.txt โœ” node_modules/@expensify/react-native-live-markdown/src/styleUtils.ts โ†’ ../../react-native-live-markdown/src/styleUtils.ts โœ” node_modules/@expensify/react-native-live-markdown/src/web/parserUtils.ts โ†’ ../../react-native-live-markdown/src/web/parserUtils.ts โœ” node_modules/@expensify/react-native-live-markdown/src/MarkdownTextInput.tsx โ†’ ../../react-native-live-markdown/src/MarkdownTextInput.tsx โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/AndroidManifest.xml โ†’ ../../react-native-live-markdown/android/src/main/AndroidManifest.xml โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/CMakeLists.txt โ†’ ../../react-native-live-markdown/android/src/main/new_arch/CMakeLists.txt โœ” node_modules/@expensify/react-native-live-markdown/src/react-native-web.d.ts โ†’ ../../react-native-live-markdown/src/react-native-web.d.ts โœ” node_modules/@expensify/react-native-live-markdown/src/MarkdownTextInput.web.tsx โ†’ ../../react-native-live-markdown/src/MarkdownTextInput.web.tsx โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/AndroidManifestNew.xml โ†’ ../../react-native-live-markdown/android/src/main/AndroidManifestNew.xml 10:46:58 AM Detected rename in ../../react-native-live-markdown/lib/commonjs/index.js.map Linking @expensify/react-native-live-markdown in publish mode: Error: ENOENT: no such file or directory, lstat '/Users/roryabraham/react-native-live-markdown/lib/module/MarkdownTextInput.js' ```

I'm thinking what's happening is something like:

  1. Source file changes in dependency
  2. npx link notices the change and begins re-linking the file
  3. Watched build in dependency clears out the build folder (~/react-native-live-markdown/lib in my case) and starts writing new compiled files into it
  4. Sometime during the previous step, npx link tries to hardlink to a file in ~/react-native-live-markdown/lib that isn't present yet. Then it crashes.
roryabraham commented 2 months ago

Maybe a solution would be to wrap the call to throttledHardlinkPackage on line 121 in link-publish-mode.ts in a try/catch that will essentially poll for the expected source file and wait for it to show up. And if it doesn't, maybe just log a warning but don't crash the watch process (that way, if someone intentionally deletes a source file in a linked dependency, it won't crash npx link)

privatenumber commented 2 months ago

Thanks @roryabraham

Can you try it again?

I pushed the following changes:

npx 'privatenumber/link#npm/publish-watch' publish --watch <pkg>
roryabraham commented 2 months ago

Having a similar issue as before:

12:46:54 PM Detected rename in ../../react-native-live-markdown/lib/commonjs/MarkdownTextInput.web.js.map

Error: ENOENT: no such file or directory, lstat '/Users/roryabraham/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.web.d.ts'

To make sure I got the up-to-date code, I'll try checking out this branch and running link locally rather than over npx

roryabraham commented 2 months ago

Running it locally (so I for sure was using the up-to-date code from this branch). This time I got a different set of errors:

logs ``` node ~/link/dist/cli.js publish --watch ~/react-native-live-markdown Linking @expensify/react-native-live-markdown in publish mode: โœ” node_modules/@expensify/react-native-live-markdown/LICENSE โ†’ ../../react-native-live-markdown/LICENSE โœ” node_modules/@expensify/react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownShadowFamilyRegistry.cpp โ†’ ../../react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownShadowFamilyRegistry.cpp โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/MarkdownCommitHook.cpp โ†’ ../../react-native-live-markdown/android/src/main/new_arch/MarkdownCommitHook.cpp โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/MarkdownUtils.cpp โ†’ ../../react-native-live-markdown/android/src/main/cpp/MarkdownUtils.cpp โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/NativeProxy.cpp โ†’ ../../react-native-live-markdown/android/src/main/new_arch/NativeProxy.cpp โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/OnLoad.cpp โ†’ ../../react-native-live-markdown/android/src/main/new_arch/OnLoad.cpp โœ” node_modules/@expensify/react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorShadowNode.cpp โ†’ ../../react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorShadowNode.cpp โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/RNLiveMarkdownSpec.cpp โ†’ ../../react-native-live-markdown/android/src/main/new_arch/RNLiveMarkdownSpec.cpp โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/OnLoad.cpp โ†’ ../../react-native-live-markdown/android/src/main/cpp/OnLoad.cpp โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/MarkdownCommitHook.h โ†’ ../../react-native-live-markdown/android/src/main/new_arch/MarkdownCommitHook.h โœ” node_modules/@expensify/react-native-live-markdown/src/web/MarkdownTextInput.css โ†’ ../../react-native-live-markdown/src/web/MarkdownTextInput.css โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownCommitHook.h โ†’ ../../react-native-live-markdown/ios/MarkdownCommitHook.h โœ” node_modules/@expensify/react-native-live-markdown/android/build.gradle โ†’ ../../react-native-live-markdown/android/build.gradle โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownLayoutManager.h โ†’ ../../react-native-live-markdown/ios/MarkdownLayoutManager.h โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownTextInputDecoratorComponentView.h โ†’ ../../react-native-live-markdown/ios/MarkdownTextInputDecoratorComponentView.h โœ” node_modules/@expensify/react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownShadowFamilyRegistry.h โ†’ ../../react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownShadowFamilyRegistry.h โœ” node_modules/@expensify/react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorShadowNode.h โ†’ ../../react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorShadowNode.h โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownTextInputDecoratorView.h โ†’ ../../react-native-live-markdown/ios/MarkdownTextInputDecoratorView.h โœ” node_modules/@expensify/react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorViewComponentDescriptor.h โ†’ ../../react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorViewComponentDescriptor.h โœ” node_modules/@expensify/react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorState.h โ†’ ../../react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorState.h โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownTextInputDecoratorViewManager.h โ†’ ../../react-native-live-markdown/ios/MarkdownTextInputDecoratorViewManager.h โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/NativeProxy.h โ†’ ../../react-native-live-markdown/android/src/main/new_arch/NativeProxy.h โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTBackedTextFieldDelegateAdapter+Markdown.h โ†’ ../../react-native-live-markdown/ios/RCTBackedTextFieldDelegateAdapter+Markdown.h โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTBaseTextInputView+Markdown.h โ†’ ../../react-native-live-markdown/ios/RCTBaseTextInputView+Markdown.h โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTLiveMarkdownModule.h โ†’ ../../react-native-live-markdown/ios/RCTLiveMarkdownModule.h โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTMarkdownStyle.h โ†’ ../../react-native-live-markdown/ios/RCTMarkdownStyle.h โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/MarkdownUtils.h โ†’ ../../react-native-live-markdown/android/src/main/cpp/MarkdownUtils.h โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTMarkdownUtils.h โ†’ ../../react-native-live-markdown/ios/RCTMarkdownUtils.h โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTTextInputComponentView+Markdown.h โ†’ ../../react-native-live-markdown/ios/RCTTextInputComponentView+Markdown.h โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTUITextView+Markdown.h โ†’ ../../react-native-live-markdown/ios/RCTUITextView+Markdown.h โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/RNLiveMarkdownSpec.h โ†’ ../../react-native-live-markdown/android/src/main/new_arch/RNLiveMarkdownSpec.h โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/CustomFabricUIManager.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/CustomFabricUIManager.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/LiveMarkdownModule.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/LiveMarkdownModule.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/LiveMarkdownPackage.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/LiveMarkdownPackage.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/CustomMountingManager.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/CustomMountingManager.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownBackgroundColorSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownBackgroundColorSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownBoldSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownBoldSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownEmojiSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownEmojiSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownFontSizeSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownFontSizeSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownFontFamilySpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownFontFamilySpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownBlockquoteSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownBlockquoteSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownForegroundColorSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownForegroundColorSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownItalicSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownItalicSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownStrikethroughSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownStrikethroughSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownLineHeightSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownLineHeightSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownStyle.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownStyle.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownTextInputDecoratorView.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownTextInputDecoratorView.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/newarch/MarkdownTextInputDecoratorViewManagerSpec.java โ†’ ../../react-native-live-markdown/android/src/newarch/MarkdownTextInputDecoratorViewManagerSpec.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownTextInputDecoratorViewManager.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownTextInputDecoratorViewManager.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/oldarch/MarkdownTextInputDecoratorViewManagerSpec.java โ†’ ../../react-native-live-markdown/android/src/oldarch/MarkdownTextInputDecoratorViewManagerSpec.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownTextWatcher.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownTextWatcher.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownUnderlineSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownUnderlineSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/oldarch/NativeLiveMarkdownModuleSpec.java โ†’ ../../react-native-live-markdown/android/src/oldarch/NativeLiveMarkdownModuleSpec.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownUtils.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownUtils.java โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/MarkdownTextInput.css โ†’ ../../react-native-live-markdown/lib/commonjs/web/MarkdownTextInput.css โœ” node_modules/@expensify/react-native-live-markdown/android/src/oldarch/NativeProxy.java โ†’ ../../react-native-live-markdown/android/src/oldarch/NativeProxy.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/newarch/NativeProxy.java โ†’ ../../react-native-live-markdown/android/src/newarch/NativeProxy.java โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/browserUtils.js โ†’ ../../react-native-live-markdown/lib/commonjs/web/browserUtils.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/index.js โ†’ ../../react-native-live-markdown/lib/commonjs/index.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/cursorUtils.js โ†’ ../../react-native-live-markdown/lib/commonjs/web/cursorUtils.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/InputHistory.js โ†’ ../../react-native-live-markdown/lib/commonjs/web/InputHistory.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/NativeLiveMarkdownModule.js โ†’ ../../react-native-live-markdown/lib/commonjs/NativeLiveMarkdownModule.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/MarkdownTextInput.js โ†’ ../../react-native-live-markdown/lib/commonjs/MarkdownTextInput.js โœ” node_modules/@expensify/react-native-live-markdown/parser/react-native-live-markdown-parser.js โ†’ ../../react-native-live-markdown/parser/react-native-live-markdown-parser.js โœ” node_modules/@expensify/react-native-live-markdown/lib/parser/react-native-live-markdown-parser.js โ†’ ../../react-native-live-markdown/lib/parser/react-native-live-markdown-parser.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/MarkdownTextInput.web.js โ†’ ../../react-native-live-markdown/lib/commonjs/MarkdownTextInput.web.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/react-native-web.d.js โ†’ ../../react-native-live-markdown/lib/commonjs/react-native-web.d.js โœ” node_modules/@expensify/react-native-live-markdown/react-native.config.js โ†’ ../../react-native-live-markdown/react-native.config.js โœ” node_modules/@expensify/react-native-live-markdown/package.json โ†’ ../../react-native-live-markdown/package.json โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/MarkdownTextInputDecoratorViewNativeComponent.js โ†’ ../../react-native-live-markdown/lib/commonjs/MarkdownTextInputDecoratorViewNativeComponent.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/index.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/index.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/browserUtils.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/web/browserUtils.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/parserUtils.js โ†’ ../../react-native-live-markdown/lib/commonjs/web/parserUtils.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/styleUtils.js โ†’ ../../react-native-live-markdown/lib/commonjs/styleUtils.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/cursorUtils.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/web/cursorUtils.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/InputHistory.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/web/InputHistory.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/NativeLiveMarkdownModule.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/NativeLiveMarkdownModule.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/MarkdownTextInput.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/MarkdownTextInput.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/react-native-web.d.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/react-native-web.d.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/MarkdownTextInputDecoratorViewNativeComponent.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/MarkdownTextInputDecoratorViewNativeComponent.js.map โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownCommitHook.mm โ†’ ../../react-native-live-markdown/ios/MarkdownCommitHook.mm โœ” node_modules/@expensify/react-native-live-markdown/README.md โ†’ ../../react-native-live-markdown/README.md โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/MarkdownTextInput.web.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/MarkdownTextInput.web.js.map โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownLayoutManager.mm โ†’ ../../react-native-live-markdown/ios/MarkdownLayoutManager.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownTextInputDecoratorComponentView.mm โ†’ ../../react-native-live-markdown/ios/MarkdownTextInputDecoratorComponentView.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownTextInputDecoratorView.mm โ†’ ../../react-native-live-markdown/ios/MarkdownTextInputDecoratorView.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTBackedTextFieldDelegateAdapter+Markdown.mm โ†’ ../../react-native-live-markdown/ios/RCTBackedTextFieldDelegateAdapter+Markdown.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTMarkdownStyle.mm โ†’ ../../react-native-live-markdown/ios/RCTMarkdownStyle.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownTextInputDecoratorViewManager.mm โ†’ ../../react-native-live-markdown/ios/MarkdownTextInputDecoratorViewManager.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTMarkdownUtils.mm โ†’ ../../react-native-live-markdown/ios/RCTMarkdownUtils.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTTextInputComponentView+Markdown.mm โ†’ ../../react-native-live-markdown/ios/RCTTextInputComponentView+Markdown.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTBaseTextInputView+Markdown.mm โ†’ ../../react-native-live-markdown/ios/RCTBaseTextInputView+Markdown.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTUITextView+Markdown.mm โ†’ ../../react-native-live-markdown/ios/RCTUITextView+Markdown.mm โœ” node_modules/@expensify/react-native-live-markdown/RNLiveMarkdown.podspec โ†’ ../../react-native-live-markdown/RNLiveMarkdown.podspec โœ” node_modules/@expensify/react-native-live-markdown/android/gradle.properties โ†’ ../../react-native-live-markdown/android/gradle.properties โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTLiveMarkdownModule.mm โ†’ ../../react-native-live-markdown/ios/RCTLiveMarkdownModule.mm โœ” node_modules/@expensify/react-native-live-markdown/src/web/browserUtils.ts โ†’ ../../react-native-live-markdown/src/web/browserUtils.ts โœ” node_modules/@expensify/react-native-live-markdown/android/proguard-rules.pro โ†’ ../../react-native-live-markdown/android/proguard-rules.pro โœ” node_modules/@expensify/react-native-live-markdown/src/web/cursorUtils.ts โ†’ ../../react-native-live-markdown/src/web/cursorUtils.ts โœ” node_modules/@expensify/react-native-live-markdown/src/web/InputHistory.ts โ†’ ../../react-native-live-markdown/src/web/InputHistory.ts โœ” node_modules/@expensify/react-native-live-markdown/src/MarkdownTextInputDecoratorViewNativeComponent.ts โ†’ ../../react-native-live-markdown/src/MarkdownTextInputDecoratorViewNativeComponent.ts โœ” node_modules/@expensify/react-native-live-markdown/src/NativeLiveMarkdownModule.ts โ†’ ../../react-native-live-markdown/src/NativeLiveMarkdownModule.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/parserUtils.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/web/parserUtils.js.map โœ” node_modules/@expensify/react-native-live-markdown/src/web/parserUtils.ts โ†’ ../../react-native-live-markdown/src/web/parserUtils.ts โœ” node_modules/@expensify/react-native-live-markdown/src/react-native-web.d.ts โ†’ ../../react-native-live-markdown/src/react-native-web.d.ts โœ” node_modules/@expensify/react-native-live-markdown/src/index.tsx โ†’ ../../react-native-live-markdown/src/index.tsx โœ” node_modules/@expensify/react-native-live-markdown/src/styleUtils.ts โ†’ ../../react-native-live-markdown/src/styleUtils.ts โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/CMakeLists.txt โ†’ ../../react-native-live-markdown/android/src/main/cpp/CMakeLists.txt โœ” node_modules/@expensify/react-native-live-markdown/src/MarkdownTextInput.web.tsx โ†’ ../../react-native-live-markdown/src/MarkdownTextInput.web.tsx โœ” node_modules/@expensify/react-native-live-markdown/src/MarkdownTextInput.tsx โ†’ ../../react-native-live-markdown/src/MarkdownTextInput.tsx โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/AndroidManifest.xml โ†’ ../../react-native-live-markdown/android/src/main/AndroidManifest.xml โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/CMakeLists.txt โ†’ ../../react-native-live-markdown/android/src/main/new_arch/CMakeLists.txt โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/styleUtils.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/styleUtils.js.map โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/AndroidManifestNew.xml โ†’ ../../react-native-live-markdown/android/src/main/AndroidManifestNew.xml โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/MarkdownTextInput.css โ†’ ../../react-native-live-markdown/lib/module/web/MarkdownTextInput.css โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/browserUtils.js โ†’ ../../react-native-live-markdown/lib/module/web/browserUtils.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/index.js โ†’ ../../react-native-live-markdown/lib/module/index.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/cursorUtils.js โ†’ ../../react-native-live-markdown/lib/module/web/cursorUtils.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/InputHistory.js โ†’ ../../react-native-live-markdown/lib/module/web/InputHistory.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/MarkdownTextInput.js โ†’ ../../react-native-live-markdown/lib/module/MarkdownTextInput.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/MarkdownTextInput.web.js โ†’ ../../react-native-live-markdown/lib/module/MarkdownTextInput.web.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/NativeLiveMarkdownModule.js โ†’ ../../react-native-live-markdown/lib/module/NativeLiveMarkdownModule.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/parserUtils.js โ†’ ../../react-native-live-markdown/lib/module/web/parserUtils.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/MarkdownTextInputDecoratorViewNativeComponent.js โ†’ ../../react-native-live-markdown/lib/module/MarkdownTextInputDecoratorViewNativeComponent.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/react-native-web.d.js โ†’ ../../react-native-live-markdown/lib/module/react-native-web.d.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/styleUtils.js โ†’ ../../react-native-live-markdown/lib/module/styleUtils.js โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/browserUtils.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/web/browserUtils.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/index.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/index.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/browserUtils.js.map โ†’ ../../react-native-live-markdown/lib/module/web/browserUtils.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/cursorUtils.js.map โ†’ ../../react-native-live-markdown/lib/module/web/cursorUtils.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/index.js.map โ†’ ../../react-native-live-markdown/lib/module/index.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/InputHistory.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/web/InputHistory.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/InputHistory.js.map โ†’ ../../react-native-live-markdown/lib/module/web/InputHistory.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/cursorUtils.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/web/cursorUtils.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.web.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/MarkdownTextInput.web.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/MarkdownTextInput.js.map โ†’ ../../react-native-live-markdown/lib/module/MarkdownTextInput.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInputDecoratorViewNativeComponent.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/MarkdownTextInputDecoratorViewNativeComponent.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/MarkdownTextInput.web.js.map โ†’ ../../react-native-live-markdown/lib/module/MarkdownTextInput.web.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/NativeLiveMarkdownModule.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/NativeLiveMarkdownModule.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/MarkdownTextInputDecoratorViewNativeComponent.js.map โ†’ ../../react-native-live-markdown/lib/module/MarkdownTextInputDecoratorViewNativeComponent.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/NativeLiveMarkdownModule.js.map โ†’ ../../react-native-live-markdown/lib/module/NativeLiveMarkdownModule.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/parserUtils.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/web/parserUtils.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/parserUtils.js.map โ†’ ../../react-native-live-markdown/lib/module/web/parserUtils.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/react-native-web.d.js.map โ†’ ../../react-native-live-markdown/lib/module/react-native-web.d.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/styleUtils.js.map โ†’ ../../react-native-live-markdown/lib/module/styleUtils.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/styleUtils.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/styleUtils.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/browserUtils.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/web/browserUtils.d.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/index.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/index.d.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/cursorUtils.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/web/cursorUtils.d.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/InputHistory.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/web/InputHistory.d.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/NativeLiveMarkdownModule.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/NativeLiveMarkdownModule.d.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.web.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/MarkdownTextInput.web.d.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/parserUtils.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/web/parserUtils.d.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInputDecoratorViewNativeComponent.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/MarkdownTextInputDecoratorViewNativeComponent.d.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/styleUtils.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/styleUtils.d.ts 12:51:32 PM Detected change in ../../react-native-live-markdown/src/MarkdownTextInput.web.tsx Linking @expensify/react-native-live-markdown in publish mode: โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/MarkdownCommitHook.cpp โ†’ ../../react-native-live-markdown/android/src/main/new_arch/MarkdownCommitHook.cpp โœ” node_modules/@expensify/react-native-live-markdown/LICENSE โ†’ ../../react-native-live-markdown/LICENSE โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/NativeProxy.cpp โ†’ ../../react-native-live-markdown/android/src/main/new_arch/NativeProxy.cpp โœ” node_modules/@expensify/react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorShadowNode.cpp โ†’ ../../react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorShadowNode.cpp โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/MarkdownUtils.cpp โ†’ ../../react-native-live-markdown/android/src/main/cpp/MarkdownUtils.cpp โœ” node_modules/@expensify/react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownShadowFamilyRegistry.cpp โ†’ ../../react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownShadowFamilyRegistry.cpp โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/MarkdownTextInput.css โ†’ ../../react-native-live-markdown/lib/commonjs/web/MarkdownTextInput.css โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/OnLoad.cpp โ†’ ../../react-native-live-markdown/android/src/main/new_arch/OnLoad.cpp โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/RNLiveMarkdownSpec.cpp โ†’ ../../react-native-live-markdown/android/src/main/new_arch/RNLiveMarkdownSpec.cpp โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/MarkdownTextInput.css โ†’ ../../react-native-live-markdown/lib/module/web/MarkdownTextInput.css โœ” node_modules/@expensify/react-native-live-markdown/android/build.gradle โ†’ ../../react-native-live-markdown/android/build.gradle โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/OnLoad.cpp โ†’ ../../react-native-live-markdown/android/src/main/cpp/OnLoad.cpp โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownCommitHook.h โ†’ ../../react-native-live-markdown/ios/MarkdownCommitHook.h โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/MarkdownCommitHook.h โ†’ ../../react-native-live-markdown/android/src/main/new_arch/MarkdownCommitHook.h โœ” node_modules/@expensify/react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownShadowFamilyRegistry.h โ†’ ../../react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownShadowFamilyRegistry.h โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownTextInputDecoratorComponentView.h โ†’ ../../react-native-live-markdown/ios/MarkdownTextInputDecoratorComponentView.h โœ” node_modules/@expensify/react-native-live-markdown/src/web/MarkdownTextInput.css โ†’ ../../react-native-live-markdown/src/web/MarkdownTextInput.css โœ” node_modules/@expensify/react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorShadowNode.h โ†’ ../../react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorShadowNode.h โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownTextInputDecoratorViewManager.h โ†’ ../../react-native-live-markdown/ios/MarkdownTextInputDecoratorViewManager.h โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/MarkdownUtils.h โ†’ ../../react-native-live-markdown/android/src/main/cpp/MarkdownUtils.h โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownTextInputDecoratorView.h โ†’ ../../react-native-live-markdown/ios/MarkdownTextInputDecoratorView.h โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/NativeProxy.h โ†’ ../../react-native-live-markdown/android/src/main/new_arch/NativeProxy.h โœ” node_modules/@expensify/react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorState.h โ†’ ../../react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorState.h โœ” node_modules/@expensify/react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorViewComponentDescriptor.h โ†’ ../../react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorViewComponentDescriptor.h โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTBackedTextFieldDelegateAdapter+Markdown.h โ†’ ../../react-native-live-markdown/ios/RCTBackedTextFieldDelegateAdapter+Markdown.h โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownLayoutManager.h โ†’ ../../react-native-live-markdown/ios/MarkdownLayoutManager.h โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTBaseTextInputView+Markdown.h โ†’ ../../react-native-live-markdown/ios/RCTBaseTextInputView+Markdown.h โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTLiveMarkdownModule.h โ†’ ../../react-native-live-markdown/ios/RCTLiveMarkdownModule.h โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTTextInputComponentView+Markdown.h โ†’ ../../react-native-live-markdown/ios/RCTTextInputComponentView+Markdown.h โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTMarkdownStyle.h โ†’ ../../react-native-live-markdown/ios/RCTMarkdownStyle.h โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTMarkdownUtils.h โ†’ ../../react-native-live-markdown/ios/RCTMarkdownUtils.h โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/RNLiveMarkdownSpec.h โ†’ ../../react-native-live-markdown/android/src/main/new_arch/RNLiveMarkdownSpec.h โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/CustomMountingManager.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/CustomMountingManager.java โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTUITextView+Markdown.h โ†’ ../../react-native-live-markdown/ios/RCTUITextView+Markdown.h โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/LiveMarkdownModule.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/LiveMarkdownModule.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownBackgroundColorSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownBackgroundColorSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownBlockquoteSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownBlockquoteSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownBoldSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownBoldSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/LiveMarkdownPackage.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/LiveMarkdownPackage.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownFontFamilySpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownFontFamilySpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/CustomFabricUIManager.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/CustomFabricUIManager.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownEmojiSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownEmojiSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownForegroundColorSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownForegroundColorSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownFontSizeSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownFontSizeSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownItalicSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownItalicSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownLineHeightSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownLineHeightSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownStyle.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownStyle.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownStrikethroughSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownStrikethroughSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownTextInputDecoratorView.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownTextInputDecoratorView.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/newarch/MarkdownTextInputDecoratorViewManagerSpec.java โ†’ ../../react-native-live-markdown/android/src/newarch/MarkdownTextInputDecoratorViewManagerSpec.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownUtils.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownUtils.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownTextWatcher.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownTextWatcher.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownUnderlineSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownUnderlineSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/oldarch/MarkdownTextInputDecoratorViewManagerSpec.java โ†’ ../../react-native-live-markdown/android/src/oldarch/MarkdownTextInputDecoratorViewManagerSpec.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/oldarch/NativeLiveMarkdownModuleSpec.java โ†’ ../../react-native-live-markdown/android/src/oldarch/NativeLiveMarkdownModuleSpec.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownTextInputDecoratorViewManager.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownTextInputDecoratorViewManager.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/newarch/NativeProxy.java โ†’ ../../react-native-live-markdown/android/src/newarch/NativeProxy.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/oldarch/NativeProxy.java โ†’ ../../react-native-live-markdown/android/src/oldarch/NativeProxy.java โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/browserUtils.js โ†’ ../../react-native-live-markdown/lib/module/web/browserUtils.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/browserUtils.js โ†’ ../../react-native-live-markdown/lib/commonjs/web/browserUtils.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/cursorUtils.js โ†’ ../../react-native-live-markdown/lib/module/web/cursorUtils.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/index.js โ†’ ../../react-native-live-markdown/lib/module/index.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/cursorUtils.js โ†’ ../../react-native-live-markdown/lib/commonjs/web/cursorUtils.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/InputHistory.js โ†’ ../../react-native-live-markdown/lib/module/web/InputHistory.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/index.js โ†’ ../../react-native-live-markdown/lib/commonjs/index.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/InputHistory.js โ†’ ../../react-native-live-markdown/lib/commonjs/web/InputHistory.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/MarkdownTextInput.js โ†’ ../../react-native-live-markdown/lib/module/MarkdownTextInput.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/MarkdownTextInput.js โ†’ ../../react-native-live-markdown/lib/commonjs/MarkdownTextInput.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/MarkdownTextInput.web.js โ†’ ../../react-native-live-markdown/lib/module/MarkdownTextInput.web.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/MarkdownTextInput.web.js โ†’ ../../react-native-live-markdown/lib/commonjs/MarkdownTextInput.web.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/MarkdownTextInputDecoratorViewNativeComponent.js โ†’ ../../react-native-live-markdown/lib/commonjs/MarkdownTextInputDecoratorViewNativeComponent.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/parserUtils.js โ†’ ../../react-native-live-markdown/lib/commonjs/web/parserUtils.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/NativeLiveMarkdownModule.js โ†’ ../../react-native-live-markdown/lib/commonjs/NativeLiveMarkdownModule.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/NativeLiveMarkdownModule.js โ†’ ../../react-native-live-markdown/lib/module/NativeLiveMarkdownModule.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/MarkdownTextInputDecoratorViewNativeComponent.js โ†’ ../../react-native-live-markdown/lib/module/MarkdownTextInputDecoratorViewNativeComponent.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/parserUtils.js โ†’ ../../react-native-live-markdown/lib/module/web/parserUtils.js โœ” node_modules/@expensify/react-native-live-markdown/lib/parser/react-native-live-markdown-parser.js โ†’ ../../react-native-live-markdown/lib/parser/react-native-live-markdown-parser.js โœ” node_modules/@expensify/react-native-live-markdown/parser/react-native-live-markdown-parser.js โ†’ ../../react-native-live-markdown/parser/react-native-live-markdown-parser.js โœ” node_modules/@expensify/react-native-live-markdown/lib/module/styleUtils.js โ†’ ../../react-native-live-markdown/lib/module/styleUtils.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/styleUtils.js โ†’ ../../react-native-live-markdown/lib/commonjs/styleUtils.js โœ” node_modules/@expensify/react-native-live-markdown/react-native.config.js โ†’ ../../react-native-live-markdown/react-native.config.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/react-native-web.d.js โ†’ ../../react-native-live-markdown/lib/commonjs/react-native-web.d.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/browserUtils.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/web/browserUtils.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/browserUtils.js.map โ†’ ../../react-native-live-markdown/lib/module/web/browserUtils.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/browserUtils.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/web/browserUtils.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/package.json โ†’ ../../react-native-live-markdown/package.json โœ” node_modules/@expensify/react-native-live-markdown/lib/module/react-native-web.d.js โ†’ ../../react-native-live-markdown/lib/module/react-native-web.d.js โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/cursorUtils.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/web/cursorUtils.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/cursorUtils.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/web/cursorUtils.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/cursorUtils.js.map โ†’ ../../react-native-live-markdown/lib/module/web/cursorUtils.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/index.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/index.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/InputHistory.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/web/InputHistory.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/index.js.map โ†’ ../../react-native-live-markdown/lib/module/index.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/InputHistory.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/web/InputHistory.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/index.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/index.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/MarkdownTextInput.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/MarkdownTextInput.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/InputHistory.js.map โ†’ ../../react-native-live-markdown/lib/module/web/InputHistory.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/MarkdownTextInput.web.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/MarkdownTextInput.web.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInputDecoratorViewNativeComponent.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/MarkdownTextInputDecoratorViewNativeComponent.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/MarkdownTextInput.web.js.map โ†’ ../../react-native-live-markdown/lib/module/MarkdownTextInput.web.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/MarkdownTextInput.js.map โ†’ ../../react-native-live-markdown/lib/module/MarkdownTextInput.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/NativeLiveMarkdownModule.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/NativeLiveMarkdownModule.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/MarkdownTextInputDecoratorViewNativeComponent.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/MarkdownTextInputDecoratorViewNativeComponent.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.web.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/MarkdownTextInput.web.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/MarkdownTextInputDecoratorViewNativeComponent.js.map โ†’ ../../react-native-live-markdown/lib/module/MarkdownTextInputDecoratorViewNativeComponent.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/NativeLiveMarkdownModule.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/NativeLiveMarkdownModule.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/NativeLiveMarkdownModule.js.map โ†’ ../../react-native-live-markdown/lib/module/NativeLiveMarkdownModule.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/parserUtils.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/web/parserUtils.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/web/parserUtils.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/web/parserUtils.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/web/parserUtils.js.map โ†’ ../../react-native-live-markdown/lib/module/web/parserUtils.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/react-native-web.d.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/react-native-web.d.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/module/react-native-web.d.js.map โ†’ ../../react-native-live-markdown/lib/module/react-native-web.d.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/commonjs/styleUtils.js.map โ†’ ../../react-native-live-markdown/lib/commonjs/styleUtils.js.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/styleUtils.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/styleUtils.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/README.md โ†’ ../../react-native-live-markdown/README.md โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownLayoutManager.mm โ†’ ../../react-native-live-markdown/ios/MarkdownLayoutManager.mm โœ” node_modules/@expensify/react-native-live-markdown/lib/module/styleUtils.js.map โ†’ ../../react-native-live-markdown/lib/module/styleUtils.js.map โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownCommitHook.mm โ†’ ../../react-native-live-markdown/ios/MarkdownCommitHook.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownTextInputDecoratorComponentView.mm โ†’ ../../react-native-live-markdown/ios/MarkdownTextInputDecoratorComponentView.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownTextInputDecoratorView.mm โ†’ ../../react-native-live-markdown/ios/MarkdownTextInputDecoratorView.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTBaseTextInputView+Markdown.mm โ†’ ../../react-native-live-markdown/ios/RCTBaseTextInputView+Markdown.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTBackedTextFieldDelegateAdapter+Markdown.mm โ†’ ../../react-native-live-markdown/ios/RCTBackedTextFieldDelegateAdapter+Markdown.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTLiveMarkdownModule.mm โ†’ ../../react-native-live-markdown/ios/RCTLiveMarkdownModule.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTMarkdownStyle.mm โ†’ ../../react-native-live-markdown/ios/RCTMarkdownStyle.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownTextInputDecoratorViewManager.mm โ†’ ../../react-native-live-markdown/ios/MarkdownTextInputDecoratorViewManager.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTMarkdownUtils.mm โ†’ ../../react-native-live-markdown/ios/RCTMarkdownUtils.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTTextInputComponentView+Markdown.mm โ†’ ../../react-native-live-markdown/ios/RCTTextInputComponentView+Markdown.mm โœ” node_modules/@expensify/react-native-live-markdown/RNLiveMarkdown.podspec โ†’ ../../react-native-live-markdown/RNLiveMarkdown.podspec โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTUITextView+Markdown.mm โ†’ ../../react-native-live-markdown/ios/RCTUITextView+Markdown.mm โœ” node_modules/@expensify/react-native-live-markdown/android/proguard-rules.pro โ†’ ../../react-native-live-markdown/android/proguard-rules.pro โœ” node_modules/@expensify/react-native-live-markdown/android/gradle.properties โ†’ ../../react-native-live-markdown/android/gradle.properties โœ” node_modules/@expensify/react-native-live-markdown/src/web/browserUtils.ts โ†’ ../../react-native-live-markdown/src/web/browserUtils.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/browserUtils.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/web/browserUtils.d.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/cursorUtils.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/web/cursorUtils.d.ts โœ” node_modules/@expensify/react-native-live-markdown/src/web/cursorUtils.ts โ†’ ../../react-native-live-markdown/src/web/cursorUtils.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/InputHistory.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/web/InputHistory.d.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/index.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/index.d.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.web.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/MarkdownTextInput.web.d.ts โœ” node_modules/@expensify/react-native-live-markdown/src/web/InputHistory.ts โ†’ ../../react-native-live-markdown/src/web/InputHistory.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInputDecoratorViewNativeComponent.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/MarkdownTextInputDecoratorViewNativeComponent.d.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/NativeLiveMarkdownModule.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/NativeLiveMarkdownModule.d.ts โœ” node_modules/@expensify/react-native-live-markdown/src/MarkdownTextInputDecoratorViewNativeComponent.ts โ†’ ../../react-native-live-markdown/src/MarkdownTextInputDecoratorViewNativeComponent.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/parserUtils.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/web/parserUtils.d.ts โœ” node_modules/@expensify/react-native-live-markdown/src/NativeLiveMarkdownModule.ts โ†’ ../../react-native-live-markdown/src/NativeLiveMarkdownModule.ts โœ” node_modules/@expensify/react-native-live-markdown/src/react-native-web.d.ts โ†’ ../../react-native-live-markdown/src/react-native-web.d.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/styleUtils.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/styleUtils.d.ts โœ” node_modules/@expensify/react-native-live-markdown/src/index.tsx โ†’ ../../react-native-live-markdown/src/index.tsx โœ” node_modules/@expensify/react-native-live-markdown/src/styleUtils.ts โ†’ ../../react-native-live-markdown/src/styleUtils.ts โœ” node_modules/@expensify/react-native-live-markdown/src/MarkdownTextInput.tsx โ†’ ../../react-native-live-markdown/src/MarkdownTextInput.tsx โœ” node_modules/@expensify/react-native-live-markdown/src/web/parserUtils.ts โ†’ ../../react-native-live-markdown/src/web/parserUtils.ts โœ” node_modules/@expensify/react-native-live-markdown/src/MarkdownTextInput.web.tsx โ†’ ../../react-native-live-markdown/src/MarkdownTextInput.web.tsx โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/CMakeLists.txt โ†’ ../../react-native-live-markdown/android/src/main/cpp/CMakeLists.txt โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/CMakeLists.txt โ†’ ../../react-native-live-markdown/android/src/main/new_arch/CMakeLists.txt โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/AndroidManifest.xml โ†’ ../../react-native-live-markdown/android/src/main/AndroidManifest.xml โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/AndroidManifestNew.xml โ†’ ../../react-native-live-markdown/android/src/main/AndroidManifestNew.xml 12:51:34 PM Detected rename in ../../react-native-live-markdown/lib/commonjs/MarkdownTextInput.web.js.map Linking @expensify/react-native-live-markdown in publish mode: โœ” node_modules/@expensify/react-native-live-markdown/LICENSE โ†’ ../../react-native-live-markdown/LICENSE โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/MarkdownCommitHook.cpp โ†’ ../../react-native-live-markdown/android/src/main/new_arch/MarkdownCommitHook.cpp โœ” node_modules/@expensify/react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorShadowNode.cpp โ†’ ../../react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorShadowNode.cpp โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/MarkdownUtils.cpp โ†’ ../../react-native-live-markdown/android/src/main/cpp/MarkdownUtils.cpp โœ” node_modules/@expensify/react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownShadowFamilyRegistry.cpp โ†’ ../../react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownShadowFamilyRegistry.cpp โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/NativeProxy.cpp โ†’ ../../react-native-live-markdown/android/src/main/new_arch/NativeProxy.cpp โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/OnLoad.cpp โ†’ ../../react-native-live-markdown/android/src/main/cpp/OnLoad.cpp โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/RNLiveMarkdownSpec.cpp โ†’ ../../react-native-live-markdown/android/src/main/new_arch/RNLiveMarkdownSpec.cpp โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/OnLoad.cpp โ†’ ../../react-native-live-markdown/android/src/main/new_arch/OnLoad.cpp โœ” node_modules/@expensify/react-native-live-markdown/src/web/MarkdownTextInput.css โ†’ ../../react-native-live-markdown/src/web/MarkdownTextInput.css โœ” node_modules/@expensify/react-native-live-markdown/android/build.gradle โ†’ ../../react-native-live-markdown/android/build.gradle โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownCommitHook.h โ†’ ../../react-native-live-markdown/ios/MarkdownCommitHook.h โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/MarkdownCommitHook.h โ†’ ../../react-native-live-markdown/android/src/main/new_arch/MarkdownCommitHook.h โœ” node_modules/@expensify/react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorShadowNode.h โ†’ ../../react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorShadowNode.h โœ” node_modules/@expensify/react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorState.h โ†’ ../../react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorState.h โœ” node_modules/@expensify/react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownShadowFamilyRegistry.h โ†’ ../../react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownShadowFamilyRegistry.h โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownLayoutManager.h โ†’ ../../react-native-live-markdown/ios/MarkdownLayoutManager.h โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownTextInputDecoratorView.h โ†’ ../../react-native-live-markdown/ios/MarkdownTextInputDecoratorView.h โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownTextInputDecoratorComponentView.h โ†’ ../../react-native-live-markdown/ios/MarkdownTextInputDecoratorComponentView.h โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/NativeProxy.h โ†’ ../../react-native-live-markdown/android/src/main/new_arch/NativeProxy.h โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/MarkdownUtils.h โ†’ ../../react-native-live-markdown/android/src/main/cpp/MarkdownUtils.h โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTMarkdownStyle.h โ†’ ../../react-native-live-markdown/ios/RCTMarkdownStyle.h โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTLiveMarkdownModule.h โ†’ ../../react-native-live-markdown/ios/RCTLiveMarkdownModule.h โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTMarkdownUtils.h โ†’ ../../react-native-live-markdown/ios/RCTMarkdownUtils.h โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTTextInputComponentView+Markdown.h โ†’ ../../react-native-live-markdown/ios/RCTTextInputComponentView+Markdown.h โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/CustomFabricUIManager.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/CustomFabricUIManager.java โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTUITextView+Markdown.h โ†’ ../../react-native-live-markdown/ios/RCTUITextView+Markdown.h โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/CustomMountingManager.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/CustomMountingManager.java โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTBaseTextInputView+Markdown.h โ†’ ../../react-native-live-markdown/ios/RCTBaseTextInputView+Markdown.h โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/LiveMarkdownPackage.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/LiveMarkdownPackage.java โœ” node_modules/@expensify/react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorViewComponentDescriptor.h โ†’ ../../react-native-live-markdown/cpp/react/renderer/components/RNLiveMarkdownSpec/MarkdownTextInputDecoratorViewComponentDescriptor.h โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownTextInputDecoratorViewManager.h โ†’ ../../react-native-live-markdown/ios/MarkdownTextInputDecoratorViewManager.h โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownBoldSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownBoldSpan.java โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTBackedTextFieldDelegateAdapter+Markdown.h โ†’ ../../react-native-live-markdown/ios/RCTBackedTextFieldDelegateAdapter+Markdown.h โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownEmojiSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownEmojiSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownFontFamilySpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownFontFamilySpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/LiveMarkdownModule.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/LiveMarkdownModule.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownLineHeightSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownLineHeightSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownItalicSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownItalicSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownForegroundColorSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownForegroundColorSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownBackgroundColorSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownBackgroundColorSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownStrikethroughSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownStrikethroughSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownBlockquoteSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownBlockquoteSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownFontSizeSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownFontSizeSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownTextInputDecoratorViewManager.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownTextInputDecoratorViewManager.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownTextInputDecoratorView.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownTextInputDecoratorView.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownStyle.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownStyle.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/oldarch/MarkdownTextInputDecoratorViewManagerSpec.java โ†’ ../../react-native-live-markdown/android/src/oldarch/MarkdownTextInputDecoratorViewManagerSpec.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/newarch/MarkdownTextInputDecoratorViewManagerSpec.java โ†’ ../../react-native-live-markdown/android/src/newarch/MarkdownTextInputDecoratorViewManagerSpec.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/RNLiveMarkdownSpec.h โ†’ ../../react-native-live-markdown/android/src/main/new_arch/RNLiveMarkdownSpec.h โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownTextWatcher.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownTextWatcher.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownUtils.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownUtils.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownUnderlineSpan.java โ†’ ../../react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownUnderlineSpan.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/oldarch/NativeProxy.java โ†’ ../../react-native-live-markdown/android/src/oldarch/NativeProxy.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/oldarch/NativeLiveMarkdownModuleSpec.java โ†’ ../../react-native-live-markdown/android/src/oldarch/NativeLiveMarkdownModuleSpec.java โœ” node_modules/@expensify/react-native-live-markdown/android/src/newarch/NativeProxy.java โ†’ ../../react-native-live-markdown/android/src/newarch/NativeProxy.java โœ” node_modules/@expensify/react-native-live-markdown/lib/parser/react-native-live-markdown-parser.js โ†’ ../../react-native-live-markdown/lib/parser/react-native-live-markdown-parser.js โœ” node_modules/@expensify/react-native-live-markdown/parser/react-native-live-markdown-parser.js โ†’ ../../react-native-live-markdown/parser/react-native-live-markdown-parser.js โœ” node_modules/@expensify/react-native-live-markdown/react-native.config.js โ†’ ../../react-native-live-markdown/react-native.config.js โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/browserUtils.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/web/browserUtils.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/index.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/index.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/cursorUtils.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/web/cursorUtils.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/package.json โ†’ ../../react-native-live-markdown/package.json โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/InputHistory.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/web/InputHistory.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.web.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/MarkdownTextInput.web.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInputDecoratorViewNativeComponent.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/MarkdownTextInputDecoratorViewNativeComponent.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/NativeLiveMarkdownModule.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/NativeLiveMarkdownModule.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/parserUtils.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/web/parserUtils.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/README.md โ†’ ../../react-native-live-markdown/README.md โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownTextInputDecoratorComponentView.mm โ†’ ../../react-native-live-markdown/ios/MarkdownTextInputDecoratorComponentView.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownLayoutManager.mm โ†’ ../../react-native-live-markdown/ios/MarkdownLayoutManager.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownTextInputDecoratorView.mm โ†’ ../../react-native-live-markdown/ios/MarkdownTextInputDecoratorView.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownCommitHook.mm โ†’ ../../react-native-live-markdown/ios/MarkdownCommitHook.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/MarkdownTextInputDecoratorViewManager.mm โ†’ ../../react-native-live-markdown/ios/MarkdownTextInputDecoratorViewManager.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTBackedTextFieldDelegateAdapter+Markdown.mm โ†’ ../../react-native-live-markdown/ios/RCTBackedTextFieldDelegateAdapter+Markdown.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTBaseTextInputView+Markdown.mm โ†’ ../../react-native-live-markdown/ios/RCTBaseTextInputView+Markdown.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTLiveMarkdownModule.mm โ†’ ../../react-native-live-markdown/ios/RCTLiveMarkdownModule.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTMarkdownStyle.mm โ†’ ../../react-native-live-markdown/ios/RCTMarkdownStyle.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTMarkdownUtils.mm โ†’ ../../react-native-live-markdown/ios/RCTMarkdownUtils.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTUITextView+Markdown.mm โ†’ ../../react-native-live-markdown/ios/RCTUITextView+Markdown.mm โœ” node_modules/@expensify/react-native-live-markdown/ios/RCTTextInputComponentView+Markdown.mm โ†’ ../../react-native-live-markdown/ios/RCTTextInputComponentView+Markdown.mm โœ” node_modules/@expensify/react-native-live-markdown/android/proguard-rules.pro โ†’ ../../react-native-live-markdown/android/proguard-rules.pro โœ” node_modules/@expensify/react-native-live-markdown/RNLiveMarkdown.podspec โ†’ ../../react-native-live-markdown/RNLiveMarkdown.podspec โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/cursorUtils.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/web/cursorUtils.d.ts โœ” node_modules/@expensify/react-native-live-markdown/src/web/browserUtils.ts โ†’ ../../react-native-live-markdown/src/web/browserUtils.ts โœ” node_modules/@expensify/react-native-live-markdown/android/gradle.properties โ†’ ../../react-native-live-markdown/android/gradle.properties โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/browserUtils.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/web/browserUtils.d.ts โœ” node_modules/@expensify/react-native-live-markdown/src/web/cursorUtils.ts โ†’ ../../react-native-live-markdown/src/web/cursorUtils.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/InputHistory.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/web/InputHistory.d.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.web.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/MarkdownTextInput.web.d.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInputDecoratorViewNativeComponent.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/MarkdownTextInputDecoratorViewNativeComponent.d.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/index.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/index.d.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/styleUtils.d.ts.map โ†’ ../../react-native-live-markdown/lib/typescript/src/styleUtils.d.ts.map โœ” node_modules/@expensify/react-native-live-markdown/src/web/InputHistory.ts โ†’ ../../react-native-live-markdown/src/web/InputHistory.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/NativeLiveMarkdownModule.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/NativeLiveMarkdownModule.d.ts โœ” node_modules/@expensify/react-native-live-markdown/src/NativeLiveMarkdownModule.ts โ†’ ../../react-native-live-markdown/src/NativeLiveMarkdownModule.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/styleUtils.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/styleUtils.d.ts โœ” node_modules/@expensify/react-native-live-markdown/lib/typescript/src/web/parserUtils.d.ts โ†’ ../../react-native-live-markdown/lib/typescript/src/web/parserUtils.d.ts โœ” node_modules/@expensify/react-native-live-markdown/src/web/parserUtils.ts โ†’ ../../react-native-live-markdown/src/web/parserUtils.ts โœ” node_modules/@expensify/react-native-live-markdown/src/react-native-web.d.ts โ†’ ../../react-native-live-markdown/src/react-native-web.d.ts โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/new_arch/CMakeLists.txt โ†’ ../../react-native-live-markdown/android/src/main/new_arch/CMakeLists.txt โœ” node_modules/@expensify/react-native-live-markdown/src/index.tsx โ†’ ../../react-native-live-markdown/src/index.tsx โœ” node_modules/@expensify/react-native-live-markdown/src/MarkdownTextInput.tsx โ†’ ../../react-native-live-markdown/src/MarkdownTextInput.tsx โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/CMakeLists.txt โ†’ ../../react-native-live-markdown/android/src/main/cpp/CMakeLists.txt โœ” node_modules/@expensify/react-native-live-markdown/src/MarkdownTextInput.web.tsx โ†’ ../../react-native-live-markdown/src/MarkdownTextInput.web.tsx โœ” node_modules/@expensify/react-native-live-markdown/src/styleUtils.ts โ†’ ../../react-native-live-markdown/src/styleUtils.ts โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/AndroidManifest.xml โ†’ ../../react-native-live-markdown/android/src/main/AndroidManifest.xml โœ” node_modules/@expensify/react-native-live-markdown/src/MarkdownTextInputDecoratorViewNativeComponent.ts โ†’ ../../react-native-live-markdown/src/MarkdownTextInputDecoratorViewNativeComponent.ts โœ” node_modules/@expensify/react-native-live-markdown/android/src/main/AndroidManifestNew.xml โ†’ ../../react-native-live-markdown/android/src/main/AndroidManifestNew.xml โœ– Failed to link node_modules/@expensify/react-native-live-markdown/lib/module/web/MarkdownTextInput.css โ†’ ../../react-native-live-markdown/lib/module/web/MarkdownTextInput.css ENOENT: no such file or directory, link '/Users/roryabraham/react-native-live-markdown/lib/module/web/MarkdownTextInput.css' -> '/Users/roryabraham/Expensidev/App/node_modules/@expensify/react-native-live-markdown/lib/module/web/MarkdownTextInput.css' โœ– Failed to link node_modules/@expensify/react-native-live-markdown/lib/module/web/parserUtils.js โ†’ ../../react-native-live-markdown/lib/module/web/parserUtils.js ENOENT: no such file or directory, link '/Users/roryabraham/react-native-live-markdown/lib/module/web/parserUtils.js' -> '/Users/roryabraham/Expensidev/App/node_modules/@expensify/react-native-live-markdown/lib/module/web/parserUtils.js' โœ– Failed to link node_modules/@expensify/react-native-live-markdown/lib/module/web/InputHistory.js โ†’ ../../react-native-live-markdown/lib/module/web/InputHistory.js EEXIST: file already exists, link '/Users/roryabraham/react-native-live-markdown/lib/module/web/InputHistory.js' -> '/Users/roryabraham/Expensidev/App/node_modules/@expensify/react-native-live-markdown/lib/module/web/InputHistory.js' โœ– Failed to link node_modules/@expensify/react-native-live-markdown/lib/module/web/parserUtils.js.map โ†’ ../../react-native-live-markdown/lib/module/web/parserUtils.js.map ENOENT: no such file or directory, link '/Users/roryabraham/react-native-live-markdown/lib/module/web/parserUtils.js.map' -> '/Users/roryabraham/Expensidev/App/node_modules/@expensify/react-native-live-markdown/lib/module/web/parserUtils.js.map' โœ– Failed to link node_modules/@expensify/react-native-live-markdown/lib/module/web/InputHistory.js.map โ†’ ../../react-native-live-markdown/lib/module/web/InputHistory.js.map EEXIST: file already exists, link '/Users/roryabraham/react-native-live-markdown/lib/module/web/InputHistory.js.map' -> '/Users/roryabraham/Expensidev/App/node_modules/@expensify/react-native-live-markdown/lib/module/web/InputHistory.js.map' Error: ENOENT: no such file or directory, lstat '/Users/roryabraham/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts' ```
privatenumber commented 2 months ago

Yeah looks like your first request is cached.

Are all those watches being triggered from 1 build? If so, maybe debounce is preferable than throttle.

Since you're running the code directly, are you able to trace back which lines those errors are being thrown from? Feel free to commit a try-catch if you're able to find it.

BTW you should use package.json#files or .npmignore to filter out the non JS files in @expensify/react-native-live-markdown. This will minimize the published package size and reduce the logs on your screen.

roryabraham commented 2 months ago

If so, maybe debounce is preferable than throttle

This makes sense to me - wait for the all the changes to watched files to "settle" before re-linking ๐Ÿ‘๐Ÿผ

Still, relying on that sounds like a flaky solution so I think it would be good to try to get this working with throttle first, then switch to debounce

privatenumber commented 2 months ago

You'll have to do it since I can't reproduce the errors you're getting. Feel free to push to this PR.

roryabraham commented 2 months ago

working on it

roryabraham commented 2 months ago

So while the debounce alone was enough to fix the issues in my case, I managed to fix the error without debounce by adding a simple polling mechanism to wait for source files to show up where they're expected. I set the max timeout to 15s. I also kept the debounce in place because it's more efficient and less noisy.

Maybe it would be beneficial to offer some configurations and documentation for these values. Something like this...

what do you think?

roryabraham commented 2 months ago

At this point this PR is working for my needs. thanks for the help pushing it forward @privatenumber. let me know if you have any feedback or if you think it's worth adding those additional configs I mentioned in the last comment

roryabraham commented 2 months ago

update: actually, there are more race conditions at play here. Namely, we're executing getNpmPacklist right after the debounced watcher is triggered. This will take an inventory of files by traversing the source package. But if some of those files have been deleted and not re-written yet, then we get an incomplete list. this is further challenged by the fact that we can't simply wait for the files to appear, because there may be some cases where a file in a linked package is intentionally removed by a developer.

roryabraham commented 2 months ago

ok, I've found a more robust solution. But it requires some work on the side of the linked package. The idea is that in the linked package, you can update your build process to:

  1. Delete a .build_complete file at the start of each build
  2. Write an empty .build_complete file at the end of each build
  3. That way, link can reliably wait for the .build_complete file to appear before running getNpmPacklist and re-establishing hard links
roryabraham commented 2 months ago

Updated this PR with an implementation that is hopefully both flexible and approachable. Again, I'm open to feedback. Thanks

privatenumber commented 2 months ago

Really appreciate your work on this @roryabraham, but I'm not sure if I want to add integrations to that extent. Specifically, I'd like to only support the --watch flag, and would prefer not to add things like a custom file for the build to signal to link with.

I'm curious what kind of build you're running that causes so many race conditions? How long does 1 build iteration take that the debounce fires before the build is done?

In any case, I think it's fine to just do debounce and check if the file exists right before hardlinking and ignore if it no longer exists. If the build is still running, a second debounce pass should run to fix it. Does that sound right?

To make it a little easier for the user to manually intervene on missed changes, we can also listen to the Enter key on stdin to retrigger the link.

roryabraham commented 2 months ago

Well, really there's only one race condition, it just took a while for me to understand the root cause. It exists between getNpmPacklist and the completion of the build.

I'm curious what kind of build you're running that causes so many race conditions? How long does 1 build iteration take that the debounce fires before the build is done?

I think my build typically takes 2-5 seconds, so a 500ms delay doesn't serve our use case very well. My experience with JS packages (using babel and such for minified builds) is that they rarely compile in <500ms. YMMV, as it may depend on hardware too. I'm working on an M2 MacBook Pro, so it feels unlikely that my hardware is a limiting factor.

People will have lots of different experiences with build times though, so I'm not sure debating what an "average build time" is will be productive.

If the build is still running, a second debounce pass should run to fix it. Does that sound right?

Unfortunately, I don't think this is correct. The reason is that if getNpmPacklist runs when the build is incomplete, then our watcher will stop watching files that are missing from the package manifest. So once the missing files appear, the watcher will ignore them.

This kind of cuts to a core challenge - without a specific file to use as a litmus test for a complete build, we have no way to tell the difference between files being missing and legitimately deleted.

If you're looking for a way to simplify the implementation, here's an alternate idea... we could just ignore that distinction and say that we don't support deleting files in the dependency package (i.e: delete this block). In practice, if we're linking a file that you've deleted, it won't be a problem because in order to legitimately delete a file you also need to delete code references to it.

What that means is that npx link publish --watch would support new files being added and returned by getNpmPacklist, but not deleted. That would improve things in many cases, because we could wait for all expected files to appear before re-linking. However, that still would not be immune to race conditions. For example:

  1. Developer adds a new file, A, in dependency package
  2. Build folder is cleared
  3. debounced relink occurs, but getNpmPacklist doesn't return the compiled version of the new file A' in the manifest, because it hasn't been written to the output folder yet
  4. We wait for all expected files to appear before re-creating hard links. But because A' is missing from the manifest we don't wait for it to appear or link it ๐Ÿ’ฅ

All this is to say, I really do think that relying on something like a .build_complete file to appear in the dependency package would be the most robust and reliable solution. I also tried to set up some sensible defaults such that it should work for most people without having to do that, but also included documentation for my recommended approach.

Ultimately, it's your call what you want to do with the package. Happy to discuss further, or if you're confident in what you want to do, I can update the PR accordingly.

privatenumber commented 2 months ago

People will have lots of different experiences with build times though, so I'm not sure debating what an "average build time" is will be productive.

I'm not sure where this came from but I was just curious to learn. Keep in mind that I don't experience the issue you're encountering and I haven't been able to reproduce it. That said, it's difficult for me to validate or ideate solutions without fully understanding the problem.

Would it be hard to create a test case to reproduce this race condition?

roryabraham commented 2 months ago

Yeah, absolutely I can try to work on a minimal reproduction to more clearly illustrate the problem(s) I'm describing. ๐Ÿ™‚

My sincere apologies if I sounded confrontational with that comment - that wasn't my intention at all. I merely meant to say that choosing the "appropriate debounce" will likely vary based on the situation.

privatenumber commented 2 months ago

Any progress?

No rush btw. If you're unable to find time for this, LMK and I can release a basic version of this and you can open an improvement PR at your leisure.

roryabraham commented 2 months ago

Hey, sorry I haven't come back to this. Very busy with other work right now, so it's unlikely I'll be able to get back to this in the next few weeks

privatenumber commented 2 months ago

No worries at all, I've been busy too. Thanks for letting me know!