Summary:
Pull Request resolved: https://github.com/facebook/flipper/pull/3473
This diff is the first one which addresses https://github.com/facebook/flipper/issues/3320.
In this diff we are making a part of the code used for internal Flipper plugin distribution in Meta also available publicly for re-using in other orgs.
Some explanation on how plugin installation and updates is designed now:
1) We periodically poll for plugins available for download. API for retrieving available plugins list is abstracted and will be different between public and fb versions, however all other logic is re-used.
2) In addition to "Enabled" and "Disabled" plugins in the left panel Flipper shows "Detected in App" list. Plugins in this list are those which are known compatible with the currently selected device/app, but not yet installed.
3) User can install any of "Detected in App" plugins by clicking to "Download and install" button near them in the left panel similarly to enabling plugins in "Disabled" list.
4) If we detect that for some installed plugin we have a newer version available for download - we download it silently and store on disk.
5) If the plugin for which we have new downloaded version is disabled - we update it silently without any notifications by loading new version from the disk and unloading the previous version from cache.
6) If the plugin for which we have new downloaded version is enabled then we avoid updating it automatically (because we need to reset plugin state in such case) and instead show notification on top of the plugin and ask user to reload it to apply new version. On reloading we reset the plugin state.
7) On Flipper startup we always update all plugins to their latest versions available on the disk.
Reviewed By: aigoncharov
Differential Revision: D34380308
fbshipit-source-id: a94d724e42aa5ef78445af266fcd4c424226a703
Summary:
This is just refactoring in preparation to open-sourcing internal plugin distribution code to make it available for other orgs so they can distribute their internal plugins. See other diffs in the same stack.
This diff moves recommended plugins handling from `pluginMarketplace` which will be the same for fb-internal and OS versions into `pluginMarketplaceAPI` which will differ for fb-internal and OS versions. This will make it possible for other orgs to define their own "recommended" plugins which then will be automatically installed/enabled for new users.
Reviewed By: aigoncharov
Differential Revision: D34379981
fbshipit-source-id: 5c3a4efb6d0171256cf508f9005d914d7332e14f
Summary:
'Failed to start connection server' is a bit misleading. 'server-error' is used for both server and client errors.
Changelog: Better notification messaging
Reviewed By: aigoncharov
Differential Revision: D34269045
fbshipit-source-id: f51a28fc0e9ba394b464e5bfca4d0e497f740b1b
Summary:
Noticed in https://fb.workplace.com/groups/flippersupport/permalink/1305583723255616/ that always shows at the end of the plugin list.
Fixed this on two levels:
1. uppercase the title for consistency
2. Make sorting case insensitive
Differential Revision: D33985518
fbshipit-source-id: 70bed519e1ae5b3251b103931472844b2b55a512
Summary:
Our existing `timeout` implementation was always throwing an exception, due to sleeping and then throw an exception, which is than handled but ignored by `Promise.race`.
This implementation has a few problems
1. Because it always throws, having a debugger session with 'break on caught exceptions' will pause on every usage of timeout (rather than just the ones that actually timeout). This makes this way of debugging a bit useless.
2. Throwing exceptions is in principle an expensive process (due to the stack trace generation)
3. Not cancelling the timeout used by sleep is a bit of a waste as well
Reviewed By: lawrencelomax
Differential Revision: D33982717
fbshipit-source-id: d739c02112e1c1bc4cd691af852371d08a99abc6
Summary:
This PR fixes the missing hover effect for the `LeftRail` component buttons, when they have included the badge.
To fix the issue, I had to wrap the whole `Button` with `Badge` component (instead wrapping only around icon). However, this solution required to added `offset` property to the `Badge` which moves the indicator to the position prior change (otherwise indicator was moved to the right corner of the button).
The file has been formatted after the changes with ESLint.
**Edit:** I have also spotted that this change fixes the icon placement inside the button, when badge is present. Earlier, as seen below, the log icon was moved towards the top of the button:
<img width="111" alt="Screenshot 2022-01-31 at 00 57 49" src="https://user-images.githubusercontent.com/719641/151723422-0ffb83ee-5806-412e-9191-f9953f78532e.png">
## Changelog
[desktop] UI: fix hover effect of LeftRail icons with badge
Pull Request resolved: https://github.com/facebook/flipper/pull/3372
Test Plan:
The change has been testes by running the desktop Flipper app locally from source.
## Preview (before & after)
#### Before
<img width="1339" alt="Screenshot 2022-01-31 at 00 24 23" src="https://user-images.githubusercontent.com/719641/151722800-a2f3dd44-aa24-4858-b43e-0620b1f2ae65.png">
#### After
> I have used mocked indicator values locally to ensure that the Badges are displayed correctly.
<img width="1339" alt="Screenshot 2022-01-31 at 00 26 10" src="https://user-images.githubusercontent.com/719641/151722795-745b04ac-9ee4-49a8-8217-206d8d7456e6.png">
<img width="1339" alt="Screenshot 2022-01-31 at 00 45 08" src="https://user-images.githubusercontent.com/719641/151722940-aaaf0e9b-f2d1-4245-8b2b-cfc11052b39e.png">
Reviewed By: aigoncharov
Differential Revision: D33975324
Pulled By: mweststrate
fbshipit-source-id: fe4773b4825b9f22e01821e45259747d319233aa
Summary:
Currently the design of `LeftRail` varies a bit between light and dark modes. Additionally washed background color is hard to differentiate from the main background color in comparison to the light theme (See `LeftRail` sidebars toggle buttons background for example). This lead to few contrast related issues, for example the hover effect on the WelcomeScreen elements is not visible in dark mode.
The PR tweaks the dark mode theme colors and fixes the unnecessary background of Settings icon in dark mode.
I have also spotted that icon `hover` effect is not working when icon has a badge (pure dot or count), I might have an idea how to fix this and I will push another PR for that. 🙂
## Changelog
* tweak dark mode theme colors, improve LeftRail UI
Pull Request resolved: https://github.com/facebook/flipper/pull/3335
Test Plan:
The change has been testes by running the desktop Flipper app locally from source.
## Preview (before & after)
<img width="390" alt="Screenshot 2022-01-24 at 13 37 20" align="left" src="https://user-images.githubusercontent.com/719641/150784627-36e222a8-e53e-4409-ab72-783d4a594f8e.png">
<img width="390" alt="Screenshot 2022-01-24 at 13 46 08" src="https://user-images.githubusercontent.com/719641/150785438-bb496adf-83ab-4b1c-928d-07f4b0098f1a.png">
Reviewed By: antonk52
Differential Revision: D33741513
Pulled By: lblasa
fbshipit-source-id: ef187db0725ac2b04c09b7f06823e713b50be88f
Summary:
Same as Settings modal, the Plugin Manager table used in Plugins modal includes the UI glitch in dark mode due to overflow setting. This PR fixes that and also adds missing column caption in "Install Plugins" table.
I have chosen `Action` as a title but this can be altered, I have no strong preference in there. The goal was to improve the clarity and also improve the context menu content (where user can show/hide columns).
## Changelog
* fix Plugins table UI glitch in dark mode, add column name
Pull Request resolved: https://github.com/facebook/flipper/pull/3332
Test Plan:
The change has been testes by running the desktop Flipper app locally from source.
## Preview (before & after)
<img width="396" alt="Screenshot 2022-01-23 at 16 19 02" align="left" src="https://user-images.githubusercontent.com/719641/150685739-e2047e70-de14-4801-ac5a-0fc45a6ea476.png">
<img width="396" alt="Screenshot 2022-01-23 at 16 19 31" src="https://user-images.githubusercontent.com/719641/150685735-3de8b7a2-ea3f-489a-b1f8-7af73f0a5225.png">
Reviewed By: aigoncharov
Differential Revision: D33738705
Pulled By: lblasa
fbshipit-source-id: 704fe40f26d424c62a9bbc3e73132a0026f2e8b8
Summary:
A Logview issue was raised for the following error:
Cannot assign to read only property '0' of object '[object Array]'.
Analysis:
Currently, the menuEntries are stored by reference in the reducer, and made read only to protect it against accidental writes. Tha's probably why the '0' assignment fails, and the fix is that the reducer should only get a defensive copy as config about the current menu entries to show.
Reviewed By: mweststrate
Differential Revision: D33454514
fbshipit-source-id: 2faf3036eb6ae4fbe9a8d0253fde27cf389d3e4c
Summary:
2022 New years intention: don't fix problems with arbitrarily timeouts
In production builds, settings weren't saved if apply + restart was used (apply and manual restart did work). I suspect a bug in redux-persist, since we do await a flush, but anyway a little delay seems to fix it consistently.
Changelog: Fixed an issue where changing settings wasn't persisted when using "Apply + Restart
P.S. I won't accept any insinuations that this was my new years intention of 2015, 2017, 2018, 2020 and 2021 as well.
Reviewed By: cekkaewnumchai
Differential Revision: D33377718
fbshipit-source-id: 3a9ec58b4f8208603d786342ddaf6bf02b3887c7
Summary:
changelog: Improved column widths in data tables
This diff fixes two issues:
1) dynamic width columns became invisible if there is too much else, and therefor it was hard to make them bigger or even notice them
2) column headers could be out of sync with the actually rendered rows, due to minor styling differences
Reviewed By: cekkaewnumchai
Differential Revision: D33364781
fbshipit-source-id: c3d47bb8db4af521859a5cbdf525d8ce39c71d00
Summary:
This diff makes sure that errors are propagated similarly in flipper desktop and browser version, and that they are shown in either case.
Since in the browser version, the UI loads after the error happened, we'll store the error so that any client connecting in the future will read and report it.
Also added a `--failFast` flag to flipper-server, so that the process exits immediately if misconfigured, which is convenient in CI use cases and such
Reviewed By: nikoant
Differential Revision: D33348922
fbshipit-source-id: 0f584104f881141fde38da3f0031748415343ea2
Summary:
Changelog: Allow only a single crash watcher and a single log listener per device. Start log listener and crash watcher for every device upon connection. Remove commands to start/stop them externally.
Monitored CPU load for a physical Android device with the log listener on and off. Did not notice any real difference.
Resolved crashing adbkit-logcat by forcing the usage of 2.0.1. A proper fix would be to unify babel transforms for browser flipper and electron flipper, but we might re-think how we distribute flipper in the next half, so a simple hot fix might be a better use of time and resources.
Reviewed By: mweststrate
Differential Revision: D33132506
fbshipit-source-id: 39d422682a10a64830ac516e30f43f32f416819d
Summary: When bundling a production bundle of flipper-ui / flipper-server, noticed that a lot of irrelevant stuff ends up. Like: `jest`, `metro`, `testing-library`. The whole jungle basically. Will add safety checks in the next diffs that this no longer happens
Reviewed By: passy
Differential Revision: D33186531
fbshipit-source-id: 1e2034153c8c4a3fac02cd9ce27d99224223df7a
Summary: This diff is some boyscouting on cleaning up our globals, and stop using them inconsistently icmw global or window
Reviewed By: aigoncharov
Differential Revision: D33171108
fbshipit-source-id: 400893e5f31523631a7ab6fda428524c751901f1
Summary:
This diff adds `types` fields on the compiler config for every project. This way we can make sure that for example node types and packages are not available in flipper-ui-core. Without an explicit types field, all types would be shared between all packages, and implicitly included into the compilation of everything. For the same reason `types/index.d.ts` has been removed, we want to be intentional on which types are being used in which package.
This diff does most of the work, the next diff will fine tune the globals, and do some further cleanup.
As an alternative solution I first tried a `nohoist: **/node_modules/types/**` and make sure every package list explicitly the types used in package json, which works but is much more error prone, as for example two different react types versions in two packages will cause the most unreadable compiler error due to the types not being shared and not literally the same.
Reviewed By: lawrencelomax
Differential Revision: D33124441
fbshipit-source-id: c2b9d768f845ac28005d8331ef5fa1066c7e4cd7
Summary:
This diff removes most deps from the root package.json, which now only contains electron and shared build / test infra structure: lint, prettier, jest, typescript.
This makes it possible to control much better which packages are used where, as all sub packages now have their deps explicitly in their package.json instead of incidentally shared. This allows for example to disable DOM types for all packages by default (flipper-plugin, ui(-core) and app still request it), and in the next diff I hope to add to this that nodeJS types are no longer shared either, so that UI oriented packages will generate compile errors when using Node built-ins
This diff removes most deps that were currently unused, and dedupes a bunch of other ones, so the build should probably be a bit smaller now as well:
{F686704253}
{F686704295}
Reviewed By: antonk52
Differential Revision: D33062859
fbshipit-source-id: 5afaa4f2103d055188382a3370c1fffa295a298a
Summary:
Changelog: Register shortcuts only for Flipper application instead of globally. Fixes https://github.com/facebook/flipper/issues/3090
As reported, during decapitation we accidentally started registering shortcuts globally, rather per app as it used to be in the menu's. This diff fixes that and also makes sure shortcuts are supported in the browser version of flipper
Reviewed By: lawrencelomax
Differential Revision: D33158445
fbshipit-source-id: 8371e5b96e772152eeb93ba990e1f5edb9e67085
Summary:
Bundled plugins so far didn't load because the defaultPlugins was not generated yet. Fixed follow up errors that resulted from node modules not being available in the browser, and made the process more robust so that one plugin that fails to initialise doesn't kill all bundled plugins from being loaded.
Cleaned up the server scripts, and reused the BUILTINS list that is already maintained in the babel transformer.
Report errors during the build process if modules are referred that are stubbed out (later on we could maybe error on that)
Reviewed By: aigoncharov
Differential Revision: D33020243
fbshipit-source-id: 3ce13b0049664b5fb19c1f45f0b33c1d7fdbea4c
Summary: Since no plugin directly uses adbkit or crc32 anymore, we removed them from the globals. They wouldn't work in the browser anyway
Reviewed By: aigoncharov
Differential Revision: D33019084
fbshipit-source-id: 66ab0756399fdb401c63f5e8271bdd62cb79ab4a
Summary: Removed process, adbkit and electron usages that were still remaining. Verified changes by disabling the built-in module stubbing (will be cleaned up further later in this stack).
Reviewed By: aigoncharov
Differential Revision: D33019083
fbshipit-source-id: 8bfce31f4b5ed349cb4fd86d34c9b41b9b8b8360
Summary:
Removed remaining path / fs imports from Flipper core.
`expand-tide` needed replacement too, but noticed that it never actually rewrites paths since all use cases were already using absolute paths, so removed it instead.
Reviewed By: aigoncharov
Differential Revision: D33017654
fbshipit-source-id: e12f66ef68b5f9e4279411c94445a2fb87249e9a
Summary: Per title. Made an explicit distinction between binary and non binary files, since they need to be encoded differently. This keeps both the implementation and API simpler (in terms of overloading / type checking)
Reviewed By: aigoncharov
Differential Revision: D33016031
fbshipit-source-id: 3c99956eb016849a908a171d88a7a64a88b76268
Summary: Run doctor checks remained pending when the socket disonnected during a check. This
Reviewed By: aigoncharov
Differential Revision: D32984539
fbshipit-source-id: 277005e78803afaaa220cc5ca7fdc9cca6254453
Summary: Noticed that the welcome screen started bleeding in the sidebar when the screen is too small. Unlike the plugin container it lacked an overflow: hidden.
Reviewed By: timur-valiev, aigoncharov
Differential Revision: D32987160
fbshipit-source-id: be324247cdb4abfeec12c40624d65f9fa1e86eff
Summary:
Changelog: Fixed issue where occasionally a plugin wouldn't open after starting Flipper
This fixes a long standing issue where rarely Flipper wouldn't show the selected plugin. This turned out to be a raise condition, that was easy to reproduce in the Flipper browser version; if a client register before all the plugins are loaded, the plugins that are enabled for that client, but not loaded yet, will not instantiate and hence not show up. This diff fixes that
Reviewed By: timur-valiev, aigoncharov
Differential Revision: D32987162
fbshipit-source-id: f3179cd9b6f2e4e79d05be1f2236f63acdf50495
Summary:
I was running flipper-server on a fresh machine without Flipper installed and discovered that reading / writing settings failed since `~/.flipper` wasn't existing, due to using `access` instead of `pathExists`.
Added a warning about needing to restart the server after making changes, since that is tricky to do from the UI.
Fixed an issue in the settings screen, which would fs.stat as part of rendering, causing the Settings UI not to load.
Reviewed By: timur-valiev, aigoncharov
Differential Revision: D32984538
fbshipit-source-id: 2b2011ad9d84c72ac824d92a8c96f636237b8771
Summary:
Forbid imports from nested directories of flipper-common, flipper-plugin, flipper-ui-core
In the stack of D32926830 I occasionally imported from flipper-plugin/src/... which is not allowed. This should fix any auto-import related issues once and for all.
Reviewed By: timur-valiev
Differential Revision: D32987054
fbshipit-source-id: f19f6278219961ad283cacfec094a6c703ca93f8
Summary: Changelog: Expose "downloadFile" API to Flipper plugins. Allow them to download files form the web to Flipper Server.
Reviewed By: mweststrate
Differential Revision: D32950685
fbshipit-source-id: 7b7f666e165ff7bf209230cdc96078272ede3616