text:
[TS Migration] Migrate 'ReportUtils.js' lib to TypeScript

Details

Fixed Issues

$ https://github.com/Expensify/App/issues/24927
Tests

[x] Verify that no errors appear in the JS console

Offline tests

QA Steps

Send Money Request
Verify that all things (like removing, editing, displaying) related to Money Request works
Create a chat with 1 user
Verify that all things related to that is working
Create chat with multiple users
Verify that all things related to that is working
Assign a task
Verify that all things related to that is working

[x] Verify that no errors appear in the JS console

PR Author Checklist

[x] I linked the correct issue in the ### Fixed Issues section above
[x] I wrote clear testing steps that cover the changes made in this PR

[x] I added steps for local testing in the Tests section
[x] I added steps for the expected offline behavior in the Offline steps section
[x] I added steps for Staging and/or Production testing in the QA steps section
[x] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[x] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

[x] Android / native
[x] Android / Chrome
[x] iOS / native
[x] iOS / Safari
[x] MacOS / Chrome / Safari
[x] MacOS / Desktop

[x] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[x] I followed proper code patterns (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method

[x] If any non-english text was added/modified, I verified the translation was requested/reviewed in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I followed the guidelines as stated in the Review Guidelines
[x] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If a new component is created I verified that:

[x] A similar component doesn't exist in the codebase
[x] All props are defined accurately and each prop has a /** comment above it */
[x] The file is named correctly
[x] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[x] The only data being stored in the state is data necessary for rendering and nothing else
[x] If we are not using the full Onyx data that we loaded, I've added the proper selector in order to ensure the component only re-renders when the data it is using changes

[x] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)

[x] All JSX used for rendering exists in the render method
[x] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG))

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
[x] I have checked off every checkbox in the PR author checklist, including those that don't apply to this PR.

Screenshots/Videos

Web
https://github.com/Expensify/App/assets/25230417/3e47f75d-8384-4ab3-ae51-29ac4514760d

Mobile Web - Chrome

Mobile Web - Safari

Desktop
https://github.com/Expensify/App/assets/25230417/120197ff-1d08-4308-8b76-c3283d7baa0e

iOS
https://github.com/Expensify/App/assets/25230417/faa39ec0-285d-4f5f-8609-c76a74885eb4

Android
https://github.com/Expensify/App/assets/25230417/07d9545a-1c1f-4c01-93d6-9c5f7a6abb35

@kubabutkiewicz Let's add some QA steps!

Commenting here for review!

@kubabutkiewicz Can you fix conflicts?

@kubabutkiewicz Can you fix typecheck?

@shubham1206agra fixed 😄

@kubabutkiewicz Can you explain every use of eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing in the code as comments? It may not be obvious to everyone

TODO: Examine ExpenseOriginalMessage type

I think Record<string, never> should be replaced to EmptyObject everywhere.

There's some issue with isEmptyObject and isEmptyObject. They are not resolving the type after using it.

@kubabutkiewicz Can you tell me where the conflict was so I can review that part again?

@kubabutkiewicz I will do another round of review tomorrow (mainly rechecking the use of ?? and function signature). I have some other task which need some priority now.

Please resolve conflicts again :)

@shubham1206agra I think I resolved all your comments and resolved conflicts, let me know if you have any more questions, thanks 😄

Can you see the typecheck fail?

@shubham1206agra fixed :)

@shubham1206agra commnents resolved 😄

Just doing the second round of review.
@kubabutkiewicz Can you retest this PR in meantime?

@shubham1206agra did few rounds of tests and looks good 👍

@shubham1206agra conflicts and comment resolved :)

Creating a test build, @shubham1206agra can you prioritize getting this one over the finish line please? Let u know if there is any way to help you! thank you!

:test_tube::test_tube: Use the links below to test this adhoc build on Android, iOS, Desktop, and Web. Happy testing! :test_tube::test_tube:

Android :robot:
iOS :apple:

https://ad-hoc-expensify-cash.s3.amazonaws.com/android/29012/index.html
https://ad-hoc-expensify-cash.s3.amazonaws.com/ios/29012/index.html

Desktop :computer:
Web :spider_web:

https://ad-hoc-expensify-cash.s3.amazonaws.com/desktop/29012/NewExpensify.dmg
https://29012.pr-testing.expensify.com

Might be unrelated to this. @kubabutkiewicz Can you check this?

https://github.com/Expensify/App/assets/58412969/e0c423c6-4120-4e51-b351-42a04b8da20e

@shubham1206agra I am not able to reproduce this error

and based on the code I think its not related to ReportUtils changes, transaction comes from Onyx.

Can you check this with safari?

@shubham1206agra Same on Safari

Which site are you accessing?
Local dev or adhoc?

Local dev

Local dev

So sorry. Looks like I got out of sync with the latest changes maybe.  https://github.com/Expensify/App/pull/29012#issuecomment-1819368466 still occurs :(

@shubham1206agra so what we are doing now , I tried to clean cache etc on my side but still I am not able to reproduce it

I will test this again later
Maybe the problem is in my account (not sure)
I will try to finish this today

The problem stems from here. Looks like receipt is getting to []

And backend is sending correct value {}

@mountiny Can you confirm this problem?

https://github.com/Expensify/App/pull/29012#issuecomment-1819368466 is repro on main, too.
So, I don't think this is a blocker now.

@mountiny Can you create another adhoc build if possible?

@mountiny done 😄

Triggered the build here https://github.com/Expensify/App/actions/runs/6958947306 @shubham1206agra lets try to prioritize the review of this one over other due to high conflict rate and this blocking lots of other changes

:test_tube::test_tube: Use the links below to test this adhoc build on Android, iOS, Desktop, and Web. Happy testing! :test_tube::test_tube:

Android :robot:
iOS :apple:

https://ad-hoc-expensify-cash.s3.amazonaws.com/android/29012/index.html
❌ FAILED ❌

The QR code can't be generated, because the iOS build failed

Desktop :computer:
Web :spider_web:

❌ FAILED ❌
https://29012.pr-testing.expensify.com

The QR code can't be generated, because the Desktop build failed

@mountiny Desktop and iOS builds failed 🤔

Seems like a fluke, running again here https://github.com/Expensify/App/actions/runs/6959778831

:test_tube::test_tube: Use the links below to test this adhoc build on Android, iOS, Desktop, and Web. Happy testing! :test_tube::test_tube:

Android :robot:
iOS :apple:

https://ad-hoc-expensify-cash.s3.amazonaws.com/android/29012/index.html
❌ FAILED ❌

The QR code can't be generated, because the iOS build failed

Desktop :computer:
Web :spider_web:

https://ad-hoc-expensify-cash.s3.amazonaws.com/desktop/29012/NewExpensify.dmg
https://29012.pr-testing.expensify.com

This is not happening on main

@kubabutkiewicz Can you check this on priority?

Videos for future
https://github.com/Expensify/App/assets/58412969/a68a828b-ac72-454e-b306-ab50e47f82ee
https://github.com/Expensify/App/assets/58412969/4a1b0f52-0be8-4f8e-9ca5-a74a08a60dd9
https://github.com/Expensify/App/assets/58412969/ce23c018-6b35-48c1-866b-0489fae06679

@shubham1206agra can you provide some steps to reproduction ?

@shubham1206agra can you provide some steps to reproduction ?

Just go to any archived room

@shubham1206agra what exactly is wrong with the archived chat?

See footer

It's both

Please correct getPolicyName implementation

@shubham1206agra Please try to err on a side of being more descriptive rather than less as it does not have to be obvious to others what you are pointing out. Thanks for testing so thoroughly this tricky PR
@kubabutkiewicz there is more conflicts now

https://github.com/Expensify/App/assets/58412969/e03ac2e6-503e-46f8-ac39-e2d1abb25e83

@shubham1206agra I resolved conflicts and issues , you can recheck

Screen.Recording.2023-11-23.at.7.15.46.PM.mov
This is happening on every refresh

This is not fixed

Are there any specific steps to reproduce? because on my side seems to be fine.
https://github.com/Expensify/App/assets/25230417/689e1249-32d8-42e4-aef2-dec130bebba9

I don't know what is happening.
They are all money requests, that I know.

Reviewer Checklist

[x] I have verified the author checklist is complete (all boxes are checked off).
[x] I verified the correct issue is linked in the ### Fixed Issues section above
[x] I verified testing steps are clear and they cover the changes made in this PR

[x] I verified the steps for local testing are in the Tests section
[x] I verified the steps for Staging and/or Production testing are in the QA steps section
[x] I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)

[x] I checked that screenshots or videos are included for tests on all platforms
[x] I included screenshots or videos for tests on all platforms
[x] I verified tests pass on all platforms & I tested again on:

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[x] MacOS: Desktop

