Summary:
This diff adds OS support for dark mode (at least on Mac), by making sure system elements are styled according to system dark theme.
For some unknown reason, this does apply to all system dialogs, titlebars etc, but not for scrollbars, so they got custom themed.
Differential Revision: D29436058
fbshipit-source-id: bac649b6cd81f0142c607ed567eeb00f41625041
Summary:
This diff adds Sandy colors and dark mode support to the `DataInspector` and `LayoutInspector` components, and coverts hardcoded colors to semantic colors. Currently only one set of colors is used since they contrast fine with both dark and light mode, but this could be deviated from now onwards.
Also styled the legacy ManagedTable and Panel, since they are so commonly used (will convert more legacy components in next diffs).
Reviewed By: passy
Differential Revision: D28056698
fbshipit-source-id: 5a85103983f89e82b7f000d309bb9e1e1f07491d
Summary:
Changelog: [Flipper] Improve serialisation mechanism format & speed
The default serialisation mechanism used by Flipper to serialise plugin states is very flexible, taking care of maps, sets, dates etc. However, it is also really slow, leading to issues like in the related tasks, and work arounds like D17402443 (98bc01618f) to skip the whole process for plugins.
This diff changes the serialisation mechanism to have a better trade off between speed and convenience: For now we will only apply the smart serialisation for objects living at the _root_ of the serialised object, but it won't be applied recursively.
This sounds like a dangerous change, but works well in practice:
* I went through all `persistedState` and `createState` definition (the types), and the idea that complex types like Map and Set only live at the root of the persisted state holds up nicely. That makes sense as well since plugins typically store literally the same data as that they have received over the wire, except that they put it in some maps, sets etc.
* I introduced `assertSerializable` that only runs in dev/test, which will check (recursively, but without all the cloning) to see if a tree is indeed serialisable.
* The fact that by swapping this mechanism rarely existing unit test for exportData needed changes proves that the assumption that only roots are relevant generally upholds (or that plugin authors don't write enough tests ;-)).
* I verified that popular plugins still import / export correctly (actually *more* plugins are exportable now than before, thanks to sandy wrapper introduced earlier)
Reviewed By: jknoxville
Differential Revision: D29327499
fbshipit-source-id: 0ff17d9c5eb68fccfc2937b634cfa8f4f924247d
Summary: Noticed that when creating a flipper trace file, the errors were only shown in the console, but the dialog would hide.
Reviewed By: jknoxville, passy
Differential Revision: D29327500
fbshipit-source-id: 0ec60be28b5e3041f7cacd48ac4bcf13753f7219
Summary:
Changelog: 'flipper' package no longer uses or exposes immutablejs, or ManagedTable_Immutable
ImmutableJS was used in a few places, requires some specific knowledge to use optimally (e.g. batching was used nowhere), but most importantly resulted in a lot of unmaintained code duplication in terms of ManagedTable_immutable and the searchable variant.
For the planned trace export speedups this means that there is also serialization case less to worry about.
Reviewed By: jknoxville
Differential Revision: D29265677
fbshipit-source-id: 92e86081c03fb8da59d2c9f975f04a05e275c317
Summary:
Bumps [testing-library/dom](https://github.com/testing-library/dom-testing-library) from 7.31.2 to 8.0.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/testing-library/dom-testing-library/releases"><code>@testing-library/dom</code>'s releases</a>.</em></p>
<blockquote>
<h2>v8.0.0</h2>
<h1><a href="https://github.com/testing-library/dom-testing-library/compare/v7.31.2...v8.0.0">8.0.0</a> (2021-06-23)</h1>
<h3>Recommendations</h3>
<ol>
<li>If you're using <code>jest</code> fake timers make sure you use modern timers
jest 27:
<pre lang="diff"><code>-jest.useFakeTimers('legacy')
+jest.useFakeTimers('modern')
// jest.config.js
-"timers": "legacy",
+"timers": "modern",
</code></pre>
jest 26:
<pre lang="diff"><code>-jest.useFakeTimers()
+jest.useFakeTimers('modern')
// jest.config.js
-"timers": "legacy",
+"timers": "modern",
</code></pre>
</li>
</ol>
<h3>chore</h3>
<ul>
<li>Release v8 as stable (<a href="https://github-redirect.dependabot.com/testing-library/dom-testing-library/issues/979">https://github.com/facebook/flipper/issues/979</a>) (<a href="d347302d6b">d347302</a>)</li>
</ul>
<h3>BREAKING CHANGES</h3>
<ul>
<li>Remove deprecated <code>waitFormDOMChange</code></li>
<li>Remove deprecated <code>waitForElement</code></li>
<li>The <code>timeout</code> in <code>waitFor(callback, { interval, timeout } )</code> now uses the same clock as <code>interval</code>. Previously <code>timeout</code> was always using the real clock while <code>interval</code> was using the global clock which could've been mocked out. For the old behavior I'd recommend <code>waitFor(callback, { interval, timeout: Number.POSITIVE_INFINITY })</code> and rely on your test runner to timeout considering real timers.</li>
<li><code><script /></code>, <code><style /></code> and comment nodes are now ignored by default in <code>prettyDOM</code> .If you whish to return to the old behavior, use a custom <code>filterNode</code> function. In this case <code>prettyDOM(element, { filterNode: () => true })</code>.</li>
<li>node 10 is no longer supported. It reached its end-of-life on 30.04.2021.</li>
</ul>
<h2>v8.0.0-alpha.7</h2>
<h1><a href="https://github.com/testing-library/dom-testing-library/compare/v8.0.0-alpha.6...v8.0.0-alpha.7">8.0.0-alpha.7</a> (2021-06-20)</h1>
<h3>Bug Fixes</h3>
<ul>
<li>Consider <code><output /></code> labelable (<a href="https://github-redirect.dependabot.com/testing-library/dom-testing-library/issues/968">https://github.com/facebook/flipper/issues/968</a>) (<a href="56a4c759a0">56a4c75</a>)</li>
</ul>
<h2>v8.0.0-alpha.6</h2>
<h1><a href="https://github.com/testing-library/dom-testing-library/compare/v8.0.0-alpha.5...v8.0.0-alpha.6">8.0.0-alpha.6</a> (2021-06-12)</h1>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="84ebc5124f"><code>84ebc51</code></a> test(fake-timers): raf is now mocked in legacy fake timers (<a href="https://github-redirect.dependabot.com/testing-library/dom-testing-library/issues/986">https://github.com/facebook/flipper/issues/986</a>)</li>
<li><a href="d347302d6b"><code>d347302</code></a> chore: Release v8 as stable (<a href="https://github-redirect.dependabot.com/testing-library/dom-testing-library/issues/979">https://github.com/facebook/flipper/issues/979</a>)</li>
<li>See full diff in <a href="https://github.com/testing-library/dom-testing-library/compare/v7.31.2...v8.0.0">compare view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `dependabot rebase` will rebase this PR
- `dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `dependabot merge` will merge this PR after your CI passes on it
- `dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `dependabot cancel merge` will cancel a previously requested merge and block automerging
- `dependabot reopen` will reopen this PR if it is closed
- `dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
</details>
Pull Request resolved: https://github.com/facebook/flipper/pull/2529
Reviewed By: mweststrate
Differential Revision: D29429955
Pulled By: cekkaewnumchai
fbshipit-source-id: 7a25bed5e6d85534a48815ddc5a5a5a701df5e7b
Summary:
Bumps [metro-runtime](https://github.com/facebook/metro) from 0.65.2 to 0.66.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/facebook/metro/releases">metro-runtime's releases</a>.</em></p>
<blockquote>
<h2>Release v0.66.0</h2>
<ul>
<li><strong>[Breaking]</strong> metro-symbolicate: Optionally accept a SourceURL parameter for debug builds (7ad7560)</li>
<li><strong>[Feature]</strong> Move generator to Hermes stable (b280477)</li>
<li><strong>[Feature]</strong> Move for-of and ?? to hermes stable (31375f7)</li>
<li><strong>[Feature]</strong> Set app name for React Native Experimental Debug Connection (3aca116)</li>
<li><strong>[Feature]</strong> Infer the name "default" for anonymous exports (af23a1b)</li>
<li><strong>[Fix]</strong> Disable fileName moduleId parsing for non-legacy source maps (e473e93)</li>
<li><strong>[Fix]</strong> Format log messages using printf format (f2b3485)</li>
<li><strong>[Fix]</strong> Fix scope of function declaration binding in constant folding (150d13e)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="20e4480f9e"><code>20e4480</code></a> Bump metro to 0.66.0</li>
<li><a href="7ad7560e33"><code>7ad7560</code></a> Optionally accept a SourceURL parameter for debug builds</li>
<li><a href="af23a1b27b"><code>af23a1b</code></a> Infer the name "default" for anonymous exports</li>
<li><a href="31375f7604"><code>31375f7</code></a> Move for-of and ?? to hermes stable</li>
<li><a href="3aca116973"><code>3aca116</code></a> Set app name for React Native Experimental Debug Connection</li>
<li><a href="4bd9e40297"><code>4bd9e40</code></a> Deploy v0.148.0 to xplat</li>
<li><a href="54bcce22c6"><code>54bcce2</code></a> Backout for-of and canary ??</li>
<li><a href="f66d6e37f2"><code>f66d6e3</code></a> Canary Hermes for-of</li>
<li><a href="17d4761946"><code>17d4761</code></a> Clean up redundant experimental flowconfig options</li>
<li><a href="0b4f46c064"><code>0b4f46c</code></a> Update troubleshooting docs for metro cache tmpdir (<a href="https://github-redirect.dependabot.com/facebook/metro/issues/642">https://github.com/facebook/flipper/issues/642</a>)</li>
<li>Additional commits viewable in <a href="https://github.com/facebook/metro/compare/v0.65.2...v0.66.0">compare view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `dependabot rebase` will rebase this PR
- `dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `dependabot merge` will merge this PR after your CI passes on it
- `dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `dependabot cancel merge` will cancel a previously requested merge and block automerging
- `dependabot reopen` will reopen this PR if it is closed
- `dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
</details>
Pull Request resolved: https://github.com/facebook/flipper/pull/2531
Reviewed By: mweststrate
Differential Revision: D29429944
Pulled By: cekkaewnumchai
fbshipit-source-id: 17134158706e3e56c784b68d738e10906bdd9efa
Summary: This diff fixes the issue when some Flipper persisted state is required just after startup, but is loaded too late. This is easy to notice with a flag indicating whether Welcome window should be shown. Even if the flag is disabled, Flipper will still show the window on the next launch because it loads the state later than needed.
Differential Revision: D29426004
fbshipit-source-id: 011b5890034a6e254ce9ab834f098f1a2ab62a70
Summary: Trying to get rid of immutable_table, which is used in only 3 places. One of them being the plugin installer.
Reviewed By: jknoxville
Differential Revision: D29295534
fbshipit-source-id: dfae9476635c3a8ebba9f1439905bae693fdfd57
Summary:
createTablePlugin isn't used anymore, since all FB plugins now use flipper-plugin's, version.
Verified that no public OSS plugins use the abstraction either.
This is part of a bigger stack to clean up immutable js usage / managed table duplication and export performance speed
Reviewed By: jknoxville
Differential Revision: D29265565
fbshipit-source-id: dd6671f0b3af857db1a512c6658e1ff75c49358d
Summary:
Bumps [ws](https://github.com/websockets/ws) from 7.4.6 to 7.5.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/websockets/ws/releases">ws's releases</a>.</em></p>
<blockquote>
<h2>7.5.0</h2>
<h1>Features</h1>
<ul>
<li>Some errors now have a <code>code</code> property describing the specific type of error
that has occurred (<a href="https://github-redirect.dependabot.com/websockets/ws/issues/1901">https://github.com/facebook/flipper/issues/1901</a>).</li>
</ul>
<h1>Bug fixes</h1>
<ul>
<li>A close frame is now sent to the remote peer if an error (such as a data
framing error) occurs (8806aa9a).</li>
<li>The close code is now always 1006 if no close frame is received, even if the
connection is closed due to an error (8806aa9a).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="e3f0c1720a"><code>e3f0c17</code></a> [dist] 7.5.0</li>
<li><a href="1d3f4cbb0e"><code>1d3f4cb</code></a> [doc] Fix anchor tags for error codes</li>
<li><a href="6eea0d466b"><code>6eea0d4</code></a> [doc] Fix typo</li>
<li><a href="bb5d44b118"><code>bb5d44b</code></a> [doc] Sort error codes alphabetically</li>
<li><a href="c6e3080670"><code>c6e3080</code></a> [minor] Attach error codes to all receiver errors (<a href="https://github-redirect.dependabot.com/websockets/ws/issues/1901">https://github.com/facebook/flipper/issues/1901</a>)</li>
<li><a href="074e6a8be7"><code>074e6a8</code></a> [fix] Don't call <code>ws.terminate()</code> unconditionally in <code>duplex._destroy()</code></li>
<li><a href="8806aa9a83"><code>8806aa9</code></a> [fix] Close the connection cleanly when an error occurs</li>
<li><a href="05b8ccd639"><code>05b8ccd</code></a> [doc] Fix broken link (<a href="https://github-redirect.dependabot.com/websockets/ws/issues/1897">https://github.com/facebook/flipper/issues/1897</a>)</li>
<li><a href="03a707884c"><code>03a7078</code></a> [doc] Remove unsafe regex from code snippet</li>
<li><a href="7ee31157d7"><code>7ee3115</code></a> [doc] Add logo to coverage badge</li>
<li>Additional commits viewable in <a href="https://github.com/websockets/ws/compare/7.4.6...7.5.0">compare view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `dependabot rebase` will rebase this PR
- `dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `dependabot merge` will merge this PR after your CI passes on it
- `dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `dependabot cancel merge` will cancel a previously requested merge and block automerging
- `dependabot reopen` will reopen this PR if it is closed
- `dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
</details>
Pull Request resolved: https://github.com/facebook/flipper/pull/2487
Reviewed By: nikoant
Differential Revision: D29264222
Pulled By: mweststrate
fbshipit-source-id: 2c7eebd793c6ea9f28543a2808f387399043e59f
Summary: Changed unit test infra to wrap legacy plugins by default in Sandy, and adapted tests where needed.
Reviewed By: nikoant
Differential Revision: D29264660
fbshipit-source-id: fe7cbc8af826afac5f945103586b3cb9647e7fbd
Summary: Changed some imports, and again the Flipper initialisation broke. Refactored the store initialization to create nowhere module local constants, which prevents generally against module loading issues, making it possible to load all code first, and then intialise things through the `init()` method, which should make Flipper initialisation a lot more robust to changes
Reviewed By: passy
Differential Revision: D29233603
fbshipit-source-id: 322cb87cba23228b1d7a88634b7b3995e27cc277
Summary: Per title / see rest of the stack
Reviewed By: passy
Differential Revision: D29196711
fbshipit-source-id: 63ea52a07b61a11c1ad4013985c5b005045dcf0a
Summary:
This diff introduces loading classic Flipper plugins in a Sandy container. By wrapping plugins into Sandy we will be able to remove a lot of code / logic duplication related to state, queue processing, serialization etc. This will allow us to remove most or all of the complex plugin logic from the old system, only keeping onto the legacy components which have a lower maintenance burden. Until all plugins are Sandy.
This diff is not feature complete but only implements the core mechanisms for (persisted) state and communication.
Keyboard support, serialization, and rewiring tests etc will be added in next diff.
The feature is introduced behind GK flipper_use_sandy_plugin_wrapper to have kill switch.
Tests will be added later in this diff by redirection a part of the current mechanisms to wrapped plugins. (Will land the stack as a whole)
Reviewed By: passy
Differential Revision: D29165866
fbshipit-source-id: 57f84794a4a5f898bf765ce2de13cc759267fbc6
Summary: Changelog: The 'nativeplugins' on Android are no longer supported
Reviewed By: jknoxville
Differential Revision: D29163281
fbshipit-source-id: fb4032f240fc306608fe57479f3124d4e7a3400f
Summary: In support group telling users to merely "pull" seemed to be a bit too vague instruction.
Reviewed By: passy
Differential Revision: D29225726
fbshipit-source-id: 5c0db1b2d3afd2a398d28caf3438f2959e5d46f1
Summary: This is purely refactoring change. Before that we computed plugin lists in-place in PluginList component. Now we will be re-computing them as side effect and will keep computed lists in redux. This makes it easier to re-use plugin lists in other places outside of PluginList component, e.g. in the upcoming Marketplace UI.
Reviewed By: mweststrate
Differential Revision: D29161719
fbshipit-source-id: 5cb06d4d8a553aa856101c78b2311fbc078c6bd7
Summary:
Changelog: Fix links not always openening in the Browser
As reported in https://fb.workplace.com/groups/flippersupport/permalink/1154240895056567/, in some cases links would open inside Flipper itself, and as a result the user would be stick as he can't navigate away.
This happened only when a `Link` was being deconstructed from `Typography` by a module that was loaded before `Link.tsx`, which fixes `Typography.Link` to do that automatically. For example:
```
import {Typograph} from "antd"
const {Link} = Typography;
```
Addressed this issue by patching the antd package directly during build, rather than during application start.
Reviewed By: passy
Differential Revision: D29193899
fbshipit-source-id: b291018406e343c0f7de1d1d899924902159d8c7
Summary:
Includes most of the PRs currently open.
allow-large-files for antd
Reviewed By: mweststrate
Differential Revision: D29160385
fbshipit-source-id: b9e6d3b16a806cf615b7b0e24ba3395f3ed44822
Summary:
If port 8088 / 8089 are in use, devices will not be able to connect to Flipper. We have checks for this in place, however it turns out that users can miss them. Potentially this can be caused for mulltiple reasons:
1. The notification is shown fairly short (in my testing it disappeared sometimes in < 2 secs
2. The notification is shown outside of the Flipper area
3. Flipper might not have permissions to show notifs in the first place.
Changed the notification to show inside Flipper, not hide automatically, and added clearer instructions. Including mentioning the port number (since there are multiple)
Changelog: [Flipper] Provide clearer error if Flipper ports are already in use, making device connections impossible
Differential Revision: D29128014
fbshipit-source-id: 16d9b451aa84281744155bfa1042429911a7b774
Summary:
Concatenating strings is not a great idea for paths. This isn't actually Windows-specific (I think) but maybe more common there. If you have a space as part of your ADB path, you're in for a world of pain.
This addressed a couple of issues but I'm sure there are more when you use it for more detailed use cases.
Closes https://github.com/facebook/flipper/issues/2438
Reviewed By: mweststrate
Differential Revision: D29061367
fbshipit-source-id: 001e498ac42bd8df6e6852be9b42fb5f38379c2e
Summary: Since the functionality is now available as part of DataTable, the HoC doesn't seem to be needed as generic abstraction. it is used in handful places outside datatable / datalist, but those can be localized in the future or should datatable / datalist.
Reviewed By: fabiomassimo
Differential Revision: D28993836
fbshipit-source-id: 3e6da7c7b48348faa0c4f7281868196f5585a065
Summary: We don't need to show plugin-related details and button "open globalError" (which anyway doesn't work) when showing global notifications.
Reviewed By: passy
Differential Revision: D28900468
fbshipit-source-id: 54347ede4f1e4dbfb0e41be5c50374fda35c1223
Summary: Improved message a bit to make it clear that VPN/Lighthouse is required on both sides - computer and mobile device. Also it will now show login link in case user is not signed in yet, because login is also required for www cert exchange.
Reviewed By: passy
Differential Revision: D28899558
fbshipit-source-id: 89de776f602a9f27a2c068efd8e3f08c28ec5f57
Summary: SignInSheet and "dispatcher/user" are not used in public build, so it doesn't make sense to keep them on github.
Reviewed By: passy
Differential Revision: D28789384
fbshipit-source-id: aa1ab0fc70f2211260017be42762714b753ea877
Summary: Changelog: allow zooming Flipper window content in and out either using View menu or hotkeys (Cmd+Plus) and (Cmd+Minus)
Reviewed By: passy
Differential Revision: D28748567
fbshipit-source-id: a214c708cae2c82d04eb53fc879518a0106517de