Commit Graph
963 Commits
Author SHA1 Message Date
Maksim MarkelovandDan Abramov 854bd9becb Update Readme (#14176)
Replace core with react, dom-client with react-dom
2018-11-12 16:25:32 +00:00
Sebastian MarkbågeandGitHub 5d9dcbe13f Use unique thread ID for each partial render to access Context (#14182)
* BUG: ReactPartialRenderer / New Context polutes mutable global state

The new context API stores the provided values on the shared context instance. When used in a synchronous context, this is not an issue. However when used in an concurrent context this can cause a "push provider" from one react render to have an effect on an unrelated concurrent react render.

I've encountered this bug in production when using renderToNodeStream, which asks ReactPartialRenderer for bytes up to a high water mark before yielding. If two Node Streams are created and read from in parallel, the state of one can polute the other.

I wrote a failing test to illustrate the conditions under which this happens.

I'm also concerned that the experimental concurrent/async React rendering on the client could suffer from the same issue.

* Use unique thread ID for each partial render to access Context

This first adds an allocator that keeps track of a unique ThreadID index
for each currently executing partial renderer. IDs are not just growing
but are reused as streams are destroyed.

This ensures that IDs are kept nice and compact.

This lets us use an "array" for each Context object to store the current
values. The look up for these are fast because they're just looking up
an offset in a tightly packed "array".

I don't use an actual Array object to store the values. Instead, I rely
on that VMs (notably V8) treat storage of numeric index property access
as a separate "elements" allocation.

This lets us avoid an extra indirection.

However, we must ensure that these arrays are not holey to preserve this
feature.

To do that I store the _threadCount on each context (effectively it takes
the place of the .length property on an array).

This lets us first validate that the context has enough slots before we
access the slot. If not, we fill in the slots with the default value.
2018-11-09 15:38:20 -08:00
Andrew Clark 4ebecf3050 ESlint -> ESLint 2018-11-09 10:22:18 -08:00
Sophie AlpertandGitHub 6b16754978 Don't run danger on bad build (#14143)
sizebot comments can be confusing when not based on reality.

If results.json doesn't exist, danger will fail. This is what we want.
2018-11-09 10:21:39 -08:00
Andrew Clark 7cecc264fa Add global to ESLint plugin bundle config 2018-11-08 18:49:03 -08:00
Andrew ClarkandGitHub 28747a745f Add fb build of ESLint plugin (#14165) 2018-11-08 18:44:08 -08:00
Minh NguyenandDan Abramov 58bef64979 Refactor ESLint configuration to enable better IDE integration (#13914)
* Refactor ESLint configuration to enable better IDE integration

* Minor tweaks
2018-11-08 17:56:35 +00:00
Sebastian MarkbågeandGitHub 327f72403c Use Entry in yarn build ... Instead of Label (#14148)
* Parse build script type and package names

This ensures that `yarn build core dom` includes DOM.

It also ensures that spaces like `yarn build "core, dom"` doesn't build EVERYTHING.

* Get rid of label in bundles config

Instead we just use the name from entry using fuzzy search.

There is one special case. If you put in `/index` or `/index.js`.

That allows to build things like `react/index` to only build isomorphic
where as `react` would build everything. Or `react-dom/index` to exclude
the server renderers.

* Instead of matching `/index.js` just append it to the search string

That way things like `yarn build react/` works too.
2018-11-07 20:46:41 -08:00
Brian VaughnandGitHub 8b3f32e0f0 Release script supports interleaved stable and alpha releases (#14138) 2018-11-07 12:33:13 -08:00
Andrew Clark 7fe66572ef Update bundle sizes for 16.6.1 release 2018-11-06 18:28:50 -08:00
Andrew Clark 98eef774df Update error codes for 16.6.1 release 2018-11-06 18:28:50 -08:00
Sebastian MarkbågeandGitHub af58fb483e Add Debug Tools Package for Introspection of Hooks (#14085)
* Add debug tools package

* Add basic implementation

* Implement inspection of the current state of hooks using the fiber tree

* Support useContext hooks inspection by backtracking from the Fiber

I'm not sure this is safe because the return fibers may not be current
but close enough and it's fast.

We use this to set up the current values of the providers.

* rm copypasta

* Use lastIndexOf

Just in case. I don't know of any scenario where this can happen.

* Support ForwardRef

* Add test for memo and custom hooks

* Support defaultProps resolution
2018-11-05 10:02:59 -08:00
Keyan ZhangandDan Abramov 4e40b0cae7 update the benchmark script (#13994) 2018-11-05 15:55:46 +00:00
Caleb MeredithandAndrew Clark 2789879dd8 Add ESLint rule for React Hooks 2018-10-29 11:26:54 -07:00
Dan Abramov 315b223cf0 Update bundle sizes for 16.6.0 release 2018-10-23 16:29:35 -07:00
Dan Abramov 78bc36ff80 Update error codes for 16.6.0 release 2018-10-23 16:29:35 -07:00
Brian Vaughn 6f847464d5 Prettier 2018-10-23 15:06:58 -07:00
Brian VaughnandGitHub 27c7c98684 Add skipCI flag to release script (#13933) 2018-10-23 15:05:14 -07:00
Andrew ClarkandGitHub fb6bcae39f [react-cache] Remove cache as argument to read (#13865)
* [react-cache] Remove `cache` as argument to `read`

Updated is API is `Resource.read(key)` instead of
`Resource.read(cache, key)`.

The cache is read from context using `readContext`.

This also removes cache invalidation entirely (other than the default
LRU mechanism), as well as the ability to have multiple caches. We'll
add it back once `Context.write` lands and we can implement it the
right way.

Since there's now only a single cache (the global one), we don't
actually need to use context yet, but I've added a dummy context
anyway so the user gets an error if they attempt to read outside the
render phase.

* nits

* Add test for thenables that resolve multiple times
2018-10-23 14:38:51 -07:00
Brian VaughnandGitHub 5871848dff Add "unstable_" prefix to react-cache and jest-react (#13929)
* Add "unstable_" prefix to react-cache createResource and jest-react matchers
* Reverted accidental change to error-codes JSON
* Remove unstable_ prefix from internal React tests for jest-test
2018-10-23 13:55:37 -07:00
Abdul RaufandNathan Hunzaker 4772882104 Fix babel-preset-fbjs configure link in comment (#13666) 2018-10-21 12:23:24 -05:00
Nadia Osipova 4bf5330bda Renamed 4 Internal React Modules 2018-10-11 17:12:31 -07:00
Dan Abramov d4b9165a15 Revert "comment out temporarily"
This reverts commit f6a16217b2.
2018-10-10 17:23:18 +01:00
Dan Abramov 5e24b225bb Update bundle sizes for 16.6.0-alpha.01fb17f release 2018-10-10 17:19:00 +01:00
Dan Abramov f8fde93b90 Update error codes for 16.6.0-alpha.01fb17f release 2018-10-10 17:18:59 +01:00
Dan Abramov f6a16217b2 comment out temporarily 2018-10-10 17:11:44 +01:00
Andrew ClarkandGitHub bc1a29df20 Jest + test renderer helpers for concurrent mode (#13751)
* Jest + test renderer helpers for concurrent mode

Most of our concurrent React tests use the noop renderer. But most
of those tests don't test the renderer API, and could instead be
written with the test renderer. We should switch to using the test
renderer whenever possible, because that's what we expect product devs
and library authors to do. If test renderer is sufficient for writing
most React core tests, it should be sufficient for others, too. (The
converse isn't true but we should aim to dogfood test renderer as much
as possible.)

This PR adds a new package, jest-react (thanks @cpojer). I've moved
our existing Jest matchers into that package and added some new ones.

I'm not expecting to figure out the final API in this PR. My goal is
to land something good enough that we can start dogfooding in www.

TODO: Continue migrating Suspense tests, decide on better API names

* Add additional invariants to prevent common errors

- Errors if user attempts to flush when log of yields is not empty
- Throws if argument passed to toClearYields is not ReactTestRenderer

* Better method names

- toFlushAll -> toFlushAndYield
- toFlushAndYieldThrough ->
- toClearYields -> toHaveYielded

Also added toFlushWithoutYielding

* Fix jest-react exports

* Tweak README
2018-10-03 18:37:41 -06:00
Brian VaughnandGitHub 7ffdcc9587 Always warn about legacy context within StrictMode tree (#13760) 2018-10-03 08:40:45 -07:00
Maksim MarkelovandDan Abramov 193a108419 UMD react-cache build (#13761) 2018-10-03 15:09:17 +01:00
Andrew ClarkandGitHub fe203cb6e1 Rename simple-cache-provider to react-cache (#13755) 2018-10-01 09:07:40 -06:00
Dan 03141fbf57 Remove some old files from stats 2018-09-19 01:36:31 +01:00
Dan AbramovandGitHub f213e690bb Rename schedule to scheduler (#13683) 2018-09-19 01:26:28 +01:00
Brian Vaughn 671d32fec2 Update bundle sizes for 16.5.2 release 2018-09-18 11:30:50 -07:00
Brian Vaughn edd1b64231 Update error codes for 16.5.2 release 2018-09-18 11:30:50 -07:00
Brian Vaughn b334069abd Revert "Update error codes for 16.6.0-alpha.0 release"
This reverts commit d51f875f28.
2018-09-18 11:00:04 -07:00
Brian Vaughn 893fc1c0f6 Revert "Update bundle sizes for 16.6.0-alpha.0 release"
This reverts commit c497fabbe9.
2018-09-18 10:59:57 -07:00
Brian Vaughn c497fabbe9 Update bundle sizes for 16.6.0-alpha.0 release 2018-09-17 15:05:46 -07:00
Brian Vaughn d51f875f28 Update error codes for 16.6.0-alpha.0 release 2018-09-17 15:05:46 -07:00
Brian VaughnandGitHub d76bf0d21a Add UMD production+profiling entry points (#13642)
* Added UMD_PROFILING type to react-dom and scheduling package. Added UMD shim to schedule package.
* Added new schedule umd prod+prof bundle to API test
2018-09-13 17:44:08 -07:00
Brian VaughnandGitHub d464aa4d04 Rename "tracking" API to "tracing" (#13641)
* Replaced "tracking" with "tracing" in all directory and file names
* Global rename of track/tracking/tracked to trace/tracing/traced
2018-09-13 14:23:16 -07:00
Dan Abramov b4f2175c4a Update bundle sizes for 16.5.1 release 2018-09-13 19:31:18 +01:00
Dan Abramov 1d1b9fc7ec Update error codes for 16.5.1 release 2018-09-13 19:31:18 +01:00
Dan AbramovandGitHub 53cd1b6790 Delete TapEventPlugin (#13630) 2018-09-12 19:53:29 +01:00
Nathan HunzakerandDan Abramov 0603f3f200 🔥 Stop syncing the value attribute on inputs (behind a feature flag) (#13526)
* 🔥 Stop syncing the value attribute on inputs

* Eliminate some additional checks

* Remove initialValue and initialWrapper from wrapperState flow type

* Update tests with new sync logic, reduce some operations

* Update tests, add some caveats for SSR mismatches

* Revert newline change

* Remove unused type

* Call toString to safely type string values

* Add disableInputAttributeSyncing feature flag

Reverts tests to original state, adds attribute sync feature flag,
then moves all affected tests to ReactFire-test.js.

* Revert position of types in toStringValues

* Invert flag on number input blur

* Add clarification why double blur is necessary

* Update ReactFire number cases to be more explicite about blur

* Move comments to reduce diff size

* Add comments to clarify behavior in each branch

* There is no need to assign a different checked behavior in Fire

* Use checked reference

* Format

* Avoid precomputing stringable values

* Revert getToStringValue comment

* Revert placement of undefined in getToStringValue

* Do not eagerly stringify value

* Unify Fire test cases with normal ones

* Revert toString change. Only assign unsynced values when not nully
2018-09-12 19:29:23 +01:00
Dan AbramovandGitHub fe0051ccc5 Allow reading default feature flags from bundle tests (#13629) 2018-09-12 16:56:04 +01:00
Dan AbramovandGitHub 620042b771 Run tests for Fire feature flags (#13628)
* Run tests for Fire feature flags

* Only run ReactDOM tests for Fire
2018-09-12 16:17:36 +01:00
Héctor RamosandDan Abramov 2d9c66f0df Switch to @sizebot token (#13622) 2018-09-11 21:06:44 +01:00
Brian VaughnandGitHub 29aa0cf6c9 Release script updates private package dependencies also (#13612) 2018-09-10 13:14:34 -07:00
Dan a214fe0b49 Use clearer wording
Fixes #13604
2018-09-09 16:54:31 +01:00
Brandon DailandGitHub 6138816e76 Remove injectComponentTree from unstable-native-dependencies, add EventPluginHub (#13598)
* Remove injectComponentTree from unstable-native-dependencies, add
EventPluginHub

injectComponentTree was exposed for react-native-web, but wasn't
actually being used by the project. They were using EventPluginHub
through ReactDOM's secret internals, but that was removed in https://github.com/facebook/react/pull/13539

This removes the unused injectComponentTree export, refactors the
ResponderEventPlugin test so it doesn't depend on it, and also adds
EventPluginHub to the exports to unbreak react-native-web

* Re-export injectEventPluginsByName from ReactDOM internals
2018-09-08 12:07:59 -07:00