[x] If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
[x] I verified proper code patterns were followed (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I verified that this PR follows the guidelines as stated in the Review Guidelines
[x] I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] If a new component is created I verified that:

[x] A similar component doesn't exist in the codebase
[x] All props are defined accurately and each prop has a /** comment above it */
[x] The file is named correctly
[x] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[x] The only data being stored in the state is data necessary for rendering and nothing else
[x] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[x] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[x] All JSX used for rendering exists in the render method
[x] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG)

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
[x] I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Android: Native

Android: mWeb Chrome

iOS: Native
https://github.com/Expensify/App/assets/58412969/ce23c018-6b35-48c1-866b-0489fae06679

iOS: mWeb Safari

MacOS: Chrome / Safari
https://github.com/Expensify/App/assets/58412969/a68a828b-ac72-454e-b306-ab50e47f82ee

MacOS: Desktop
https://github.com/Expensify/App/assets/58412969/4a1b0f52-0be8-4f8e-9ca5-a74a08a60dd9

@kubabutkiewicz Can you make the above change quickly?

@shubham1206agra all testing well otherwise?

@shubham1206agra all testing well otherwise?

Yes, I think so.
I have reported this https://github.com/Expensify/App/pull/29012#issuecomment-1824465846 in slack as this seems to be a deploy blocker of sorts.
But if possible, can we have QA from someone else, too (maybe Applause) before merging this PR so no regression might occur from this?

@kubabutkiewicz Can you make the above change quickly?
@shubham1206agra done

But if possible, can we have QA from someone else, too (maybe Applause) before merging this PR so no regression might occur from this?

The problem is that Applause will take couple days and in the meantime there will be bunch of deploy blockers, I think with this kind of PR we need to bite the bullet and get it merged and fix on main/ staging as people notice some issues.

Ok then :shipit: then

@nkuoch all yours 🙏

The problem is that Applause will take couple days and in the meantime there will be bunch of deploy blockers, I think with this kind of PR we need to bite the bullet and get it merged and fix on main/ staging as people notice some issues.

I think in this case it's better to have an ad hoc build tested for this and handle conflicts as they come. If we merge this PR and there are blockers, it's likely that a revert won't be easy because of conflicts and then we'd be blocking the deploy until we fix all issues.

@nkuoch done, could you recheck? 🙏

@nkuoch conflicts resolved 🙏

:hand: This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

🚀 Deployed to staging by https://github.com/nkuoch in version: 1.4.4-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

Hi @kubabutkiewicz , this migration generated this issue: https://github.com/Expensify/App/issues/32111

authors: OSBotify blazejkustra danieldoglas kubabutkiewicz luacmartins mountiny shubham1206agra


text:
Fix formatting on image in help article

Details

Fixed Issues

$
PROPOSAL:
Tests

[x] Verify that no errors appear in the JS console

Offline tests

QA Steps

[x] Verify that no errors appear in the JS console

PR Author Checklist

[x] I linked the correct issue in the ### Fixed Issues section above
[x] I wrote clear testing steps that cover the changes made in this PR

[x] I added steps for local testing in the Tests section
[x] I added steps for the expected offline behavior in the Offline steps section
[x] I added steps for Staging and/or Production testing in the QA steps section
[x] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[x] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

[x] Android / native
[x] Android / Chrome
[x] iOS / native
[x] iOS / Safari
[x] MacOS / Chrome / Safari
[x] MacOS / Desktop

[x] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[x] I followed proper code patterns (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method

[x] If any non-english text was added/modified, I verified the translation was requested/reviewed in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I followed the guidelines as stated in the Review Guidelines
[x] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If a new component is created I verified that:

[x] A similar component doesn't exist in the codebase
[x] All props are defined accurately and each prop has a /** comment above it */
[x] The file is named correctly
[x] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[x] The only data being stored in the state is data necessary for rendering and nothing else
[x] If we are not using the full Onyx data that we loaded, I've added the proper selector in order to ensure the component only re-renders when the data it is using changes

[x] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)

[x] All JSX used for rendering exists in the render method
[x] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG))

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
[x] I have checked off every checkbox in the PR author checklist, including those that don't apply to this PR.

Screenshots/Videos

Android: Native

Android: mWeb Chrome

iOS: Native

iOS: mWeb Safari

MacOS: Chrome / Safari

MacOS: Desktop

Will review the build once it's done building.

A preview of your ExpensifyHelp changes have been deployed to https://cf2e3729.helpdot.pages.dev ⚡

Hmmm, still not working and I'm not sure why.

Made a small change to the capitalization, seeing if that was it.

Okay @arosiclair this is looking good now and like it's supposed to, all yours. Thank you 🙌

Reviewer Checklist

[ ] I have verified the author checklist is complete (all boxes are checked off).
[ ] I verified the correct issue is linked in the ### Fixed Issues section above
[ ] I verified testing steps are clear and they cover the changes made in this PR

[ ] I verified the steps for local testing are in the Tests section
[ ] I verified the steps for Staging and/or Production testing are in the QA steps section
[ ] I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[ ] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)

[ ] I checked that screenshots or videos are included for tests on all platforms
[ ] I included screenshots or videos for tests on all platforms
[ ] I verified tests pass on all platforms & I tested again on:

[ ] Android: Native
[ ] Android: mWeb Chrome
[ ] iOS: Native
[ ] iOS: mWeb Safari
[ ] MacOS: Chrome / Safari
[ ] MacOS: Desktop

[ ] If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
[ ] I verified proper code patterns were followed (see Reviewing the code)

[ ] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
[ ] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[ ] I verified that comments were added to code that is not self explanatory
[ ] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[ ] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
[ ] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[ ] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
[ ] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[ ] I verified the JSDocs style guidelines (in STYLE.md) were followed

[ ] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[ ] I verified that this PR follows the guidelines as stated in the Review Guidelines
[ ] I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
[ ] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[ ] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[ ] If a new component is created I verified that:

[ ] A similar component doesn't exist in the codebase
[ ] All props are defined accurately and each prop has a /** comment above it */
[ ] The file is named correctly
[ ] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[ ] The only data being stored in the state is data necessary for rendering and nothing else
[ ] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[ ] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[ ] All JSX used for rendering exists in the render method
[ ] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[ ] If any new file was added I verified that:

[ ] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[ ] If a new CSS style is added I verified that:

[ ] A similar style doesn't already exist
[ ] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG)

[ ] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[ ] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[ ] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[ ] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[ ] If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:

[ ] I verified that all the inputs inside a form are aligned with each other.
[ ] I added Design label and/or tagged @Expensify/design so the design team can review the changes.

[ ] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[ ] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
[ ] I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Android: Native

Android: mWeb Chrome

iOS: Native

iOS: mWeb Safari

MacOS: Chrome / Safari

MacOS: Desktop

source: gharchive/pull-request

authors: OSBotify arosiclair strepanier03

repo: Expensify/App

license: MIT

license_type: permissive

license_source: github-api


text:
Another dummy PR for testing

InternalQA for https://github.com/Expensify/Web-Expensify/pull/31928
Details

Fixed Issues

$ fixes https://github.com/Expensify/App/issues/5113
Tests

QA Steps

Tested On

[ ] Web
[ ] Mobile Web
[ ] Desktop
[ ] iOS
[ ] Android

Screenshots

Web

Mobile Web

Desktop

iOS

Android

:exclamation: Please, do not use Github auto-linking keywords such as these: close, closes, closed, fix, fixes, fixed, resolve, resolves or resolved.
For more details, see the Contributing Guidelines, specifically Submit your pull request for a final review :book:.

authors: MariaHyacinth botify


text:
fixed text-wrapping with Markup

Please review @roryabraham
Details

Fixed Issues

Fixes #2790
Tests / QA Steps

Open staging.expensify.cash
Sign in if not already
Enter a chat with anybody
Send the message:

*Lorem ipsum dolor sit amet*, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum

5 This should wrap the text perfectly.
6. Send the message:
www.expensify.com Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum

7. This should wrap in the next lines.

Tested On

[x] Web
[x] Mobile Web
[x] Desktop
[x] iOS
[x] Android

Screenshots

Web

Mobile Web

Desktop

iOS

Android

🚀 Deployed to staging in version: 1.0.42-4🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

🚀 Deployed to production in version: 1.0.44-0🚀

platform
result

🤖 android 🤖
failure ❌

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

authors: OSBotify parasharrajat


text:
Fix double backticks

This PR fixes the issue that the inline code block regex doesn't match two backticks with no content between them.
For example, in
 `hello` `` hi`

the two backticks in the middle are not regarded as a pair, which causes the word hi after them to be part of the code block. However, the user expects the word hi not to be part of the code block.
Fixed Issues
$ https://github.com/Expensify/App/issues/53573
A similar issue is also mentioned in this comment.
Tests

What unit/integration tests cover your change? What autoQA tests cover your change?

New test case added
Test string: "`hello` `` hi`"
Expected result: "hello `` hi`"

