Commit Graph

14233 Commits

Author SHA1 Message Date
Sebastian Markbåge
bd45ad05dc Add a DOCTYPE to the stream if the <html> tag is rendered (#21680)
This makes it a lot easier to render the whole document using React without
needing to patch into the stream.

We expect that currently people will still have to patch into the stream
to do advanced things but eventually the goal is that you shouldn't
need to.
2021-06-14 13:57:17 -07:00
Dan Abramov
a8f5e77b92 Remove invokeGuardedCallback from commit phase (#21666)
* Remove invokeGuardedCallback from commit phase

* Sync fork
2021-06-14 21:45:53 +01:00
Sebastian Markbåge
dbe3363ccd [Fizz] Implement Legacy renderToString and renderToNodeStream on top of Fizz (#21276)
* Wire up DOM legacy build

* Hack to filter extra comments for testing purposes

* Use string concat in renderToString

I think this might be faster. We could probably use a combination of this
technique in the stream too to lower the overhead.

* Error if we can't complete the root synchronously

Maybe this should always error but in the async forms we can just delay
the stream until it resolves so it does have some useful semantics.

In the synchronous form it's never useful though. I'm mostly adding the
error because we're testing this behavior for renderToString specifically.

* Gate memory leak tests of internals

These tests don't translate as is to the new implementation and have been
ported to the Fizz tests separately.

* Enable Fizz legacy mode in stable

* Add wrapper around the ServerFormatConfig for legacy mode

This ensures that we can inject custom overrides without negatively
affecting the new implementation.

This adds another field for static mark up for example.

* Wrap pushTextInstance to avoid emitting comments for text in static markup

* Don't emit static mark up for completed suspense boundaries

Completed and client rendered boundaries are only marked for the client
to take over.

Pending boundaries are still supported in case you stream non-hydratable
mark up.

* Wire up generateStaticMarkup to static API entry points

* Mark as renderer for stable

This shouldn't affect the FB one ideally but it's done with the same build
so let's hope this works.
2021-06-14 12:54:30 -07:00
Dan Abramov
101ea9f55c Set deletedTreeCleanUpLevel to 3 (#21679) 2021-06-14 20:10:24 +01:00
Dan Abramov
1a106bdc2a Wrap eventhandle-specific logic in a flag (#21657) 2021-06-11 21:08:32 +01:00
Brian Vaughn
3ba2b67f21 Update react_18.md 2021-06-11 14:27:09 -04:00
Brian Vaughn
905f6f48d4 Update react_18.md 2021-06-11 14:25:47 -04:00
Brian Vaughn
ca4e650ec1 Update react_18.md 2021-06-11 14:24:09 -04:00
Brian Vaughn
42a89d5c61 Update react_18.md 2021-06-11 14:22:57 -04:00
Brian Vaughn
1e3ceadcc0 Added React 18 issue template 2021-06-11 14:19:37 -04:00
Brian Vaughn
01be61c12f DevTools can inspect Proxies that return broken iterator functions (#21660) 2021-06-11 10:15:48 -04:00
Timothy Yung
cb30388d10 Export React Native AttributeType Types (#21661) 2021-06-11 00:45:49 -07:00
Sebastian Markbåge
c1536795ca Revert "Make enableSuspenseLayoutEffectSemantics static for www (#21617)" (#21656)
This reverts commit 39f0074892.
2021-06-10 10:12:31 -07:00
Samuel Susla
c96b78e0e7 Add concurrentRoot property to ReactNativeTypes (#21648)
* Add concurrentRoot property to ReactNativeTypes

* Add concurrentRoot to ReactNativeType

* Use ReactFabricType instead of ReactNativeType
2021-06-10 08:59:22 -04:00
Andrew Clark
aecb3b6d11 Deprecate ReactDOM.render and ReactDOM.hydrate (#21652)
* Use existing test warning filter for server tests

We have a warning filter for our internal tests to ignore warnings
that are too noisy or that we haven't removed from our test suite yet:
shouldIgnoreConsoleError.

Many of our server rendering tests don't use this filter, though,
because it has its own special of asserting warnings.

So I added the warning filter to the server tests, too.

* Deprecate ReactDOM.render and ReactDOM.hydrate

These are no longer supported in React 18. They are replaced by the
`createRoot` API.

The warning includes a link to documentation of the new API. Currently
it redirects to the corresponding working group post. Here's the PR to
set up the redirect: https://github.com/reactjs/reactjs.org/pull/3730

Many of our tests still use ReactDOM.render. We will need to gradually
migrate them over to createRoot.

In the meantime, I added the warnings to our internal warning filter.
2021-06-09 13:46:55 -07:00
Samuel Susla
1a3f1afbd3 [React Native] Fabric get current event priority (#21553)
* Call into Fabric to get current event priority

Fix flow errors

* Prettier

* Better handle null and undefined cases

* Remove optional chaining and use ?? operator

* prettier-all

* Use conditional ternary operator

* prettier
2021-06-08 12:26:21 -04:00
Andrew Clark
e6be2d531d Fix tag validation 2021-06-08 11:53:43 -04:00
Andrew Clark
6bbe7c3446 Remove space from tag arguments 2021-06-08 11:40:34 -04:00
Andrew Clark
bc7d5ac99d Allow alpha tags 2021-06-08 11:31:42 -04:00
Andrew Clark
48a11a3efc Update next React version (#21647)
This does not mean that a release of 18.0 is imminent, only that the
main branch includes breaking changes.

Also updates the versioning scheme of the `@next` channel to include
the upcoming semver number, as well as the word "alpha" to indicate the
stability of the release.

- Before:       0.0.0-e0d9b28999
- After:        18.0.0-alpha-e0d9b28999
2021-06-08 08:26:22 -07:00
Sebastian Markbåge
5aa0c5671f Fix Issue with Undefined Lazy Imports By Refactoring Lazy Initialization Order (#21642)
* Add a DEV warning for common case

* Don't set Pending flag before we know it's a promise

* Move default exports extraction to render phase

This is really where most unwrapping happen. The resolved promise is the
module object and then we read things from it.

This way it lines up a bit closer with the Promise model too since the
promise resolving to React gets passed this same value.

If this throws, then it throws during render so it's caught properly and
you can break on it and even see it on the right stack.

* Check if the default is in the module object instead of if it's undefined

Normally we'd just check if something is undefined but in this case it's
valid to have an undefined value in the export but if you don't have a
property then you're probably importing the wrong kind of object.

* We need to check if it's uninitialized for sync resolution

Co-authored-by: Dan Abramov <dan.abramov@me.com>
2021-06-07 14:47:18 -07:00
ithinker5
0eea577248 Fix typo in comment (accumlated → accumulated) (#21637)
Co-authored-by: HuJiajie <hujj@firstgrid.cn>
2021-06-07 08:52:49 -04:00
niexq
0706162ba7 Fix typo in comment (environement → environment) (#21635) 2021-06-07 08:52:42 -04:00
niexq
9d17b562ba Fix typo in comment (satsify → satisfy) (#21629) 2021-06-05 14:02:15 -04:00
Shannon Feng
b610fec00c fix comments: expiration time -> lanes (#21551) 2021-06-05 07:19:40 -07:00
Dan Abramov
23c80959ad Fix CSS 2021-06-04 23:12:01 +01:00
Dan Abramov
2568fecc38 Tweak fixture 2021-06-04 23:10:02 +01:00
Dan Abramov
fccfc24893 [Fizz] Add another fixture (#21627) 2021-06-04 23:04:06 +01:00
Dan Abramov
cc4d24ab0b [Fizz] Always call flush() if it exists (#21625) 2021-06-04 20:17:57 +01:00
Ikko Ashimine
46926993fc Fix typo in bridge.js (#21621) 2021-06-04 11:42:09 -04:00
Sebastian Markbåge
e0d9b28999 [Fizz] Minor Fixes for Warning Parity (#21618) 2021-06-03 19:54:31 -04:00
Sebastian Markbåge
1b7b3592f4 [Fizz] Implement Component Stacks in DEV for warnings (#21610)
* Implement component stacks

This uses a reverse linked list in DEV-only to keep track of where we're
currently executing.

* Fix bug that wasn't picking up the right stack at suspended boundaries

This makes it more explicit which stack we pass in to be retained by the
task.
2021-06-03 13:02:41 -07:00
Brian Vaughn
39f0074892 Make enableSuspenseLayoutEffectSemantics static for www (#21617)
This has been ramped up to 80% GK so the next step is to just turn it on for 100%
2021-06-03 15:40:59 -04:00
Andrew Clark
7747a5684d Support @latest in prepare-release-from-ci (#21616)
Since we track these versions in source, we can build `@latest`
releases in CI and store them as artifacts.

Then when it's time to release, and the build has been verified, we use
`prepare-release-from-ci` (the same script we use for `@next` and
`@experimental`) to fetch the already built and versioned packages.
2021-06-03 11:00:08 -07:00
Andrew Clark
8f37942765 Prepare semver (@latest) releases in CI (#21615)
Now that we track package versions in source, `@latest` builds should
be fully reproducible for a given commit. We can prepare the packages in
CI and store them as artifacts, the same way we do for `@next` and
`@experimental`.

Eventually this can replace the interactive script that we currently
use to swap out the version numbers.

The other nice thing about this approach is that we can run tests in CI
to verify that the packages are releasable, instead of waiting until
right before publish.

I named the output directory `oss-stable-semver`, to distinguish from
the `@next` prereleases that are located at `oss-stable`. I don't love
this naming. I'd prefer to use the name of the corresponding npm dist
tag. I'll do that in a follow-up, though, since the `oss-stable` name is
referenced in a handful of places.

Current naming (after this PR):

- `oss-experimental` → `@experimental`
- `oss-stable` → `@next`
- `oss-stable-semver` → `@latest`

Proposed naming (not yet implemented, requires more work):

- `oss-experimental` → `@experimental`
- `oss-next` → `@next`
- `oss-latest` → `@latest`
2021-06-03 10:26:11 -07:00
Andrew Clark
44cdfd6b7a Use ReactVersions module as package allowlist (#21613)
Instead of keeping a separate allowlist in sync, we use ReactVersions.js
as the source of truth for which packages get published.
2021-06-03 11:45:10 -04:00
Bao Pham
8b4201535c Devtools: add feature to trigger an error boundary (#21583)
Co-authored-by: Brian Vaughn <bvaughn@fb.com>
2021-06-03 11:21:44 -04:00
Sebastian Markbåge
2418f24b60 Fix <select> check of defaultValue/value type (#21611) 2021-06-03 09:13:00 -04:00
Andrew Clark
154a8cf328 Fix reference to wrong variable
Follow-up to #21608
2021-06-03 00:23:08 -04:00
Andrew Clark
6736a38b9a Add single source of truth for package versions (#21608)
The versioning scheme for `@next` releases does not include semver
information. Like `@experimental`, the versions are based only on the
hash, i.e. `0.0.0-<commit_sha>`. The reason we do this is to prevent
the use of a tilde (~) or caret (^) to match a range of
prerelease versions.

For `@experimental`, I think this rationale still makes sense — those
releases are very unstable, with frequent breaking changes. But `@next`
is not as volatile. It represents the next stable release. So, I think
we can afford to include an actual verison number at the beginning of
the string instead of `0.0.0`.

We can also add a label that indicates readiness of the upcoming
release, like "alpha", "beta", "rc", etc.

To prepare for this the new versioning scheme, I updated the build
script. However, **this PR does not enable the new versioning scheme
yet**. I left a TODO above the line that we'll change once we're ready.

We need to specify the expected next version numbers for each package,
somewhere. These aren't encoded anywhere today — we don't specify
version numbers until right before publishing to `@latest`, using an
interactive script: `prepare-release-from-npm`.

Instead, what we can do is track these version numbers in a module. I
added `ReactVersions.js` that acts as the single source of truth for
every package's version. The build script uses this module to build the
`@next` packages.

In the future, I want to start building the `@latest` packages the same
way we do `@next` and `@experimental`. (What we do now is download a
`@next` release from npm and swap out its version numbers.) Then we
could run automated tests in CI to confirm the packages are releasable,
instead of waiting to verify that right before publish.
2021-06-02 20:54:26 -07:00
Sebastian Markbåge
86715efa23 Resolve the true entry point during tests (#21505)
* Resolve the entry point for tests the same way builds do

This way the source tests, test the same entry point configuration.

* Gate test selectors on www

These are currently only exposed in www builds

* Gate createEventHandle / useFocus on www

These are enabled in both www variants but not OSS experimental.

* Temporarily disable www-modern entry point

Use the main one that has all the exports until we fix more tests.

* Remove enableCache override that's no longer correct

* Open gates for www

These used to not be covered because they used Cache which wasn't exposed.
2021-06-02 18:03:29 -07:00
Sebastian Markbåge
a8a4742f1c Convert ES6/TypeScript/CoffeeScript Tests to createRoot + act (#21598)
* Convert ES6/TypeScript CoffeeScript Tests to createRoot + act

* Change expectation for WWW+VARIANT because the deferRenderPhaseUpdateToNextBatch flag breaks this behavior
2021-06-02 11:36:59 -07:00
Sebastian Markbåge
1d3558965f Disable deferRenderPhaseUpdateToNextBatch by default (#21605)
We're still experimenting with this and it causes a breaking behavior
for setState in componentWillMount/componentWillReceiveProps atm.
2021-06-02 11:28:06 -07:00
okmttdhr
a8964649bb Delete an unused field (#21415) 2021-06-02 16:24:40 +01:00
Dan Abramov
76f85b3e50 Expose Fizz in stable builds (#21602) 2021-06-02 16:13:19 +01:00
Andrew Clark
e16d61c300 [Offscreen] Mount/unmount layout effects (#21386)
* [Offscreen] Mount/unmount layout effects

Exposes the Offscreen component type and implements basic support for
mount/unmounting layout effects when the visibility is toggled.

Mostly it works the same way as hidden Suspense trees, which use the
same internal fiber type. I had to add an extra bailout, though, that
doesn't apply to the Suspense case but does apply to Offscreen
components: a hidden Offscreen tree will eventually render at low
priority, and when we it does, its `subtreeTag` will have effects
scheduled on it. So I added a check to the layout phase where, if the
subtree is hidden, we skip over the subtree entirely. An alternate
design would be to clear the subtree flags in the render phase, but I
prefer doing it this way since it's harder to mess up.

We also need an API to enable the same thing for passive effects. This
is not yet implemented.

* Add test starting from hidden

Co-authored-by: Rick Hanlon <rickhanlonii@gmail.com>
2021-06-01 12:46:08 -07:00
Brian Vaughn
63091939bd OSS feature flag updates (#21597)
Co-authored-by: Dan Abramov <dan.abramov@me.com>
2021-06-01 13:44:10 -04:00
Sebastian Markbåge
efbd69b27e Define global __WWW__ = true flag during www tests (#21504)
* Define global __WWW__ = true flag during www tests

We already do that for __PERSISTENT__.

* Use @gate www in ReactSuspenseCallback

This allows it to not be internal anymore. We test it against the www build.
2021-06-01 10:16:06 -07:00
Sebastian Markbåge
8f6163cbed Fix Fizz exported types (#21596) 2021-06-01 10:02:04 -07:00
Brian Vaughn
28625c6f45 Disable strict effects for legacy roots (again) (#21591) 2021-05-31 13:05:50 -04:00