rsnext/packages/next/compiled
Sukka 26459ef097
replace use-subscription with use-sync-external-store (#36733)
- [x] Make sure the linting passes by running `yarn lint`

Back in 2019, React released the first version of `use-subscription` (https://github.com/facebook/react/pull/15022). At the time, we only has limited information about concurrent rendering, and #9026 add the initial concurrent mode support.

In 2020, React provides a first-party official API `useMutableSource` (https://github.com/reactjs/rfcs/pull/147, https://github.com/facebook/react/pull/18000):

> ... enables React components to safely and efficiently read from a mutable external source in Concurrent Mode.

React 18 introduces `useMutableSource`'s replacement `useSyncExternalStore` (see details here: https://github.com/reactwg/react-18/discussions/86), and React changes `use-subscription` implementation to use `useSyncExternalStore` directly: https://github.com/facebook/react/pull/24289

> In React 18, `React.useSyncExternalStore` is a built-in replacement for `useSubscription`.
> 
> This PR makes `useSubscription` simply use `React.useSyncExternalStore` when available. For pre-18, it uses a `use-sync-external-store` shim which is very similar in `use-subscription` but fixes some flaws with concurrent rendering.

And according to `use-subscription`:

> You may now migrate to [`use-sync-external-store`](https://www.npmjs.com/package/use-sync-external-store) directly instead, which has the same API as `React.useSyncExternalStore`. The `use-subscription` package is now a thin wrapper over `use-sync-external-store` and will not be updated further.

The PR does exactly that:

- Removes the precompiled `use-subscription` introduced in #35746
- Adds the `use-sync-external-store` to the dependencies.
  - The `use-sync-external-store` package enables compatibility with React 16 and React 17.
  - Do not pre-compile `use-sync-external-store` since it is also the dependency of some popular React state management libraries like `react-redux`, `zustand`, `valtio`, `@xstate/react` and `@apollo/client`, etc. By install
- Replace `useSubscription` usage with `useSyncExternalStore` 

---

Ref: #9026, #35746 and #36159


Co-authored-by: Jiachi Liu <4800338+huozhi@users.noreply.github.com>
2022-05-08 12:19:33 +00:00
..
@babel/runtime Pre-compile more dependencies continued (#32679) 2021-12-21 16:13:45 +01:00
@hapi/accept Pre-compile more dependencies (#32627) 2021-12-20 14:01:35 +01:00
@napi-rs/triples Upgrade @napi-rs/triples to support android arm platform (#34752) 2022-02-24 10:15:51 +00:00
@peculiar/webcrypto Fix typescript 4.6.2 randomUUID() (#34976) 2022-03-02 21:51:15 +00:00
@vercel/nft update @vercel/nft to 0.18.1 (#36075) 2022-04-11 15:45:40 -05:00
abort-controller web runtime: add AbortController & AbortSignal (#32089) 2021-12-21 17:12:53 +00:00
acorn Pre-compile more dependencies (#32627) 2021-12-20 14:01:35 +01:00
amphtml-validator Update to latest version of amphtml-validator (#33967) 2022-02-03 20:33:38 -06:00
arg Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
assert Pre-compile more dependencies (#32627) 2021-12-20 14:01:35 +01:00
async-retry Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
async-sema Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
babel Enable import assertion syntax parsing (#33750) 2022-03-06 20:41:22 +00:00
babel-packages Enable import assertion syntax parsing (#33750) 2022-03-06 20:41:22 +00:00
browserify-zlib Pre-compile more dependencies (#32627) 2021-12-20 14:01:35 +01:00
browserslist chore: upgrade PostCSS dependencies (#34354) 2022-04-22 13:14:29 +02:00
buffer Pre-compile more dependencies (#32627) 2021-12-20 14:01:35 +01:00
bytes Add API config to allow disabling response size warning (#34700) 2022-02-25 02:04:02 +00:00
chalk Fix issue with escape-string-regexp in IE11 (#32708) 2022-01-03 11:41:50 -06:00
ci-info Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
cli-select Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
comment-json Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
compression Add API config to allow disabling response size warning (#34700) 2022-02-25 02:04:02 +00:00
conf Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
constants-browserify Pre-compile more dependencies (#32627) 2021-12-20 14:01:35 +01:00
content-disposition Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
content-type Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
cookie Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
cross-spawn Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
crypto-browserify feat(trace): postprocess trace reporter for datadog (#35032) 2022-03-08 08:15:09 -08:00
cssnano-simple chore: upgrade PostCSS dependencies (#34354) 2022-04-22 13:14:29 +02:00
debug Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
devalue Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
domain-browser Pre-compile more dependencies (#32627) 2021-12-20 14:01:35 +01:00
etag Pre-compile more dependencies (#32627) 2021-12-20 14:01:35 +01:00
events Pre-compile more dependencies (#32627) 2021-12-20 14:01:35 +01:00
find-cache-dir unlock eslint-config-next dependencies (#35781) 2022-04-28 17:15:58 +00:00
find-up Pre-compile more dependencies (#32627) 2021-12-20 14:01:35 +01:00
formdata-node Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
fresh Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
get-orientation Pre-compile more dependencies (#32627) 2021-12-20 14:01:35 +01:00
glob Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
gzip-size Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
http-proxy Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
https-browserify Pre-compile more dependencies (#32627) 2021-12-20 14:01:35 +01:00
icss-utils chore: upgrade PostCSS dependencies (#34354) 2022-04-22 13:14:29 +02:00
ignore-loader Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
image-size Pre-compile more dependencies (#32627) 2021-12-20 14:01:35 +01:00
is-animated Fix animated png bypass from Image Optimization API (#35120) 2022-03-07 20:29:11 +00:00
is-docker Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
is-wsl Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
jest-worker Update main field for nccd jest-worker (#33465) 2022-01-19 10:11:14 -06:00
json5 Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
jsonwebtoken Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
loader-utils2 Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
loader-utils3 Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
lodash.curry Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
lru-cache Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
micromatch Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
mini-css-extract-plugin Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
nanoid chore(deps): upgrade postcss (#33142) 2022-01-13 16:06:38 +00:00
native-url Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
neo-async Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
node-fetch Update other instances of node-fetch (#33617) 2022-01-24 16:18:39 -06:00
node-html-parser Pre-compile more dependencies continued (#32679) 2021-12-21 16:13:45 +01:00
ora Remove un-needed test dependency (#32616) 2022-01-03 10:08:30 -06:00
os-browserify Pre-compile more dependencies (#32627) 2021-12-20 14:01:35 +01:00
p-limit feat(trace): postprocess trace reporter for datadog (#35032) 2022-03-08 08:15:09 -08:00
path-browserify Pre-compile more dependencies (#32627) 2021-12-20 14:01:35 +01:00
postcss-flexbugs-fixes chore: upgrade PostCSS dependencies (#34354) 2022-04-22 13:14:29 +02:00
postcss-modules-extract-imports chore: upgrade PostCSS dependencies (#34354) 2022-04-22 13:14:29 +02:00
postcss-modules-local-by-default chore: upgrade PostCSS dependencies (#34354) 2022-04-22 13:14:29 +02:00
postcss-modules-scope chore: upgrade PostCSS dependencies (#34354) 2022-04-22 13:14:29 +02:00
postcss-modules-values chore: upgrade PostCSS dependencies (#34354) 2022-04-22 13:14:29 +02:00
postcss-preset-env chore: upgrade PostCSS dependencies (#34354) 2022-04-22 13:14:29 +02:00
postcss-safe-parser chore: upgrade PostCSS dependencies (#34354) 2022-04-22 13:14:29 +02:00
postcss-scss chore: upgrade PostCSS dependencies (#34354) 2022-04-22 13:14:29 +02:00
postcss-value-parser chore: upgrade PostCSS dependencies (#34354) 2022-04-22 13:14:29 +02:00
process Pre-compile more dependencies (#32627) 2021-12-20 14:01:35 +01:00
punycode Ensure setImmediate and punycode are polyfilled (#32768) 2022-01-03 13:31:23 -06:00
querystring-es3 Pre-compile more dependencies (#32627) 2021-12-20 14:01:35 +01:00
raw-body Add API config to allow disabling response size warning (#34700) 2022-02-25 02:04:02 +00:00
react-is Pre-compile more dependencies (#32742) 2022-01-17 15:17:22 +00:00
react-server-dom-webpack Upgrade react-server-dom-webpack (#35524) 2022-03-23 19:20:36 +00:00
regenerator-runtime Pre-compile more dependencies continued (#32679) 2021-12-21 16:13:45 +01:00
sass-loader feat: allow node-sass@7 as peer dependency (#34107) 2022-02-11 15:14:09 -06:00
schema-utils2 Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
schema-utils3 Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
semver Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
send Pre-compile more dependencies (#32627) 2021-12-20 14:01:35 +01:00
setimmediate Ensure setImmediate and punycode are polyfilled (#32768) 2022-01-03 13:31:23 -06:00
source-map Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
stream-browserify feat(trace): postprocess trace reporter for datadog (#35032) 2022-03-08 08:15:09 -08:00
stream-http feat(trace): postprocess trace reporter for datadog (#35032) 2022-03-08 08:15:09 -08:00
string-hash Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
string_decoder Pre-compile more dependencies (#32627) 2021-12-20 14:01:35 +01:00
strip-ansi Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
tar Add falling back to wasm swc build on native load failure (#36612) 2022-05-02 21:11:45 +00:00
terser Update Terser to v5.10.0, fix minification issues (#33045) 2022-02-04 21:33:10 +00:00
text-table Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
timers-browserify Ensure setImmediate and punycode are polyfilled (#32768) 2022-01-03 13:31:23 -06:00
tty-browserify Pre-compile more dependencies (#32627) 2021-12-20 14:01:35 +01:00
ua-parser-js Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
unistore Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
util Pre-compile more dependencies (#32627) 2021-12-20 14:01:35 +01:00
uuid Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
vm-browserify Pre-compile more dependencies (#32627) 2021-12-20 14:01:35 +01:00
watchpack Bump @vercel/nft to 0.17.2 (#33048) 2022-01-06 00:01:37 +00:00
web-streams-polyfill Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
web-vitals Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
webpack unlock eslint-config-next dependencies (#35781) 2022-04-28 17:15:58 +00:00
webpack-sources1 Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00
webpack-sources3 update webpack (#33207) 2022-01-12 16:46:59 +00:00
ws Update to latest ncc and ensure caniuse-lite data is external (#32064) 2021-12-08 10:41:35 -06:00