Existing test cases updated
Test inline code blocks with double backticks
Expected result before: "My favorite language is `JavaScript`. How about you?"
Expected result after: "My favorite language is ``JavaScript``. How about you?"

Test inline code blocks with triple backticks
Expected result before: "My favorite language is ``JavaScript``. How about you?"
Expected result after: "My favorite language is ``JavaScript``. How about you?"

Test inline code blocks with two backticks
Expected result before: "`JavaScript`"
Expected result after: "``JavaScript``"

Test for backticks only tab characters inside it
Expected result before: "`	`"
Expected result after: "	"

Test for inline code block with triple backtick with spaces as content
Expected result before: "``   ``"
Expected result after: "``   ``"

What tests did you perform that validates your changed worked?

Send the below message in Expensify.
hello `` hi`

Verify that the word hi is not rendered as part of a code block.

QA

What does QA need to do to validate your changes?
What areas to they need to test for regressions?

I have read the CLA Document and I hereby sign the CLA

Reviewer Checklist

[ ] I have verified the author checklist is complete (all boxes are checked off).
[ ] I verified the correct issue is linked in the ### Fixed Issues section above
[ ] I verified testing steps are clear and they cover the changes made in this PR

[ ] I verified the steps for local testing are in the Tests section
[ ] I verified the steps for Staging and/or Production testing are in the QA steps section
[ ] I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[ ] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)

[ ] I checked that screenshots or videos are included for tests on all platforms
[ ] I included screenshots or videos for tests on all platforms
[ ] I verified tests pass on all platforms & I tested again on:

[ ] Android: Native
[ ] Android: mWeb Chrome
[ ] iOS: Native
[ ] iOS: mWeb Safari
[ ] MacOS: Chrome / Safari
[ ] MacOS: Desktop

[ ] If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
[ ] I verified proper code patterns were followed (see Reviewing the code)

[ ] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
[ ] I verified that comments were added to code that is not self explanatory
[ ] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[ ] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
[ ] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[ ] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
[ ] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[ ] I verified the JSDocs style guidelines (in STYLE.md) were followed

[ ] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[ ] I verified that this PR follows the guidelines as stated in the Review Guidelines
[ ] I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
[ ] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[ ] I verified any variables that can be defined as constants (ie. in CONST.ts or at the top of the file that uses the constant) are defined as such
[ ] If a new component is created I verified that:

[ ] A similar component doesn't exist in the codebase
[ ] All props are defined accurately and each prop has a /** comment above it */
[ ] The file is named correctly
[ ] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[ ] The only data being stored in the state is data necessary for rendering and nothing else
[ ] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[ ] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[ ] All JSX used for rendering exists in the render method
[ ] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[ ] If any new file was added I verified that:

[ ] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[ ] If a new CSS style is added I verified that:

[ ] A similar style doesn't already exist
[ ] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG)

[ ] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[ ] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[ ] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[ ] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[ ] If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:

[ ] I verified that all the inputs inside a form are aligned with each other.
[ ] I added Design label and/or tagged @Expensify/design so the design team can review the changes.

[ ] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[ ] For any bug fix or new feature in this PR, I verified that sufficient unit tests are included to prevent regressions in this flow.
[ ] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
[ ] I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Android: Native

Android: mWeb Chrome

iOS: Native

iOS: mWeb Safari

MacOS: Chrome / Safari

MacOS: Desktop

@QichenZhu can you update the QA section?

authors: QichenZhu allroundexperts madmax330

repo: Expensify/expensify-common


text:
Implement JSON_PATCH() in Onyx.merge() in react-native-onyx(native)

Details

JSON_PATCH is an algorithm in SQLite we can use on iOS and Android to merge delta changes natively (in the storage provider) instead of manually "pre-merging" in the "Onyx layer .
The original goal of this PR was to utilise JSON_PATCH on native platforms, whilst still retaining the current merge logic on web.

(By "pre-merging" i mean using the current implementation of applyMerge which uses a mergeQueue to batch and merge delta changes, after which data will be written to storage with Storage.setItem instead of Storage.mergeItem)

Related Issues

https://github.com/Expensify/App/issues/13972
Automated Tests

Linked PRs

I think maybe this one is on hold pending the AsyncStorage removal?

Still holding

Should be ready for review!

@kidroca @marcaaron All done and ready for review!

@kidroca Onyx.clear now also waits for prior promises to resolve. Aborting current merge/set would have been to complex

Some more insights on the storage operation queues
In one of the previous iterations we discovered that the old mergeQueue[key] wasn't more performant than simply queueing the merges based on promises, which would make it possible to handle concurrency with other overlapping operations
Queueing merges also helps with keeping a simple JSON_PATCH logic, where we try to merge the delta ASAP
(Yes we still wait for get, but most if not always it comes from cache right away)
(Also the old logic did the same - wait for get and then notify subscribers)

On all of these latest questions, should we invite some more devs to clarify which approach were gonna go for?
After that i can finish up the PR and get this done! 🚀
cc @kidroca @neil-marcellini @marcaaron (i know you're OOO so don't mind this ping)

It would make me feel better if we also tested some flows in App with these changes, such as transitioning from OldDot as a different user (tests calls to merge and clear), and also maybe a flow that does a lot of calls to merge, like creating a policy, changing the name, inviting two members and deleting one.

I agree. I think we need some manual tests here. These changes look OK to me in the abstract (maybe still a bit hard to fully grasp for the uninitiated). But my main concern (and why I have been procrastinating on the review here) is that I'm not entirely confident we aren't missing things and would feel better if we tested some flows. Sign in/out also comes to mind as an important flow to test for regressions.

🧵 Trying to sum up the above discussion about all of the various topics in this PR. 🧵
JSON_PATCH is an algorithm in SQLite we can use on iOS and Android to merge delta changes natively (in the storage provider) instead of manually "pre-merging" in the "Onyx layer .
The original goal of this PR was to utilise JSON_PATCH on native platforms, whilst still retaining the current merge logic on web.

(By "pre-merging" i mean using the current implementation of applyMerge which uses a mergeQueue to batch and merge delta changes, after which data will be written to storage with Storage.setItem instead of Storage.mergeItem)

Due to the way we have to send delta data to the native storage provider for JSON_PATCH to merge we cannot keep the queuing mechanism we had before. (sending only the delta instead the whole pre-merged object)
Why? Because with JSON_PATCH we want to send (new) deltas to the storage provider immediately, without waiting for other Onyx.merge calls to be batched together and pre-merged. The "old" merging logic would initially trigger the logic in Onyx.merge once (on the first call) and then add new deltas to a mergeQueue without actually starting any storage operations. The additional values from mergeQueue would then be batched together and merged in applyMerge.
This approach isn't compatible with the way we want to use JSON_PATCH, because we want to prevent delta data from being combined before actually sending it to the storage provider, so that JSON_PATCH can take over merging.
Why do we need to apply the merge before writing to storage? Mostly because we don't use JSON_PATCH on web and we also have to set the cache, which is custom-built and therefore needs the fully merged data too.
So, what can we do?
The first thing that came to mind is to wait for prior write operations to complete, before starting new write operations (set, merge, remove, clear). The downside of that, is that this slows down operations and disables batching of Onyx methods.
We still want to be able batch Onyx.merge calls for the user though, so that the user doesn't encounter multiple unnecessary re-renders in the app.
How can we keep the "old" merging mechanism, while still utilising JSON_PATCH directly?
Another possibility is to move notifying (updating the subscriber) until after the write operations. We could then check, if there was another Onyx.merge call in the meantime, and if so, start another write operation. After all write operations are completed, we batch all the changes and update the subscriber.
We could still update the cache before writing to storage, by applying the same delta merging for the cache, by calling applyMerge with only the delta changes and updating the cache more often. The user would still only be notified once after all Onyx.merge operations
Initially explained some of these thoughts here and here...
What do you guys think? Does the last approach seem logical?
cc @kidroca @marcaaron @neil-marcellini

Because with JSON_PATCH we want to send (new) deltas to the storage provider immediately, without waiting for other Onyx.merge calls to be batched together and pre-merged.

Can you expand on why we want to do this immediately?

This approach isn't compatible with the way we want to use JSON_PATCH, because we want to prevent delta data from being combined before actually sending it to the storage provider, so that JSON_PATCH can take over merging.

I think same question here. Why do we want it to work this way and prevent the data from getting combined? JSON_PATCH can still merge the combined delta. We just need to pass the delta of the result of the existing merge queue.

@marcaaron @neil-marcellini
The root cause of our issue apply the JSON PATCH originates from the merge code in this section:
https://github.com/Expensify/react-native-onyx/blob/5a97bf5282e614b9e9357fb8d620815f0399cef5/lib/Onyx.js#L997-L1003
Our goal was to:

✅ Extract the Storage.merge method, native would use JSON PATCH, while web would use the old logic.
⚠ Substitute the set call with Storage.merge.

A complication arose with the applyMerge function as it combined the batched deltas (incremental changes) with the current storage value. As a result, modifiedData ends up as the fully merged result. Therefore, calling Storage.merge(key, modifiedData) is practically the same as calling Storage.set.
Implementing a promise-based queue seemed to be a balanced solution that could work across all platforms, though at the expense of Onyx.merge potentially triggering more notifications for subscribers. Initially, we intended to establish this queue only for Onyx.merge. However, since the old merge logic is tightly linked with Onyx.set, and both can alter the current value, it seemed best to queue all modification operations (anything other than get). This strategy ensures that a modification like merge that needs to get the latest value will wait for anything that is currently modifying the key.

To address the original issue, a potentially simpler solution could be introducing a mergeBatchedDeltas(key) function. This function would streamline some of the logic from applyMerge. Consequently, we could call Storage.merge with key, delta (the merged delta), and mergedData. In this setup, the native Storage.merge would only use the merged delta, while the web would continue to utilize the mergedData.
const deltaChanges = mergeBatchedChanges(key);
const modifiedData = applyMerge(deltaChanges, currentValue);

delete mergeQueue[key];

return Storage.merge(key, deltaChanges, modifiedData);

@chrispader is this ready for review yet?

Sorry for the delay! @marcaaron
Just read the proposal by @kidroca which seems like the optimal solution for now. Gonna start implementing this mergeBatchedChanges logic now 👍

Cool! Marking as a draft for now.

Updated the logic with a slightly adapted version of @kidroca's approach.
No promises anymore and we only utilise the applyMerge function for both batched changes as well as merging the value for web and notifying, as applyMerge and mergeBatchedChanges would have done almost the same thing.
Feel free to review and give feedback, but i'm optimistic that this is the final solution! 🥳
cc @kidroca @marcaaron @neil-marcellini

@chrispader can you resolve outdated threads as they only gets in the way of new reviews - I'm not able to resolve them myself. The old threads around merge and applyMerge are examples of noise for the latest review

@chrispader can you resolve outdated threads as they only gets in the way of new reviews - I'm not able to resolve them myself. The old threads around merge and applyMerge are examples of noise for the latest review

done 👍

@kidroca everything resolved 👍

@marcaaron @kidroca change requests resolved 👍

Can we fix the lint errors?

Can we fix the lint errors?

Done, though i'm not sure if this eslint rule should trigger here. Basically it gave errors because the withOnyx HOC calls in the tests don't have propTypes, although the component that it wraps has those defined...

Basically it gave errors because the withOnyx HOC calls in the tests don't have propTypes, although the component that it wraps has those defined...

I think it's ok to disable it in this case.

Basically it gave errors because the withOnyx HOC calls in the tests don't have propTypes, although the component that it wraps has those defined...

I think it's ok to disable it in this case.

already done 👍

@marcaaron just updated the diff and replied to your questions :)

@chrispader Let's raise a PR in App to bump the version of Onyx there and do any final testing? Thanks so much for your patience and continued effort on this one. And thank you @kidroca for the additional thoughts and review 🙇

Some issues that arose from this PR are fixed in this PR

authors: chrispader kidroca marcaaron neil-marcellini

repo: Expensify/react-native-onyx


text:
On iOS App is not show up in the share list

Hi,
my app does not appear in the share list when I try to share a website content / url from browser with my App. Android is working fine.
Last week it worked also for iOS but then I required to upgrade to Xcode 13.2.1 and iOS 15.2. Since then it is no longer working. I followed the instructions for the setup several times and I'm in the meantime pretty sure that I did the setup correctly like described in: https://github.com/meedan/react-native-share-menu/blob/master/IOS_INSTRUCTIONS.md
It's not working on a simulator with iOS 15.2 and also not on my iphone 8 which I use as test device which have iOS 14.5.1.
Does someone has an idea?
Thanks a lot in advance!

After setup everything one more time, it worked. Cannot reproduce this issue anymore.

Other here

Is there any update on this? I've been trying to fix this issue for a long time now with no results. Even completing the whole process of installation from the beginning. I also can't find any alternative to this library.

Is there any update on this? I've been trying to fix this issue for a long time now with no results. Even completing the whole process of installation from the beginning. I also can't find any alternative to this library.

I haven't been able to find any alternative either and this library doesn't seem to be maintained anymore 😞

@shaynethiessen I gave up and made a release to Test Flight (Apple's app testing environment) and the option to share appeared again! I still can't see it when running either debug or release versions directly from xCode but at least it works in "production". I'll come back to you when I do a release to the App Store to see if it stays that way (hopefully).
All the development has to be done from an Android environment, unfortunately. I was lucky to already have it working before the xCode or iOS version that broke it and I had everything set up.

@AlejoBidari Thanks for the information. I appreciate it.

I can confirm that the app appears in the share list when released to the App Store. 🚀
If someone finds how to make it work from xCode for development please let me know, I will very much appreciate it 🙏

source: gharchive/issue

authors: AlejoBidari ramirobg94 shaynethiessen viktorRot

repo: Expensify/react-native-share-menu


text:
spelling mistake

Overview
Replace this paragraph with a description of your changes and reasoning. Provide links to external references/discussions if appropriate.

Resolves #NN.
Nature of This Change

[ ] 🐛 Fixes a bug
[ ] 🚀 Implements a new feature
[ ] 🛁 Rewrites existing documentation
[ ] 💅 Fixes coding style
[ ] 🔥 Removes unused files / code

Related Application Change

Application Pull Request: https://github.com/ExpressionEngine/ExpressionEngine/pulls/NNN

duplicate. commits were already made directly into 6.dev


text:
RQL has no method to check for existence of keys

What do you want to achieve?
It would be handy in the RQL if there was a way to check for the existence (and lack thereof) of an object key.
For example, given the following data structure
{
  key1: true,
  key2: 'string',
}

It would be handy to have something like this to check for a given key in the model:
has(key1)

As for the inverse, it could be passed a second parameter
has(key3, false)

or a negative has
nhas(key3)

I personally prefer the first option but thought I'd give the other just in case.

Thanks for the info. This looks like it satisfies our use case.

repo: ExtraHorizon/javascript-sdk


text:
能给一个A标签事件处理的例子吗？

另外小问题，A标签被转成view后，全部换行了，这个有什么好的办法让其不换行吗，谢谢～

a 标签应该不会换行啊，贴一部分你的富文本我试下，事件处理监听 navigate 事件就好

 爱康科技（002610）   这是富文本

emm代码能发文本最好就不要发图片

不会换行的啊

你是不是没有引入样式文件

厄。。是没有引入样式，现在好了。
监听 navigate 事件，是监听子组件的事件吗？

<wxParse :content="article" @navigate="navHandler" />

methods: {
  navHandler (url) {
    console.log(url)
  }
}

非常感谢～

authors: F-loat SevenChen

repo: F-loat/mpvue-wxParse


text:
Populate Acrarium To skip Admin Creation

Hi, Wondering if there is a way we can populate the Administrator creation. We are trying to find a way to do this in Terraform.

Can you prepopulate the database with a user? The screen is only shown if there is no admin user.


text:
Add asm signature systems endpoint

as above

this will be added as a separate PR as it slipped through the cracks when i was coding rest of the signature cases. Should be done by Friday this week

license_source: bigquery


text:
can not declare when existing configuration contains route domain decorations

If I want to overwrite an existing configuration with a valid declaration and the existing configuration has route domains and route domain decorated L3 objects, a 500 error is returned as the existing configuration is schema checked as if DO was responsible for the existing configuration. That might not be the case.
{"code":500,"status":"ERROR","message":"invalid config - rolled back","errors":["not a valid IPv4 address: 172.15.1.1%4091"],"declaration":{"async":true,"schemaVersion":"1.0.0","Common":{"hostname":"test14.sample.openstack.f5se.com","configsync":{"configsyncIp":"1.1.1.110","class":"ConfigSync"},"route_192_168_1_102_32":{"gw":"1.1.1.88","mtu":0,"class":"Route","network":"192.168.1.102/32"},"net_tape1439549_8c":{"interfaces":[{"tagged":false,"name":"1.1"}],"tag":4093,"class":"VLAN","mtu":1450},"selfip_tap1754743e_15":{"vlan":"net_tap1754743e_15","trafficGroup":"traffic-group-local-only","class":"SelfIp","allowService":"all","address":"172.15.1.103/24"},"selfip_tape1439549_8c":{"vlan":"net_tape1439549_8c","trafficGroup":"traffic-group-local-only","class":"SelfIp","allowService":"all","address":"1.1.1.110/24"},"dnsServers":{"nameServers":["8.8.8.8"],"search":["sample.openstack.f5se.com"],"class":"DNS"},"ntpServers":{"timezone":"UTC","class":"NTP","servers":["0.pool.ntp.org","1.pool.ntp.org"]},"selfip_tapf911cf4f_a8":{"vlan":"net_tapf911cf4f_a8","trafficGroup":"traffic-group-local-only","class":"SelfIp","allowService":"all","address":"172.14.1.109/24"},"route_192_168_233_0_24":{"gw":"1.1.1.102","mtu":0,"class":"Route","network":"192.168.233.0/24"},"net_tap1754743e_15":{"interfaces":[{"tagged":false,"name":"1.3"}],"tag":4091,"class":"VLAN","mtu":1500},"route_192_168_231_0_28":{"gw":"1.1.1.105","mtu":0,"class":"Route","network":"192.168.231.0/28"},"route_0_0_0_0_0_0_0_0":{"gw":"172.16.1.1","mtu":0,"class":"Route","network":"default"},"net_tapc5f0fbd1_fd":{"interfaces":[{"tagged":false,"name":"1.4"}],"tag":4090,"class":"VLAN","mtu":1500},"selfip_tapc5f0fbd1_fd":{"vlan":"net_tapc5f0fbd1_fd","trafficGroup":"traffic-group-local-only","class":"SelfIp","allowService":"all","address":"172.16.1.104/24"},"class":"Tenant","net_tapf911cf4f_a8":{"interfaces":[{"tagged":false,"name":"1.2"}],"tag":4092,"class":"VLAN","mtu":1500}},"class":"Device","label":"generated from OpenStack metadata"}}

AT-114 for internal tracking

It looks like this was resolved in the 1.6.0 release.

authors: dstokesf5 focrensh jgruber


text:
Bugsplatt.dll  access denied

Bugsplatt.dll Error avoiding or better error message

@micheljung once said when I suggested to not copy bugsplatt.dll on every game launch but only if it was not copied yet. I do know suggest to still copy them every time but still launch game and proceed if we are unable to copy those files. Because tons of users need to restart the game every like 3rd time they play because of the game not closing correctly (including me) .

How about we find out why the came doesn't close properly (doesn't it, really? But why can we start it "again" then, when only a single instance is allowed?). Or rather; why the file is locked.
Then we fix that properly rather than displaying some long message the user doesn't really know what to do about it.

We can not do much about it if you dont want to dig into assembly code

The game's process does not terminate but sets its self to halt in some way which makes it a zombie  process. We could probably kill it as it is our child or reverse engeneer, but this needs hours and hours of work (probably) and probably in the end we will not be able to do anything against it... The py client had some similar implementation of what I implemented but silently. Now that ppl are switching to java client. That is one of the most annoying thing that can happen to you as a user... The game does not launch to some bugsplatt.dll that you never heard of before and you need to restart. As a user I would say java-client is a piece of shit i need to restart my computer every 3rd game(if i even get to the idea and not just deinstall because the client does not work). So this message is a huge huge huge improvement. I do admit that there is further space/potential for improvement and I would really like you  or anybody else to suggest and implement further improvements(like for example killing the child(if that is that easy idk or debug the cause of all this) but for the time being users and tec support needs to be helped and that is a huge improvement for them, no matter if there would possibly be a even better solution. But till this better solution is found we need to go in the right direction and not have the user restart the computer...

repo: FAForever/downlords-faf-client


text:
Add "Previous" and "Next" buttons in CONTRIBUTING docs

Test lang sir. First pull request resolves #6 .

Merge into staging

authors: ibleedfilm jcsgithub

repo: FCCManila/blog

license: mit


text:
How to use this package to add audio to a video. Like merging a background audio in a video? How can i do this in nodejs.

How to use this package to add audio to a video. Like merging a background audio in a video? How can i do this in nodejs.

@DreamOfIce Can you please help?

Please refer to the document of ffmpeg: https://ffmpeg.org/ffmpeg.html

@DreamOfIce
Reel3.mp4 is a video and wolf-howl-6310.mp3 is the audio that i want to merge. What i tried?
import { readFile, writeFile } from "fs/promises";
import { FFmpeg } from "@ffmpeg.wasm/main";
import path from "path";

const currentDirectory = process.cwd();

const inputFilePath = path.join(currentDirectory, "Reel3.mp4");
const outputFilePath = path.join(currentDirectory, "Reel3.mp4");

const ffmpeg = await FFmpeg.create({ core: "@ffmpeg.wasm/core-mt" });

try {
  await ffmpeg.fs.writeFile("Reel3", await readFile(inputFilePath));
  await ffmpeg.run("-i", "wolf-howl-6310", "wolf-howl-6310.mp3");
  await writeFile(outputFilePath, ffmpeg.fs.readFile("Reel3.mp4"));
  console.log("Conversion successful!");
} catch (error) {
  console.error("Error:", error);
} finally {
  process.exit(0);
}

@DreamOfIce Can you please give me an example to make things work🙏 Error [RuntimeError]: memory access out of bounds.

@DreamOfIce using Node v20, Using macOS M2 , I'm trying to add audio to a video but when I try to do that its gives me that error the video is an mp4 file named Reel3.mp4 and the audio is an mp3 file named wolf-howl-6310.mp3 both the files are there in the root directory of my project.

Maybe you could upload the full log and your files for testing.
If they are secret, please try other files and upload them if problem still exists.

Full log is here
node:internal/event_target:1054
  process.nextTick(() => { throw err; });
                           ^
Error [RuntimeError]: memory access out of bounds
    at wasm://wasm/062891ca:wasm-function[147]:0x13f8a
    at wasm://wasm/062891ca:wasm-function[2213]:0x231e3d
    at wasm://wasm/062891ca:wasm-function[1334]:0x13bcdf
    at wasm://wasm/062891ca:wasm-function[424]:0x3627c
    at wasm://wasm/062891ca:wasm-function[1431]:0x14c3cc
    at wasm://wasm/062891ca:wasm-function[13157]:0xdf3543
    at wasm://wasm/062891ca:wasm-function[6565]:0x80264c
    at wasm://wasm/062891ca:wasm-function[4265]:0x499b46
    at wasm://wasm/062891ca:wasm-function[13065]:0xdeb3a5
    at wasm://wasm/062891ca:wasm-function[13077]:0xdeb7cc

Node.js v20.4.0

Please try upgrading to v20.5.0+, there are known issues with the wasm runtime on macOS in older versions.

same error again

node:internal/event_target:1054
  process.nextTick(() => { throw err; });
                           ^
Error [RuntimeError]: memory access out of bounds
    at wasm://wasm/062891ca:wasm-function[147]:0x13f8a
    at wasm://wasm/062891ca:wasm-function[2213]:0x231e3d
    at wasm://wasm/062891ca:wasm-function[1334]:0x13bcdf
    at wasm://wasm/062891ca:wasm-function[424]:0x3627c
    at wasm://wasm/062891ca:wasm-function[1431]:0x14c3cc
    at wasm://wasm/062891ca:wasm-function[13157]:0xdf3543
    at wasm://wasm/062891ca:wasm-function[6565]:0x80264c
    at wasm://wasm/062891ca:wasm-function[4265]:0x499b46
    at wasm://wasm/062891ca:wasm-function[13065]:0xdeb3a5
    at wasm://wasm/062891ca:wasm-function[13077]:0xdeb7cc

Node.js v20.5.1

Logs test passed

 ↓ tests/browser.test.ts (0) [skipped]
 ✓ tests/ffmpeg.test.ts (10) 449ms
 ✓ tests/convert.test.ts (40) 7507ms

 Test Files  2 passed | 1 skipped (3)
      Tests  50 passed (50)
   Start at  21:42:51
   Duration  7.91s (transform 89ms, setup 0ms, collect 311ms, tests 7.96s, environment 0ms, prepare 197ms)

await ffmpeg.fs.writeFile("Reel3", await readFile(inputFilePath));

Have you written wolf-howl-6310.mp3 to the memory fs like this?

await ffmpeg.run("-i", "wolf-howl-6310", "wolf-howl-6310.mp3");

Are you sure these parameters are really correct?

I'm sorry but I don't get you. I have wolf-howl-6310.mp3 file in my project like myProject -> wolf-howl-6310.mp3

@DreamOfIce Can you give me a example that work for you?

@DreamOfIce Can you give me a example that work for you?

https://github.com/FFmpeg-wasm/FFmpeg.wasm/blob/next/README.md#usage

@stydxm Okay, so this example is to add audio to a video in nodejs right?

That's merging two videos. But it should also works if you replace one video with your audio.

@stydxm Unfortunately it gives to same error of Error [RuntimeError]: memory access out of bounds Any fix for this?  or any other library that i can use that will do the job?

This maybe another MacOS-only issue. It works on my Windows computer with Node.js v20.5.1.
The origin project can do the job with browsers but not node.

@stydxm Can you please give me an example here? for browser?

Read its document, please!!!

@stydxm  I tried this can you please check whats wrong using react + vite
import { useState, useRef } from "react";
import { FFmpeg } from "@ffmpeg/ffmpeg";
import { toBlobURL, fetchFile } from "@ffmpeg/util";

function App() {
  const [loaded, setLoaded] = useState(false);
  const ffmpegRef = useRef(new FFmpeg());
  const videoRef = useRef<HTMLVideoElement | null>(null);
  const messageRef = useRef<HTMLParagraphElement | null>(null);

  const load = async () => {
    const baseURL = "https://unpkg.com/@ffmpeg/core-mt@0.12.2/dist/esm";
    const ffmpeg = ffmpegRef.current;
    ffmpeg.on("log", ({ message }) => {
      if (messageRef.current) messageRef.current.innerHTML = message;
    });
    // Load FFmpeg
    await ffmpeg.load({
      coreURL: await toBlobURL(`${baseURL}/ffmpeg-core.js`, "text/javascript"),
      wasmURL: await toBlobURL(
        `${baseURL}/ffmpeg-core.wasm`,
        "application/wasm"
      ),
      workerURL: await toBlobURL(
        `${baseURL}/ffmpeg-core.worker.js`,
        "text/javascript"
      ),
    });
    setLoaded(true);
  };

  const transcode = async () => {
    const videoURL1 = "https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"; // Replace with your video URLs
    const videoURL2 = "https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"; // Replace with your video URLs
    const ffmpeg = ffmpegRef.current;

    // Write the input videos to temporary files
    await ffmpeg.writeFile("input1.webm", await fetchFile(videoURL1));
    await ffmpeg.writeFile("input2.webm", await fetchFile(videoURL2));

    // Interlace (blend) the two videos using the filter_complex option
    await ffmpeg.exec([
      "-i", "input1.webm",
      "-i", "input2.webm",
      "-filter_complex",
      "[0:v][1:v]blend=all_expr='A*(if(eq(0,N/2),1,T))+B*(if(eq(0,N/2),T,1))'",
      "output.mp4",
    ]);

    // Read the resulting MP4 file and display it
    const fileData = await ffmpeg.readFile('output.mp4');
    const data = new Uint8Array(fileData as ArrayBuffer);
    if (videoRef.current) {
      videoRef.current.src = URL.createObjectURL(
        new Blob([data.buffer], { type: 'video/mp4' })
      )
    }
  };

  return loaded ? (
    <>
      <video ref={videoRef} controls></video>

      <button onClick={transcode}>Interlace and Save as MP4</button>

    </>
  ) : (
    <button onClick={load}>Load ffmpeg-core</button>
  );
}

export default App;

It's not the deal of this project. Report it to the original project. Thank you for your cooperation!!!

@stydxm Unfortunately it gives to same error of Error [RuntimeError]: memory access out of bounds Any fix for this? or any other library that i can use that will do the job?

Please provide a minimum reproduction
You can use online tools IDE as stackblitz

@DreamOfIce  You can check this
reproduction.zip

@DreamOfIce Any updates about this issue?

I've been a busy lately, so I haven't had time to reply.

Can you replace src/routes/merge.js with the following and test again?
import express from "express";
const router = express.Router();
import { readFile, writeFile } from "fs/promises";
import { FFmpeg } from "@ffmpeg.wasm/main";
import path from "path";

const currentDirectory = process.cwd();

const inputFilePath = path.join(currentDirectory, "Reel3.mp4");
const inputFilePath1 = path.join(currentDirectory, "wolf-howl-6310.mp3");
const outputFilePath = path.join(currentDirectory, "Reel3-2.mp4");

const ffmpeg = await FFmpeg.create({ core: "@ffmpeg.wasm/core-mt", log: true });

try {
  ffmpeg.fs.writeFile("/Reel3.mp4", await readFile(inputFilePath));
  ffmpeg.fs.writeFile("/wolf-howl-6310.mp3", await readFile(inputFilePath1));
  console.log(ffmpeg.version);
  await ffmpeg.run(
    "-i",
    "/wolf-howl-6310.mp3",
    "-i",
    "/Reel3.mp4",
    "-c",
    "copy",
    "-map",
    "0:a:0",
    "-map",
    "1:v:0",
    "/Reel3-2.mp4"
  );
  await writeFile(outputFilePath, ffmpeg.fs.readFile("/Reel3-2.mp4"));
  console.log("Conversion successful!");
} catch (error) {
  console.error("Error:", error);
}

router.post("/", (req, res) => {});
export { router as Merge };

@DreamOfIce I get this logs
{
  main: '0.13.1',
  core: {
    version: 'v0.11.0-17-gf4361a7807',
    configuration: "--target-os=none --arch=x86_32 --enable-cross-compile --disable-x86asm --disable-inline-asm --disable-stripping --disable-programs --disable-doc --disable-debug --disable-runtime-cpudetect --disable-autodetect --extra-cflags='-O3 --closure=1 -I/work/ffmpeg.wasm-core/build/include -s USE_PTHREADS=1' --extra-cxxflags='-O3 --closure=1 -I/work/ffmpeg.wasm-core/build/include -s USE_PTHREADS=1' --extra-ldflags='-O3 --closure=1 -I/work/ffmpeg.wasm-core/build/include -s USE_PTHREADS=1 -L/work/ffmpeg.wasm-core/build/lib' --pkg-config-flags=--static --nm=llvm-nm --ar=emar --ranlib=emranlib --cc=emcc --cxx=em++ --objcc=emcc --dep-cc=emcc --enable-gpl --enable-nonfree --enable-zlib --enable-libx264 --enable-libx265 --enable-libvpx --enable-libwavpack --enable-libmp3lame --enable-libfdk-aac --enable-libtheora --enable-libvorbis --enable-libfreetype --enable-libopus --enable-libwebp --enable-libass --enable-libfribidi",
    libs: {
      libavutil: '56.51.100',
      libavcodec: '58.91.100',
      libavformat: '58.45.100',
      libavdevice: '58.10.100',
      libavfilter: '7.85.100',
      libswscale: '5.7.100',
      libswresample: '3.7.100',
      libpostproc: '55.7.100'
    },
    raw: 'ffmpeg version v0.11.0-17-gf4361a7807 Copyright (c) 2000-2020 the FFmpeg developers\n' +
      'built with emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 3.1.43 (a6b8143cf3c1171db911750359456b15a8deece7)\n' +
      "configuration: --target-os=none --arch=x86_32 --enable-cross-compile --disable-x86asm --disable-inline-asm --disable-stripping --disable-programs --disable-doc --disable-debug --disable-runtime-cpudetect --disable-autodetect --extra-cflags='-O3 --closure=1 -I/work/ffmpeg.wasm-core/build/include -s USE_PTHREADS=1' --extra-cxxflags='-O3 --closure=1 -I/work/ffmpeg.wasm-core/build/include -s USE_PTHREADS=1' --extra-ldflags='-O3 --closure=1 -I/work/ffmpeg.wasm-core/build/include -s USE_PTHREADS=1 -L/work/ffmpeg.wasm-core/build/lib' --pkg-config-flags=--static --nm=llvm-nm --ar=emar --ranlib=emranlib --cc=emcc --cxx=em++ --objcc=emcc --dep-cc=emcc --enable-gpl --enable-nonfree --enable-zlib --enable-libx264 --enable-libx265 --enable-libvpx --enable-libwavpack --enable-libmp3lame --enable-libfdk-aac --enable-libtheora --enable-libvorbis --enable-libfreetype --enable-libopus --enable-libwebp --enable-libass --enable-libfribidi\n" +
      'libavutil      56. 51.100 / 56. 51.100\n' +
      'libavcodec     58. 91.100 / 58. 91.100\n' +
      'libavformat    58. 45.100 / 58. 45.100\n' +
      'libavdevice    58. 10.100 / 58. 10.100\n' +
      'libavfilter     7. 85.100 /  7. 85.100\n' +
      'libswscale      5.  7.100 /  5.  7.100\n' +
      'libswresample   3.  7.100 /  3.  7.100\n' +
      'libpostproc    55.  7.100 / 55.  7.100\n' +
      'Successfully parsed a group of options.\n' +
      'Parsing a group of options: output url ffmpeg.\n' +
      'Successfully parsed a group of options.\n' +
      'Opening an output file: ffmpeg.\n' +
      "Unable to find a suitable output format for 'ffmpeg'\n" +
      'ffmpeg: Invalid argument\n' +
      "Output #0, (null), to '(null)':\n" +
      'Output file #0 does not contain any stream\n' +
      'No input streams but output needs an input stream\n'
  }
}

@DreamOfIce I get this logs

{

  main: '0.13.1',

  core: {

    version: 'v0.11.0-17-gf4361a7807',

    configuration: "--target-os=none --arch=x86_32 --enable-cross-compile --disable-x86asm --disable-inline-asm --disable-stripping --disable-programs --disable-doc --disable-debug --disable-runtime-cpudetect --disable-autodetect --extra-cflags='-O3 --closure=1 -I/work/ffmpeg.wasm-core/build/include -s USE_PTHREADS=1' --extra-cxxflags='-O3 --closure=1 -I/work/ffmpeg.wasm-core/build/include -s USE_PTHREADS=1' --extra-ldflags='-O3 --closure=1 -I/work/ffmpeg.wasm-core/build/include -s USE_PTHREADS=1 -L/work/ffmpeg.wasm-core/build/lib' --pkg-config-flags=--static --nm=llvm-nm --ar=emar --ranlib=emranlib --cc=emcc --cxx=em++ --objcc=emcc --dep-cc=emcc --enable-gpl --enable-nonfree --enable-zlib --enable-libx264 --enable-libx265 --enable-libvpx --enable-libwavpack --enable-libmp3lame --enable-libfdk-aac --enable-libtheora --enable-libvorbis --enable-libfreetype --enable-libopus --enable-libwebp --enable-libass --enable-libfribidi",

    libs: {

      libavutil: '56.51.100',

      libavcodec: '58.91.100',

      libavformat: '58.45.100',

      libavdevice: '58.10.100',

      libavfilter: '7.85.100',

      libswscale: '5.7.100',

      libswresample: '3.7.100',

      libpostproc: '55.7.100'

    },

    raw: 'ffmpeg version v0.11.0-17-gf4361a7807 Copyright (c) 2000-2020 the FFmpeg developers\n' +

      'built with emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 3.1.43 (a6b8143cf3c1171db911750359456b15a8deece7)\n' +

      "configuration: --target-os=none --arch=x86_32 --enable-cross-compile --disable-x86asm --disable-inline-asm --disable-stripping --disable-programs --disable-doc --disable-debug --disable-runtime-cpudetect --disable-autodetect --extra-cflags='-O3 --closure=1 -I/work/ffmpeg.wasm-core/build/include -s USE_PTHREADS=1' --extra-cxxflags='-O3 --closure=1 -I/work/ffmpeg.wasm-core/build/include -s USE_PTHREADS=1' --extra-ldflags='-O3 --closure=1 -I/work/ffmpeg.wasm-core/build/include -s USE_PTHREADS=1 -L/work/ffmpeg.wasm-core/build/lib' --pkg-config-flags=--static --nm=llvm-nm --ar=emar --ranlib=emranlib --cc=emcc --cxx=em++ --objcc=emcc --dep-cc=emcc --enable-gpl --enable-nonfree --enable-zlib --enable-libx264 --enable-libx265 --enable-libvpx --enable-libwavpack --enable-libmp3lame --enable-libfdk-aac --enable-libtheora --enable-libvorbis --enable-libfreetype --enable-libopus --enable-libwebp --enable-libass --enable-libfribidi\n" +

      'libavutil      56. 51.100 / 56. 51.100\n' +

      'libavcodec     58. 91.100 / 58. 91.100\n' +

      'libavformat    58. 45.100 / 58. 45.100\n' +

      'libavdevice    58. 10.100 / 58. 10.100\n' +

      'libavfilter     7. 85.100 /  7. 85.100\n' +

      'libswscale      5.  7.100 /  5.  7.100\n' +

      'libswresample   3.  7.100 /  3.  7.100\n' +

      'libpostproc    55.  7.100 / 55.  7.100\n' +

      'Successfully parsed a group of options.\n' +

      'Parsing a group of options: output url ffmpeg.\n' +

      'Successfully parsed a group of options.\n' +

      'Opening an output file: ffmpeg.\n' +

      "Unable to find a suitable output format for 'ffmpeg'\n" +

      'ffmpeg: Invalid argument\n' +

      "Output #0, (null), to '(null)':\n" +

      'Output file #0 does not contain any stream\n' +

      'No input streams but output needs an input stream\n'

  }

}

Sorry, I forgot to delete console.log(ffmpeg.version);

@DreamOfIce I don't know why the [nodemon] app crashed - waiting for file changes before starting...

@DreamOfIce Hey, It works fine, thanks. But I do have a question will doing this affect the video quality?

Please check the ffmpeg documentation: https://ffmpeg.org/documentation.html

Can we close this issue?

@DreamOfIce I'm getting this error "Error: Error: Cannot find module '@ffmpeg.wasm/core-mt', When my code is deployed on Vercel (Node.js + TypeScript) Does I get confused because when I try to run the same code on my local machine it works fine
But as I deploy it on Vercel it gives that error. Obviously, i do have "@ffmpeg.wasm/core-mt" installed as said in the package https://github.com/FFmpeg-wasm/FFmpeg.wasm#installation So how do I fix it?
Is there any other way to do the way?
I'm currently using it like this
import { FFmpeg } from "@ffmpeg.wasm/main";

async function myFunction() {
    const ffmpeg = await FFmpeg.create({
        core: "@ffmpeg.wasm/core-mt",
        log: true,
    });
}

However, in the docs, i see doing like this
  import { FFmpeg } from "@ffmpeg.wasm/main";

     const ffmpeg = await FFmpeg.create({
            core: "@ffmpeg.wasm/core-mt",
            log: true,
        });

    async function myFunction() {
        // use ffmpeg here
    }

@xts-bit - Vercel does not know how to copy the wasm file over to the serverless functions. You must explicitly move the file in after build, before deploy. Very silly but I spent a whole day on this issue. The fix is here: https://github.com/syntaxfm/website/blob/main/why_do_i_need_this.mjs

authors: DreamOfIce stydxm wesbos xts-bit


text:
TypeError 'undefined' when @return is empty

I recently added some documentation to some code but did not fill in an @return value with any information, just left it blank. I had done quite a bit in my code so when I received the following error, I was quite confused; no information regrding the reason. I eventually ran doxx on each file individually by moving each into a separate directory (adding an option to the --source tag for files/folder array instead of a single directory, only, would be helpful if you're bored). Eventually, I figured out which file the error was and I had only added one function so through trial-and-error I determined it was an issue with the @return tag.

Error output:
$ doxx --source 'src/util' --target 'docs'
'doxx: [TypeError: Cannot call method 'replace' of undefined]'
$
Offending comment:

/**
  * My comment.
  *
  * @param someValue
  * @return
  */

This is an error thrown here by the dox parser, and thus should be addressed in that repo.
nofix

Following @forstermatth analysis, closing this issue.

authors: FGRibreau forstermatth sranger

repo: FGRibreau/doxx


text:
biobanks meta GWAS data sharing

Hello,
I plant to do meta GWAS of 3 large biobanks: Finngen, UKBiobank, Biobank Japan. Can you please tell me does Finngen has constrains/recommendations as to where that meta gwas summary statistics can be publicly shared?
Thanks
Ana

There's no constraints to publicly released FinnGen summary statistics. We kindly ask to acknowledge FinnGen if publishing results using the FinnGen summary statistics. See more details here https://finngen.gitbook.io/documentation/how-to-cite

authors: juhaa montenegrina


text:
( [] ) is accepted as an operator in lets, but not vals

let ([]) : int -> int -> int = (+) is accepted, but
val ( [] ): int -> int -> int gives a syntax error.
it seems that this definition does not work as an operator though, since
let a = ([]) 3 4 gives the error
Too many arguments to function of type Prims.Tot (Prims.list a)
:: also gets resolved to list concatenation, regardless of the definition in scope.

This should be rejected; I think it's subsumed by https://github.com/FStarLang/FStar/issues/1228 ; please reopen if I'm misunderstanding though (can you reopen issues? If not, ping me)

authors: A-Manning cpitclaudel

repo: FStarLang/FStar


text:
Parse error when placing implicit arguments in parenthesis

The function
val foo: (#n:nat) -> Type -> Tot Type
gives a parse error, but removing the parenthesis on the implicit, as below, verifies fine.
val foo: #n:nat -> Type -> Tot Type
Why is this?

The origin of the bug is that the parser is parsing an optional qualifier ("#") followed by an arbitrary term which can happen to be ascribed ("n:nat") and parenthesized ("(n:nat)"). I fixed it by adding a special case handling this issue in the branch kyod_parser which will hopefully be merged soon.
I wil try to see if I can do something cleaner by rearranging the syntactical categories of terms...

Should probably also double-check with @nikswamy  that allowing
val foo'': (n:nat) -> Type -> Tot Type

is a feature, not a bug in the first place. I remember this issue came up in some past discussions.

Already checked, and we agreed that it was something we wanted to be valid F* code.

Fixed by Kenji's new parser

authors: A-Manning catalin-hritcu kyoDralliam


text:
Question: using version 0.9.0, ParagraphGraphicFactory generates -1 values, is this by design?

ParagraphGraphicFactory started to generate -1 values at v0.9.0, which wasn't the case before.
Looking at the discussions, there was an old suggestion for such value when an error occurs, but nothing clear in the documentation.
is this by design or a bug?
Thanks.
Environment info:

RichTextFX Version: 0.9.0
Operating System: macOS High Sierra
Java version: 1.8.0_171

This is a workaround for an issue I discovered when implementing #687. When a ParagraphBox gets created, it's value starts at 0. The initial caret/selection would always be added to this "first" paragraph and then removed when that paragraph index value was changed to its actual value. As a result, the main caret and selection would not be displayed when fully rendered. Thus, I set the initial paragraph index to -1 to prevent the caret/selection being added to it until the value was correct.
So, it works this way by design, but it could be changed to workaround the issue in a different way.

Thank you Jordan.

Could you add a note in the documentation about this behavior?  I've just been hit by this and it's confusing when it happens.

authors: JordanMartinez amjdhsn garybentley

repo: FXMisc/RichTextFX


text:
Creating a Database

Creating a Database

Creating a Database

Creating a Database


text:
Display sollte einen Ein- und Ausschalter bekommen

... vielleicht ist es nachts jemanden zu hell?

Erledigt mit f78d0046bfc982f9eed8a6798f838eb86a3434d6

repo: Fabmobil/Pflanzensensor


text:
JS help needed

I want to make the mapping table items copied to clipboard on click. However, I currently have some trouble doing that. Seeking help!

Is this what you are looking for? (or something similar) (based on the JS file in the repo)
This will copy the clicked span element by selecting it, copying it, and then removing that selection.
const items = document.querySelectorAll("span");

items.forEach(item => {
  item.onclick = function() {
  	var range = document.createRange();
  	range.selectNode(item);
  	window.getSelection().addRange(range);

    var result = document.execCommand('copy');
    console.log(result ? 'Copied to clipboard' : 'Couldn\'t copy'); //Completely optional

    window.getSelection().removeRange(range);
  };
});

Sorry if it's not, I've not been able to run this repo to see how is this integrated (tried building alone and creating javadocs with yarn PR, not sure if that's the way). It does however do what (I think) that snippet tries to do (first part).
This is not perfect: It will clear selections if the user was selecting the element being copied when clicking. Also, if the user had something selected and clicks the item while adding to the selection (Ctrl+Drag), then both will be copied. But it works in general. To solve that, the current selection could be exported to a variable, then cleared, then this code, then readded.

Wait, I think I've got it.

Should keep this open until I verify now copy on click works well

Should be addressed in 0.2.2.

authors: altrisi liach

repo: FabricMC/MappingPoet


text:
SpawnGroup fields are inconsistent

As seen on the picture below, SpawnGroup fields are not correctly named, especially the "animal" one which should obv not apply to misc entities

The peaceful field is used only for this:
if ((spawnAnimals || !spawnGroup.isPeaceful()) && (spawnMonsters || spawnGroup.isPeaceful()) && (shouldSpawnAnimals || !spawnGroup.isAnimal()) && info.isBelowCap(spawnGroup)) {
	spawnEntitiesInChunk(spawnGroup, world, chunk, (entityType, blockPos, chunkx) -> {
		return info.test(entityType, blockPos, chunkx);
	}, (mobEntity, chunkx) -> {
		info.run(mobEntity, chunkx);
	});
}

The shouldSpawnAnimals used in this context is determined by worldProperties.getTime() % 400l == 0l. Perhaps it should be shouldSpawnRarely then?

I think animals is something from server properties file. Need to check again.

I think animals is something from server properties file. Need to check again.

Not a problem in latest yarn 07a.

Why? "Misc" spawn group still passes true for the "animal" field, which doesn't make sense

Hmm, so it's looking for usage of isAnimal

Afai see, that isAnimal is never called on MISC instances. In fact, it is only called in SpawnHelper.spawn(ServerWorld, WorldChunk, SpawnHelper.Info, boolean spawnAnimals, boolean spawnMonsters, boolean shouldSpawnAnimals) (the boolean fields have inadequate names) in a loop over SPAWNABLE_GROUPS, which has everything except MISC.

Now I see. that is not isAnimal, more like isRare. pr coming soon

authors: YanisBft haykam821 liach

repo: FabricMC/yarn


text:
1.20.2

Describe the Suggestion
Support for 1.20.2
Screenshots and Videos
No response
Additional Context
probly gonna be useless unless #1039 is fixed

this isnt completed as 1.20.2 isnt on modrinth (if its not planned dupe or upstream then mark as such)

repo: Fabricators-of-Create/Create


text:
KubeJS compat and better tags

Describe the Suggestion
I was trying to get create to work with other mods' ores, ingots etc. Things like getting the crushing wheel to properly process other ores. All the trial and error to no avail. My concern is that since create (fabric) uses forge tags, it doesn't work at all with anything else besides vanilla. I already assume you guys are aware of this and I'm curious about the plans of mitigation.
Screenshots and Videos
No response
Additional Context
No response

if you want it to work with other mods, I'd think that editing the base tags yourself would be viable, seeing as none of this is hardcoded

try CreatePlus.
https://modrinth.com/mod/createplus
it can fix issue about tags.

try CreatePlus. https://modrinth.com/mod/createplus it can fix issue about tags.

https://github.com/Fabricators-of-Create/Create/pull/245
Pull Request about this

try CreatePlus. https://modrinth.com/mod/createplus it can fix issue about tags.

trying it now.

Oh wait, its for quilt exclusively...

It has a datapack format.
https://cdn.modrinth.com/data/svgZx0UN/versions/1.0-beta2/CreatePlus Datapack.zip

oh ok thanks!

Any plans to have fabric support in your mod addon.

Any plans to have fabric support in your mod addon.

It's easy to port(you can port yourself or use Quilt. Most of Fabric mods can play on Fabric.

Any plans to have fabric support in your mod addon.

It's easy to port(you can port yourself or use Quilt. Most of Fabric mods can play on Quilt.

quilt is very buggy. I'm building from source anyways so it's all good.

Any plans to have fabric support in your mod addon.

It's easy to port(you can port yourself or use Quilt. Most of Fabric mods can play on Quilt.

quilt is very buggy. I'm building from source anyways so it's all good.

note that the source doesn't include createplus-core(datapack) by default.

[B#744]  Caused by: org.spongepowered.asm.mixin.injection.throwables.InvalidInjectionException: Critical injection failure: @Inject annotation on port_lib$clientStartTickEvent could not find any targets matching 'Lnet/minecraft/class_1657;tick()V' in net.minecraft.class_1657. Using refmap porting_lib-refmap.json [PREINJECT Applicator Phase -> porting_lib.mixins.common.json:PlayerMixin from mod porting_lib -> Prepare Injections ->  -> handler$zeg000$port_lib$clientStartTickEvent(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V -> Parse]
It spits out this error when I use the compiled version.

[B#744] Caused by: org.spongepowered.asm.mixin.injection.throwables.InvalidInjectionException: Critical injection failure: @Inject annotation on port_lib$clientStartTickEvent could not find any targets matching 'Lnet/minecraft/class_1657;tick()V' in net.minecraft.class_1657. Using refmap porting_lib-refmap.json [PREINJECT Applicator Phase -> porting_lib.mixins.common.json:PlayerMixin from mod porting_lib -> Prepare Injections -> -> handler$zeg000$port_lib$clientStartTickEvent(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V -> Parse]
It spits out this error when I use the compiled version.

how you compile?

I changed the port lib has to the new one.

createplus don't need port lib and you can use the latest version of create fabric directly.

I was talking about ur PR of create

fetched upstream

fetched upstream

Is it getting merged now? Or is it already merged.

oh i saw...

latest.log
It causes a porting lib issue tho...

Player Mixin is failing

?

if it's a mixin issue, report it to TropheusJ

if it's a mixin issue, report it to TropheusJ

ok

KubeJS support: https://www.curseforge.com/minecraft/mc-mods/kubejs-create
we will be handling tags with the 1.19 update.

pog

tag change happened

authors: Arathain FluffyBumblee JieningYu TropheusJ


text:
Invalid Skin

I use /specter spawn YourMCHelper it tells me "YourMCHelper logged out due to invalid skin!"
Can you fix this?

Issue already fixed in development build.

Where can I download it?

A .phar release will be available when other bugs have been fixed.

Ok Thanks

authors: PEMapModder TheEpicCooldeal

repo: Falkirks/Specter