Commit Graph
2858 Commits
Author SHA1 Message Date
Nathan HunzakerandPaul O’Shannessy 88e29060cd Use proper render method in static markup event listener test (#7652)
(cherry picked from commit 40c90a6499)
2016-10-03 17:33:03 -07:00
Paul O’Shannessy a7b81a60c0 Flow: bool -> boolean (#7650)
(cherry picked from commit 7b247f3609)
2016-10-03 17:33:03 -07:00
Christopher ChedeauandPaul O’Shannessy db985af3c3 Type ReactCurrentOwner (#7648)
Simpler than ReactOwner :)
(cherry picked from commit 2559030c34)
2016-10-03 17:33:03 -07:00
Christopher ChedeauandPaul O’Shannessy 2c16a6bb9d Convert CallbackQueue to a class (#7647)
It turns out that flow cannot type `this` with a function constructor + prototype overrides. Turning it to a class makes flow happy and has minimal impact on the output.

In open source, we already use the loose version of the class transform and internally we have one that's outputting even less code if you have `@preventMunge` in the header.

See discussion in https://www.facebook.com/groups/2003630259862046/permalink/2098480820376989/
(cherry picked from commit a70acb37d9)
2016-10-03 17:33:03 -07:00
Christopher ChedeauandPaul O’Shannessy 206bc2a330 Type ReactRef (#7600)
Nothing out of the ordinary on this one.
(cherry picked from commit 31dd6944d3)
2016-10-03 17:33:02 -07:00
Flarnie MarchanandPaul O’Shannessy 2c00d750c2 Merge pull request #7644 from flarnie/flowifyEventPluginRegistry
Type EventPluginRegistry
(cherry picked from commit 9a88e593ed)
2016-10-03 17:33:02 -07:00
Christopher ChedeauandPaul O’Shannessy ae79e023d5 Generate SimpleEventPlugin data structures at runtime (#7616)
We used to copy and paste the same big blob many times in order for it to work with keyOf which is no longer a constraint. This pull request takes a list of all the events as string and generate those data structures at runtime.

It reduces the size of React by 1k post gzip and flow is able to extract the structure out of it :)
(cherry picked from commit 1229a238c4)
2016-10-03 17:33:02 -07:00
Ben AlpertandPaul O’Shannessy bef7ae4800 Merge pull request #7634 from spicyj/flowfix
Small flow fixes
(cherry picked from commit 0c62d121c5)
2016-10-03 17:33:02 -07:00
Nathan HunzakerandPaul O’Shannessy 85de53c450 Remove String.prototype.split polyfill warning (#7629)
(cherry picked from commit 5c47920384)
2016-10-03 17:31:41 -07:00
Christoph PojerandPaul O’Shannessy 96d39380fa Merge pull request #7625 from vjeux/jest15
Update to jest 15
(cherry picked from commit 1bd55c8cbd)
2016-10-03 17:31:41 -07:00
Christopher ChedeauandPaul O’Shannessy d5a769ec89 Kill keyOf :) (#7615)
(cherry picked from commit f7076b7759)
2016-10-03 17:31:36 -07:00
Christopher ChedeauandPaul O’Shannessy 869d26c3b4 Remove keyMirror in TopLevelTypes (#7597)
This is the last callsite of keyMirror! It removes 0.5k gzipped :)

The only trick with this one is that ReactTestUtils actually iterates over the list of all the events. Instead of duplicating the logic, I used the $Enum feature of flow that lets us statically extract out the type from the dynamic value. Inside of react-dom we're no longer requiring the file directly so it doesn't bloat the file size, and we still get to have static typing, best of both worlds!
(cherry picked from commit 2f9a9dc4c5)
2016-10-03 17:31:00 -07:00
Christopher ChedeauandPaul O’Shannessy c3f2c6b19d Remove keyMirror in PropagationPhases (#7596)
See rationale in https://www.facebook.com/groups/2003630259862046/permalink/2097088000516271/
(cherry picked from commit 738a9e3ef2)
2016-10-03 16:27:35 -07:00
Paul O’Shannessy 465d35a78a Cleanup ReactErrorUtils (#7610)
This cleans up the Flow annotations and brings the implementations in line.
(cherry picked from commit 395888435b)
2016-10-03 16:27:35 -07:00
Christopher ChedeauandPaul O’Shannessy 4b7f7b371b Type Transaction (#7581)
This one is interesting because we have transaction objects being passed around everywhere in the codebase but there's actually no Transaction class. It's a "mixin" that comes to life by being Object.assigned to the prototype of a real "class" (before class was cool!). Therefore, we can't just say `var Transaction = require('Transaction'); (transaction: Transaction) => { }` because it would be the object that contains a mixin and not an instance of a transaction.

The trick I use is to export `TransactionType` and alias it to `Transaction` in the file as it doesn't actually require transaction. In case they do, we'll figure it out, but in the few files I looked at, it doesn't seem to be the case.

For the perform function, it actually typechecks pretty well!
(cherry picked from commit a3e576e1bb)
2016-10-03 16:27:34 -07:00
Christopher ChedeauandPaul O’Shannessy 0dd4ff1bc8 Remove the Mixin layer of indirection on ReactCompositeComponent (#7599)
As mentioned in https://github.com/facebook/react/pull/7581#issuecomment-242952042 we can remove the Mixin layer of indirection as it only exports a Mixin and I find it confusing.
(cherry picked from commit dd0c65c6aa)
2016-10-03 16:27:34 -07:00
Christopher ChedeauandPaul O’Shannessy 577818e419 Type PooledClass (#7578)
This one was really interesting to type as it's doing a lot of unusual JavaScript. Fortunately flow is now pretty kick ass and I've been able to mostly type it. The only missing piece is that it won't check the constructor arguments.

If you are a fb employee, you can follow the discussion here: https://www.facebook.com/groups/flowtype/permalink/1132359430146004/
(cherry picked from commit 19b8eadb24)
2016-10-03 16:27:34 -07:00
Christopher ChedeauandPaul O’Shannessy 2589ed586d Type ReactOwner (#7587)
Incrementally type ReactInstance by adding the types of attach/detachRef.

I moved isValidOwner as a function inside of the file since it's never used externally.
(cherry picked from commit fa9869b5a0)
2016-10-03 16:27:34 -07:00
Christopher ChedeauandPaul O’Shannessy b9ce809aaf Type ReactMultiChildUpdateTypes (#7589)
As mentioned in https://www.facebook.com/groups/2003630259862046/permalink/2097088000516271/ I'm going to kill this instance of keyMirror and use a plain string instead with a type union.

The current type union is unused right now but when I type ReactMultiChild I will use it.
(cherry picked from commit c9e03f0a85)
2016-10-03 16:27:34 -07:00
Christopher ChedeauandPaul O’Shannessy dd01e016a6 Remove keyMirror in SpecPolicy (#7590)
As discussed in my RFC: https://www.facebook.com/groups/2003630259862046/permalink/2097088000516271/
(cherry picked from commit e3b2c6e650)
2016-10-03 16:27:33 -07:00
Christopher ChedeauandPaul O’Shannessy 329b107606 Remove keyMirror in ComponentLifeCycle (#7591)
See rationale in https://www.facebook.com/groups/2003630259862046/permalink/2097088000516271/
(cherry picked from commit a35387c030)
2016-10-03 16:27:33 -07:00
Christopher ChedeauandPaul O’Shannessy fb7b8f201f Remove keyMirror in ReactPropTypeLocations (#7592)
This one involves a bit more work as I added "phantom" flow types to a bunch of places where the type is a ReactPropTypeLocations even though those files are not `@flow` yet.

A good side effect is that `ReactPropTypeLocationNames` keys are now correctly typed, this means that they cannot go out of sync without breaking flow :)
(cherry picked from commit 84084153ed)
2016-10-03 16:27:33 -07:00
Christopher ChedeauandPaul O’Shannessy 74da40520c Type ReactDebugTool (#7586)
Flow doesn't really support the concept of variables that are non-null but only inside of a `__DEV__` block. There's an internal post about it ( https://www.facebook.com/groups/flowtype/permalink/1132437726804841/ ) and the conclusion is that we should force it to be non-null and trust the developer to put the proper DEV checks in place.
(cherry picked from commit 0d927844fb)
2016-10-03 16:27:33 -07:00
Christopher ChedeauandPaul O’Shannessy f5f0256d82 Type ReactPerf (#7585)
We need to export FlushHistory type and I submitted a PR on flow to fix the type of console.table which is too restrictive.

I'm already starting to see the benefits of flow, I can look at random variables in the code and flow knows what shape the objects are! It's really useful to try and understand what's going on :)
(cherry picked from commit 2fb5eae372)
2016-10-03 16:27:33 -07:00
Christopher ChedeauandPaul O’Shannessy 25bdc55fb8 Type ReactDebugTool (#7576)
(cherry picked from commit c086e5f94e)
2016-10-03 16:27:33 -07:00
Christopher ChedeauandPaul O’Shannessy f5f1c749b6 Type ReactInvalidSetStateWarningHook (#7572)
(cherry picked from commit 09887e0311)
2016-10-03 16:27:32 -07:00
Christopher ChedeauandPaul O’Shannessy 951b243d17 Type ReactChildrenMutationWarningHook (#7571)
(cherry picked from commit e2ddbac35e)
2016-10-03 16:27:32 -07:00
Christopher ChedeauandPaul O’Shannessy a9b2d841f7 Remove unneeded declare (#7570)
It turns out that we don't need it, flow is smart enough to realize that the function is declared in the two branches :)
(cherry picked from commit b977cf13c4)
2016-10-03 16:27:32 -07:00
Christopher ChedeauandPaul O’Shannessy 58d6f4fac6 Type ReactComponentEnvironment (#7566)
(cherry picked from commit f784a2d50a)
2016-10-03 16:27:32 -07:00
Christopher ChedeauandPaul O’Shannessy 03846d6916 Fix lint errors (#7568)
In Type ReactComponentTreeHook #7504, I merged even though travis didn't report green (travis for all the fb repos has been backlogged like crazy since this morning) by manually doing `npm test` and `npm run flow` but I didn't ensure that lint was all green.

@millermedeiros pinged me about it so here's a quick fix
(cherry picked from commit 66e77f696a)
2016-10-03 16:27:32 -07:00
Christopher ChedeauandPaul O’Shannessy 774a94b6c2 Type ReactComponentTreeHook (#7504)
For this one, I wanted to type a non-trivial piece of the codebase and ran into the fact that we do not have types for ReactElement nor ReactInstance, so I had to create them.

I'll add comments inline
(cherry picked from commit ea494a2c10)
2016-10-03 16:27:32 -07:00
Christopher ChedeauandPaul O’Shannessy 283dbc30ee Type ReactPropTypesSecret (#7501)
(cherry picked from commit 563f3bbab4)
2016-10-03 16:27:32 -07:00
Christopher ChedeauandPaul O’Shannessy f4374bd168 Type ReactElementSymbol (#7564)
(cherry picked from commit a72a156f58)
2016-10-03 16:27:31 -07:00
Christopher ChedeauandPaul O’Shannessy 87958ea037 Type ReactErrorUtils (#7565)
(cherry picked from commit 03e8c0eb75)
2016-10-03 16:27:31 -07:00
Christopher ChedeauandPaul O’Shannessy 52235eadfd Type canDefineProperty (#7500)
(cherry picked from commit 18003578b1)
2016-10-03 16:27:31 -07:00
Christopher ChedeauandPaul O’Shannessy cb963b09ab Type ReactPropTypeLocations (#7502)
(cherry picked from commit ad3c65186e)
2016-10-03 16:27:31 -07:00
Christopher ChedeauandPaul O’Shannessy 1fb75eaa9e Type ReactPropTypeLocationNames (#7503)
(cherry picked from commit 7f64baad78)
2016-10-03 16:27:31 -07:00
Christopher ChedeauandPaul O’Shannessy a71a787038 Update flow to 0.31 (#7557)
(cherry picked from commit 08614db025)
2016-10-03 16:27:31 -07:00
Dan AbramovandPaul O’Shannessy cbc450860e Show React events in the timeline when ReactPerf is active (#7549)
* Show React events in the timeline when ReactPerf is active

This currently only seems to work on Chrome.

* Address Chrome issue

(cherry picked from commit 0a248ee7b9)
2016-10-03 16:27:30 -07:00
Sebastian MarkbågeandPaul O’Shannessy ecdc185deb Use aliasify everywhere instead of browserify-global-shim (#7476)
I already had to aliasify to have better control over the requires
so we might as well do it everywhere for consistency.

This probably makes it easier to rebase the rollup work too
because aliases seems to be how you solve this in that world.
(cherry picked from commit c8f7215b20)
2016-10-03 16:23:23 -07:00
Sebastian MarkbågeandPaul O’Shannessy cc2e5cc3d7 Require the isomorphic React instead of internals from renderers (#7473)
This is needed for flat builds. It also lets us get rid of a bunch
of special cases in the build scripts.

It also allow us to just copy the source files into React Native
instead of having to build first to resolve the special cases.
(cherry picked from commit 1c5a639c37)
2016-10-03 16:23:16 -07:00
Sebastian MarkbågeandPaul O’Shannessy 5c2a88a9a1 Build React DOM Fiber package (#7173)
This builds a `react-dom-fiber.js` bundle which exposes ReactDOMFiber.
This allows early experiments with the new Fiber reconciler.

I also expose it in the npm package through `react-dom/fiber`.
(cherry picked from commit f7e0db9a18)
2016-10-03 16:18:51 -07:00
Sebastian MarkbågeandPaul O’Shannessy 5bc9daa125 Build renderers into their individual npm packages (#7168)
This copies modules into three separate packages instead of
putting it all in React.

The overlap in shared and between renderers gets duplicated.

This allows the isomorphic package to stay minimal. It can also
be used as a direct dependency without much risk.

This also allow us to ship versions to each renderer independently
and we can ship renderers without updating the main react package
dependency.
(cherry picked from commit 0f004efce2)
2016-10-03 16:18:46 -07:00
Sebastian MarkbågeandPaul O’Shannessy 21a4e7a826 Mock ReactDOM for Fiber Tests (#7206)
We currently write all our tests against the DOM implementation.
I need a way to run the Fiber tests against it. But I don't want
to take on any package dependencies on Fiber modules yet.

There's a problem with jest right now where you can't globally
mock modules that already exist. So I have to add a global call
to jest.mock.

Luckily we already have a way to test the useCreateElement paths
using a feature flag. I won't activate this flag in travis until
it passes, but the idea is to run all three variants in travis.

I'm not sure that invoking rAF and rIC synchronously is the best
way to test this since it doesn't capture the backwards
compatibility aspect. I.e. the fact that people might be relying
on the synchronous nature in real apps too. It's a start.

Ideally, jest would have these built-in.
(cherry picked from commit c06a68a10b)
2016-10-03 16:08:28 -07:00
Sebastian MarkbågeandPaul O’Shannessy 8426fafe90 Fix trailing build issues (#7450)
Use relative path for addons UMD shim module

Use explicit top level wrapper marker for top level elements
(cherry picked from commit 34c4474472)
2016-10-03 16:08:27 -07:00
Sebastian MarkbågeandPaul O’Shannessy 7ae3bbee25 Bundle DOM renderers into their individual UMD bundles (#7164)
* Cut out isomorphic dependencies from the renderers

These files reaches into isomorphic files.

The ReactElement functions are exposed on the React object anyway
so I can just use those instead.

I also found some files that are not shared that should be in
renderers shared.

* Found a few more shared dependencies

renderSubtreeIntoContainer is only used by the DOM renderer.
It's not an addon.

ReactClass isn't needed as a dependency since injection doesn't
happen anymore.

* Use a shim file to load addons' dependencies on DOM

By replacing this intermediate file we can do the lazy loading
without needing any lazy requires. This set up works with ES
modules.

We could also replace the globalShim thing with aliased files
instead for consistency.

* Bundle DOM renderers into their individual UMD bundles

Instead of exposing the entire DOM renderer on the react.js
package, I only expose CurrentOwner and ComponentTreeDevtool which
are currently the only two modules that share __state__ with the
renderers.

Then I package each renderer in its own package. That could allow
us to drop more server dependencies from the client package. It
will also allow us to ship fiber as a separate renderer.

Unminified DEV            after     before
react.js                  123kb     696kb
react-with-addons.js      227kb     774kb
react-dom.js              668kb     1kb
react-dom-server.js       638kb     1kb

Minified PROD             after     before
react.min.js               24kb     154kb
react-with-addons.min.js   37kb     166kb
react-dom.min.js          149kb     1kb
react-dom-server.min.js   144kb     1kb

The total size for react.min.js + react-dom.min.js is +19kb larger
because of the overlap between them right now. I'd like to see
what an optimizing compiler can do to this. Some of that is fbjs
stuff. There shouldn't need to be that much overlap so that's
something we can hunt. We should keep isomorphic absolutely
minimal so there's no reason for other React clones not to use it.
There will be less overlap with Fiber.

However, another strategy that we could do is package the
isomorphic package into each renderer bundle and conditionally
initialize it if it hasn't already been initialized. That way
you only pay an overlap tax when there are two renderers on the
page but not without it. It's also easier to just pull in one
package. The downside is the versioning stuff that the separate
npm package would solve. That applies to CDNs as well.

ReactWithAddons is a bit weird because it is packaged into the
isomorphic package but has a bunch of DOM dependencies. So we have
to load them lazily since the DOM package gets initialized after.

(cherry picked from commit 8ef00dbb7d)
2016-10-03 16:08:27 -07:00
B.OrlovandPaul O’Shannessy bada298857 Fix batchedUpdates return value (#7444)
(cherry picked from commit 7d57c1f0c1)
2016-10-03 16:08:27 -07:00
Sebastian MarkbågeandPaul O’Shannessy 5a540f778a Merge pull request #7248 from sebmarkbage/fibercleanup
[Fiber] Various minor tweaks and a few big ones
(cherry picked from commit a8c8191264)
2016-10-03 16:08:27 -07:00
Cheng LouandPaul O’Shannessy bed4c0595c PropTypes: distinguish nullable from optional object field (#7291)
* PropTypes: distinguish nullable from optional object field

This gives a more precise message (no type semantics change) to the case of passing a field in an object, but whose value is `null`:

Before:

```js
propTypes: {
  foo: React.PropTypes.number.isRequired
}
```

Would scream "Required prop `foo` was not specified in `MyComp`".

Now it'll be "Required prop `foo` was specified in `MyComp`, but its value is `null`.".

Works as expected in nested objects.

This fixes the issue of a component transitively passing a `null`, specifying the correct field to the child but have the child tell it that it didn't provide the prop.

Optional field and nullable are two different things anyway.

* Add missing test case.

* Reword messages.

(cherry picked from commit 0292d34047)
2016-10-03 16:08:19 -07:00
Paul O’Shannessy bdf263625d 15.3.2 2016-09-19 10:35:00 -07:00