Summary: Replaced all usages of FlexRow / FlexColumn to new Layout component
Reviewed By: mweststrate
Differential Revision: D28055698
fbshipit-source-id: ad50762b068c897e5c4c182ac2d575d7e3a5f166
Summary: Just small refactoring to extract / memoize some of components
Reviewed By: mweststrate
Differential Revision: D28055699
fbshipit-source-id: 3d689a4e41e3f3c4c4e2e8cc2887cb255b4c4dc2
Summary:
Trying to get ahead of dependabot by bumping a bunch of things at once
that are minor or patch level bumps.
Reviewed By: muraziz
Differential Revision: D28094201
fbshipit-source-id: b6b53ae2d582686201124b82fed4f436a60b3172
Summary:
Addressing code review feedback from previous 3 diffs.
* Don't return draft when using immer
* Move functions out of component to module level
* Make executeShell async and simplify callsites
* Add onStopMonitor to cleanup function
* Add uniform spacing by adding Layout.Container around titles
* Disable searchbar on both tables
* Use Toolbar
Reviewed By: mweststrate
Differential Revision: D28091565
fbshipit-source-id: 533d2491e6f48a9eaaa64b1a6cf76eea2e7189a5
Summary: Finishes off by converting the rest of the UI.
Reviewed By: mweststrate
Differential Revision: D28061468
fbshipit-source-id: 8d87d3344fe3937470e566d8c425efc97f38333c
Summary:
Half way through sandy conversion I ended up redoing the task scheduling in this plugin because it was sketchy and unreliable.
Previously, it was using setInterval to schedule a task every 500ms, which would query a lot of data from the device. The problem was that if these tasks took >500ms (which they did for me at least), you'd get overlapping ones, causing havoc.
Now it uses setTimeout instead, promisifies everything, and only ever schedules the next timeout when the current task has finished.
Also fixed a race condition where you could hit stop, but not actually stop the recurring tasks... and then there was no way to stop them because it was already "stopped".
Reviewed By: mweststrate
Differential Revision: D28061469
fbshipit-source-id: 2bb8aba7ddf37ba1fdbdc52c95ec258cae96f509
Summary:
Starts converting the plugin by moving to new model and switching some of the UI components.
No logic changes here, it's just shifting everything over.
Reviewed By: mweststrate
Differential Revision: D28028052
fbshipit-source-id: 7444eab77d9dba49261a70887ee26b8d120e97a6
Summary: This fixes an earlier reported issue with Messages plugin, if no column widths are set values can jump around per row
Reviewed By: passy
Differential Revision: D28090807
fbshipit-source-id: be124b94f507584cf177710816035cd280a5ef01
Summary:
4.10.2 had an fburl.com link in it when I should have used an fb.me link :( I'm sorry
cc mweststrate
Pull Request resolved: https://github.com/facebook/flipper/pull/2244
Reviewed By: passy
Differential Revision: D28054736
Pulled By: mweststrate
fbshipit-source-id: 0330f884e5d82cc669232aee3d8439b0f51240bd
Summary: I found a bug after migration to Sandy. It is now not possible to add queries to favorites. This diff fixes the issue.
Reviewed By: mweststrate
Differential Revision: D28066435
fbshipit-source-id: 129a62dab9521160f8957abba70e5c7a6e609839
Summary: The main change is the move to DataTable here.
Reviewed By: mweststrate
Differential Revision: D28006097
fbshipit-source-id: 7564276a1177a7835612db08857862cb81942bce
Summary: Some non-UI tests. Couldn't quite figure out how to make the renderer aware of changes in the old ManagedTable. Given that I've got a task for migrating, I didn't think it was worth digging into it more.
Reviewed By: mweststrate
Differential Revision: D28001651
fbshipit-source-id: 034b3d71bff2513c946b9f84525f3344b7879df9
Summary:
Protobuf based APIs are becoming more common (i.e. gRPC) but are difficult to inspect. Unlike plain text data formats (JSON), Protobuf calls transmit binary data requiring the format to be known ahead of time, making ad-hoc inspection impossible. This PR allows for those format definitions (messages in protobuf terminology) to be transmitted from the client to the network inspector plugin. These definitions are then imported into ProtobufJS which enables the binary data transmitted to be inspected as easily as JSON data.
See Retrofit PR in https://github.com/facebook/flipper/pull/2084
## Changelog
* Add ProtobufJS library to network plugin
* New `ProtobufFormatter` UI in `RequestDetails`
* `ProtobufDefinitionsRepository` to cache and load protobuf defintions
* `addProtobufDefinitions` call in the Android network plugin
Pull Request resolved: https://github.com/facebook/flipper/pull/2080
Test Plan: 
Reviewed By: mweststrate
Differential Revision: D27507451
Pulled By: passy
fbshipit-source-id: 586d891b74f2b17d28fe7a2a99074da755851f38
Summary:
Reverts D27764688 (7bd4f80c25) due to a bug with "Invalid hook call." being erroneously reported. We will upgrade again after that bug is resolved.
Changelog:
[Internal]
Reviewed By: fkgozali
Differential Revision: D27813660
fbshipit-source-id: 84a12f19cf1bb7e8aebef0da3ff6f7022c391d3e
Summary:
Layer selection is pretty easy to miss, as reported in for example: https://fb.workplace.com/groups/flippersupport/permalink/1098169193997071/
Moved the layer selection to the top of the view and gave it some highlighting + dynamic height. The section is no longer collapsible.
Changelog: [Layout] Make the layer selection more prominent
Reviewed By: priteshrnandgaonkar
Differential Revision: D27708650
fbshipit-source-id: c86a55c3a20794aee86e64b6766b2ca4dd6b563f
Summary:
This diff fixes some more perf bottlenecks in the layout inspector (see the diffs earlier in the stack for the total picture). Mostly:
1. Pass down stable refs from the root for callbacks and configuration
2. Remove the deep-equality check in the sidebar section rendering, which has a pretty significant constant overhead, especially if the selection didn't change
3. If the selection changes, the correct semantics is to reset the sidebar rather than trying to reconcile the elements. (A consequence of this is that Panel collapse state isn't preserved atm after changing selection, will address that in a later diff)
This reduces average render time for sidebar from ~20 to ~2 ms.
Reviewed By: priteshrnandgaonkar
Differential Revision: D27677353
fbshipit-source-id: ba183b7e3d778c0b3c8e7ca0d51535ce99a097ca
Summary: Sidebar extensions were unkeyed, which make them render inefficiently. I cleaned the api a bit here by making the extensions more idiomatic; they are now components rather then functions, so that they have their own render cycle, state, etc. They are memo-ed now as well, so that they don't have to re-render if the selected item doesn't change.
Reviewed By: nikoant
Differential Revision: D27685980
fbshipit-source-id: b133bc42061b3b8cf971792f5818810ecb80e3ea
Summary:
Changelog: [Layout] Addressed several performance issues in the layout plugin
This diff and a few of the next stuff fix some performance issues in the Layout plugin. This diff fixes an issue where computing the context menu will cause all rows to render at all times, make the responiveness of the plugin quite slugish.
The fix in this case is to build up the context menu lazily, and pass a stable ref to the function through the tree, rather than a new menu every time the root component renders.
The changes in this diff and the next ones in total reduces the time (in prod builds) to draw a frame from ~200ms to ~5ms.
Reviewed By: cekkaewnumchai
Differential Revision: D27685983
fbshipit-source-id: a48b2ce2cdd1db31bb13122924617cbc3b6c198a
Summary:
This diff moves the core of ElementsInspector to flipper-plugin and decouples it from legacy design system and Electron, without any significant improvements or API changes yet, which will follow later.
Colors and docs will be added later in this stack.
Reviewed By: passy
Differential Revision: D27660300
fbshipit-source-id: 96abfa3b3174fa852cf04ae119c23c3d629fee74
Summary:
Pull Request resolved: https://github.com/facebook/flipper/pull/2172
New script which runs "tsc" for all plugins, receives list of errors and then checks which plugins are affected. It works for shared libs too, e.g. if there is an error in a shared library, then all plugins dependant on it will be counted as affected. For convenience, script saves list of errors affecting each plugin to "tsc-errors.log" in plugin folder.
This script will be used for automatic type-checking plugins against current "stable" and "insiders" versions of Flipper.
An alternative to this implementation would be to simply run "tsc" for each plugin individually, but such implementation takes a lot of time (5+ sec per plugin) and so cannot be effectively used on diffs.
Reviewed By: mweststrate
Differential Revision: D27499765
fbshipit-source-id: fcbbfc94a13e6c7c5beff0c889a929f84c41b2dd
Summary: This is a guard to ensure all Flipper built-in packages are declared as peer dependencies. It also removes all of them from nested node_modules after installation to be 100% sure they always loaded from the root folder, because e.g. react can be still installed as a transitive dependency even it is not declared as dependency directly.
Reviewed By: passy
Differential Revision: D27040267
fbshipit-source-id: 1e315a6b280b36ab20778ee261aa386b51d9f964
Summary:
Link plugin shared libraries to the "plugins/node_modules" dir so they can be used as peer dependencies by both public and fb-internal plugins.
```
plugins
- node_modules
-- fb_shared_lib (symlink pointing to "plugins/fb/fb_shared_lib")
-- public_shared_lib (symlink pointing to "plugins/public/public_shared_lib")
- fb
-- fb_shared_lib
-- fb_plugin (can now use both fb_shared_lib and public_shared_lib as peer dependencies)
- public
-- public_shared_lib
-- public_plugin (can now use both public_shared_lib and fb_shared_lib (optionally if it's an fb-internal repo) as peer dependencies)
```
Reviewed By: passy
Differential Revision: D27034936
fbshipit-source-id: 68ee5312060ff57649ae061dd7dd14f8beb6d4a1
Summary:
Here I'm changing plugin repository structure to allow re-using of shared packages between both public and fb-internal plugins, and to ensure that public plugins has their own yarn.lock as this will be required to implement reproducible jobs checking plugin compatibility with released flipper versions.
Please note that there are a lot of moved files in this diff, make sure to click "Expand all" to see all that actually changed (there are not much of them actually).
New proposed structure for plugin packages:
```
- root
- node_modules - modules included into Flipper: flipper, flipper-plugin, react, antd, emotion
-- plugins
--- node_modules - modules used by both public and fb-internal plugins (shared libs will be linked here, see D27034936)
--- public
---- node_modules - modules used by public plugins
---- pluginA
----- node_modules - modules used by plugin A exclusively
---- pluginB
----- node_modules - modules used by plugin B exclusively
--- fb
---- node_modules - modules used by fb-internal plugins
---- pluginC
----- node_modules - modules used by plugin C exclusively
---- pluginD
----- node_modules - modules used by plugin D exclusively
```
I've moved all public plugins under dir "plugins/public" and excluded them from root yarn workspaces. Instead, they will have their own yarn workspaces config and yarn.lock and they will use flipper modules as peer dependencies.
Reviewed By: mweststrate
Differential Revision: D27034108
fbshipit-source-id: c2310e3c5bfe7526033f51b46c0ae40199fd7586
Summary: Made datatypes used by DataInspector more strictly typed (in the hope to be able to drop some, but all are still in use, although the distinction between different elements isn't always clear).
Reviewed By: passy
Differential Revision: D27266825
fbshipit-source-id: 6a1c74b0ae3daff6299ca598b18a205d17c42e22
Summary:
Changelog: Logs plugin will now automatically truncate long lines
...for a more pleasant experience where long messages don't distort things to much. (Made the buttons purple in a next diff for better contrast)
Reviewed By: passy
Differential Revision: D27395517
fbshipit-source-id: 733cd6329b979453ef3b428693be8c47c37adf4d
Summary:
Based on issue https://github.com/facebook/flipper/issues/1509 I needed a custom port for the metro server to pass to flipper.
## Changelog
introduce `METRO_SERVER_PORT` env variable to be able to customize default 8081 port on startup.
Pull Request resolved: https://github.com/facebook/flipper/pull/2050
Test Plan:
Tested with a locally built linux desktop app, this seems to work OK pour hermes debugging & RN logging.
React DevTools don't seem to find the running app, maybe there's a mapping to handle there too ?
Reviewed By: jknoxville
Differential Revision: D27339006
Pulled By: passy
fbshipit-source-id: b1700c4fe73f14bf4617e23583b2954012e0a5aa
Summary:
Changelog: Logs plugin now supports physical iOS devices
As reported in https://github.com/facebook/flipper/issues/262 and linked papercut.
This diff adds support for iOS device logs through idb. Since idb doesn't respect `--json` flag at the moment, we perform the parsing in Flipper itself.
Reviewed By: passy
Differential Revision: D27346262
fbshipit-source-id: 3b314716f48bb9a7fe709370303396a51893359c
Summary:
Bumping everything that's just a patch version behind or safe-looking minor change.
Just hoping to get ahead of dependabot's next run.
Reviewed By: fabiomassimo
Differential Revision: D27367567
fbshipit-source-id: 1bf8bad02e5a9f07f5982466254f9906581230cf
Summary: Just trying to get ahead of dependabot and bump some easy dependencies all at once.
Reviewed By: fabiomassimo
Differential Revision: D27326687
fbshipit-source-id: 0c724c8e3a688aa9777945fcd46061284fd77969
Summary:
Changelog: Fixed an issue where Flipper would crash when decoding large partial requests.
The current processing of partial requests assumes that the proviced base64 string is always an utf-8 string, which is incorrect as it might contain binary data as well. This causes `atob` build in to throw errors when trying to decode binary base64 strings with the following exception:
{F538782963}
However, what is worse, if those strings were larger than ~2 mb, it would completely crash Electron rather than on the JS level, with reports like:
```
Crashed Thread: 0 CrRendererMain Dispatch queue: com.apple.main-thread
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: EXC_I386_GPFLT
Exception Note: EXC_CORPSE_NOTIFY
Termination Signal: Segmentation fault: 11
Termination Reason: Namespace SIGNAL, Code 0xb
Terminating Process: exc handler [85268]
Thread 0 Crashed:: CrRendererMain Dispatch queue: com.apple.main-thread
0 com.github.Electron.framework 0x000000011155b16f v8::internal::SetupIsolateDelegate::SetupHeap(v8::internal::Heap*) + 22324575
1 com.github.Electron.framework 0x000000011155e811 v8::internal::SetupIsolateDelegate::SetupHeap(v8::internal::Heap*) + 22338561
2 com.github.Electron.framework 0x00000001117e2e62 v8::internal::SetupIsolateDelegate::SetupHeap(v8::internal::Heap*) + 24978002
3 com.github.Electron.framework 0x000000010fa32660 v8::internal::ClassScope::ResolvePrivateNamesPartially() + 14944
4 com.github.Electron.framework 0x000000010fa322b5 v8::internal::ClassScope::ResolvePrivateNamesPartially() + 14005
5 com.github.Electron.framework 0x000000010fa31933 v8::internal::ClassScope::ResolvePrivateNamesPartially() + 11571
6 com.github.Electron.framework 0x000000011007ef58 v8::internal::SetupIsolateDelegate::SetupHeap(v8::internal::Heap*) + 451400
```
Reproduced this JS issue by lowering the `MAX_BODY_SIZE_IN_BYTES` in `NetworkFlipperPlugin.java` to 10KB, which causes all requests to be processed as partials.
Reproducing the the Electron crash is a lot harder, as it requires a surface that makes large, binary requests (more than a few mb), that is still intercepted by the Network layer. The best example I could find is sending large pictures or videos through a messenger for android chat. In that case it is still hard to produce due to caching though.
Fun fact, you can crash your own flipper and get the above crash by running this command:
`btoa(require("fs").readFileSync("/Users/mweststrate/Desktop/Screen Recording 2021-03-24 at 16.08.27 crop.mov", "binary"))`, where the provided file must be a few mb's large (this one is 10).
A result of fixing this issue, is that images that were send as partials can now be correctly previewed in the Network plugin again.
Reviewed By: jknoxville
Differential Revision: D27302961
fbshipit-source-id: 1ac86840f7268062bb59c789f3904537df3c51fa
Summary:
Not fatal errors and actually very, very high-firing. Something about
the serialisation here is wrong so I can't tell the exactly number right now.
Reviewed By: priteshrnandgaonkar
Differential Revision: D27117067
fbshipit-source-id: d9ce8c736ca2228acedeadeb2e7ee6744d766265
Summary: This diffs refactors tsc projects structure and structure of our custom typings to allow producing typescript typings for "flipper" package. In next diffs I'm going to use the produced typings to check compatibility of plugins with certain versions of Flipper, e.g. to check whether plugin is compatible with current "stable" and "insiders" version.
Reviewed By: passy
Differential Revision: D26997158
fbshipit-source-id: a0416c7139bf08ec9d175730da4c4c2a8768eeb7
Summary:
Use Logs2 plugin now as the default logs plugin (by overwriting it).
See the rest of this stack
Changelog: The device logs plugin has been fully rewritten. It is faster and more reponsive, formats urls and json, and supports line wrapping and text selection. Beyond that it is now possible to sort and filter on all columns and pause and resume the log stream.
Reviewed By: nikoant
Differential Revision: D27048528
fbshipit-source-id: e18386fec6846ac3568f33a3578f4742213ecaca
Summary:
This diff converts the CrashReporter plugin to Sandy. The main driver is that it allows us to fix the connection management of logs in a next diff.
There are few changes to highlight:
* A bunch of the old unit tests are removed, as they primarily verified that persistedState abstraction works, a concept that doesn't exist anymore with Sandy (as a result all the logic in error handling and crash reporter plugin has become a lot more trivial as well)
* Added additional unit tests to verify that the integration with notifications from Sandy, and the integration of crashes in combination with CrashReporter plugin works (this wasn't the case before)
* Plugin errors were always suppressed in production builds of Flipper. However, that makes error reporting pretty pointless in the first place, so enabled it by default, but made it a setting in case this results in too many errors suddenly.
* The integration with clicking OS crash notification -> bringing the user to a sensible place _doesn't_ work, but it didn't work before this diff either, so will address that later
* This doesn't upgrade the Crash reporter UI to sandy yet, will do that later in a separate diff
Changelog: Crash reporter will now report errors triggered from the device / client plugins by default. This can be disabled in settings.
Reviewed By: priteshrnandgaonkar
Differential Revision: D27044507
fbshipit-source-id: 8233798f5cce668d61460c948c24bdf92ed7c834
Summary: After calling "bundle-all-plugins" locally, "yarn test" is failing with obscure message, because some tests are trying to import built bundles instead of "index.tsx". This diff fixes that.
Reviewed By: passy
Differential Revision: D26986246
fbshipit-source-id: cffe988dc642e2c5d2b2028581cd162350186e0c
Summary:
It is not currently possible to create mock routes from imported network logs. This PR will provide that functionality.
See this issue for more details: https://github.com/facebook/flipper/issues/1988
## Changelog
Network plugin - create mocks from imported network logs
Pull Request resolved: https://github.com/facebook/flipper/pull/2040
Test Plan:
Use sample app to create network activity
Export network activity
Import network activity
Create mocks from imported network activity
Verify that mocks work using sample app
Reviewed By: mweststrate
Differential Revision: D26947187
Pulled By: passy
fbshipit-source-id: 5e4e0197c49bb7a8227a70e574613381815e6d30
Summary:
Device plugins won't work for DummyDevice type as the device id is a fake one for this.
This diff updates the "supportedDevices" for the plugins.
Reviewed By: mweststrate
Differential Revision: D26944601
fbshipit-source-id: a29acc288f8f0c564f52db02914e7b0491b211d2
Summary:
Mock routes may contain quite a bit of data for header values and response bodies. Currently, to turn off a mock a user must delete the mock and then go through the process of creating it when needed again. This change will allow a user to temporarily disable a mock without deleting it.
A checkbox on the Routes list is used to enable/disable mocks. As shown in this screenshot:

## Changelog
Network Plugin - disable/enable mock routes
Pull Request resolved: https://github.com/facebook/flipper/pull/1969
Test Plan:
Create mocks using sample app
Verify that mocks are working as expected
Disable the mocks
Verify that the client has been updated with mocks (minus the disabled ones) user Flipper Messages plugin
Use the sample app to send the disabled requests again and verify that they are not mocked
Reviewed By: mweststrate
Differential Revision: D26888815
Pulled By: passy
fbshipit-source-id: cb8a05a27dd69ba4d2b60085a077efe795a99a7c
Summary: Fixed an error which happens on second and subsequent device connection to Flipper
Reviewed By: passy
Differential Revision: D26829255
fbshipit-source-id: 17eb603647626a2168e330ec67f4a89783219356
Summary: When exploratory testing Flipper, I generally see quite some React key warnings. So it seems that plugin devs often miss them. This diff will configure linting more aggressively to address that (it's not fool proof, but will find the most common cases).
Reviewed By: nikoant
Differential Revision: D26722707
fbshipit-source-id: e0d2b56de2422e1147f52c8e9150d00c7ee64bd2
Summary:
Fix problems with row highlighting on mocks route list. When selecting a row, the highlight would sometimes be on the wrong row. Also, when adding routes, the routes would sometimes get added in the middle of the list instead of at the end.
These problems were caused by incorrectly referencing route rows in code. Sometimes index was used and other times the key was used. Fixed by consistently using key.
This fixes the problem described in issue https://github.com/facebook/flipper/issues/1733
## Changelog
Network Plugin - fix problems with row highlighting on mocks route list
Pull Request resolved: https://github.com/facebook/flipper/pull/1917
Test Plan:
Start with no mocks | No rows should be shown | TRUE
Add a single mock | First (and only row should be highlighted) | TRUE
Delete mock | No rows should be shown | TRUE
Add single mockAdd another mock | 2nd row should be highlighted | TRUE
Add another mock | 3rd row should be highlighted | TRUE
Add 2 more mocks and assign number to each row (5 total) | Last row should be highlighted | TRUE
Select 1st row | 1st row should be highlighted | TRUE
Delete 1st row | 1st row should be highlighed | TRUE
Select last row | last row should be highlighted | TRUE
Delete last row | last row should be deleted and new last row should be highlighted | TRUE
Highlight a middle row (row 3) | middle row should be highlighted | TRUE
Delete middle row | middle row should be deleted and last row should be in its place and should be highlighted | TRUE
Reviewed By: passy
Differential Revision: D26604455
Pulled By: mweststrate
fbshipit-source-id: f29690244e32b364983089541718f4bc75154dd1
Summary:
Bumps [dateformat](https://github.com/felixge/node-dateformat) from 3.0.3 to 4.5.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/felixge/node-dateformat/releases">dateformat's releases</a>.</em></p>
<blockquote>
<h2>4.5.1</h2>
<ul>
<li>Fixed an issue with the <code>WW</code> mask not working</li>
</ul>
<h2>4.5.0</h2>
<ul>
<li>Added <code>WW</code> mask for week with padding (<a href="https://github-redirect.dependabot.com/felixge/node-dateformat/pull/156">details</a>)</li>
</ul>
<h2>4.4.2</h2>
<ul>
<li>Fixed an issue with <code>DDD</code> and <code>DDDD</code> masks sometimes not working (<a href="https://github-redirect.dependabot.com/felixge/node-dateformat/pull/158">details</a>)</li>
</ul>
<h2>4.4.1</h2>
<ul>
<li>Update <code>DDD</code> mask to use <code>Ysd</code>, <code>Tdy</code> and <code>Tmw</code> (<a href="https://github-redirect.dependabot.com/felixge/node-dateformat/pull/155">details</a>)</li>
</ul>
<h2>4.4.0</h2>
<ul>
<li>Added <code>DDD</code> and <code>DDDD</code> Mask for <code>Today</code>, <code>Tomorrow</code> and <code>Yesterday</code> (<a href="https://github-redirect.dependabot.com/felixge/node-dateformat/pull/71">details</a>)</li>
</ul>
<h2>4.3.1</h2>
<ul>
<li>Added <code>p</code> Mask for Timezone Offset e.g. <code>+02:00</code> (<a href="https://github-redirect.dependabot.com/felixge/node-dateformat/pull/149">details</a>)</li>
</ul>
<h2>4.2.2</h2>
<ul>
<li>Fix Rounding Issue with L Mask (<a href="https://github-redirect.dependabot.com/felixge/node-dateformat/pull/147">details</a>)</li>
</ul>
<h2>4.2.1</h2>
<ul>
<li>Reduce size of package (<a href="https://github-redirect.dependabot.com/felixge/node-dateformat/pull/142">details</a>)</li>
</ul>
<h2>4.2.0</h2>
<ul>
<li>Fixed Invalid '1970-01-01' Formatting (<a href="https://github-redirect.dependabot.com/felixge/node-dateformat/pull/143">details</a>)</li>
</ul>
<h2>4.1.0</h2>
<ul>
<li>Added Padding Short Date Mask</li>
</ul>
<h2>4.0.2</h2>
<ul>
<li>Fixed an issue with old years not having padding. e.g. 0009 was formatting as 9.</li>
</ul>
<h2>Performance Improvements</h2>
<p>This release brings significant performance improvements to dateformat.<br />
Some common operations are now 6 times faster than before!!!</p>
<p>There are no breaking changes in this release.</p>
<p><img src="https://user-images.githubusercontent.com/53957795/100558584-e0921f80-3313-11eb-984a-ac2995bc01ee.png" alt="image" /></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a href="https://github.com/felixge/node-dateformat/commits/v4.5.1">compare view</a></li>
</ul>
</details>
<details>
<summary>Maintainer changes</summary>
<p>This version was pushed to npm by <a href="https://www.npmjs.com/~chase-manning">chase-manning</a>, a new releaser for dateformat since your current version.</p>
</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/1957
Reviewed By: mweststrate
Differential Revision: D26605958
Pulled By: passy
fbshipit-source-id: a794b90b7b183177264ed8d42c47ebff8b98e330