Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

replace use-subscription with use-sync-external-store #36733

Merged
merged 6 commits into from
May 8, 2022

Conversation

SukkaW
Copy link
Contributor

@SukkaW SukkaW commented May 6, 2022

  • Make sure the linting passes by running yarn lint

Back in 2019, React released the first version of use-subscription (facebook/react#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 (reactjs/rfcs#147, facebook/react#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: reactwg/react-18#86), and React changes use-subscription implementation to use useSyncExternalStore directly: facebook/react#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 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 Update to pre-compile use-subscription #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

@ijjk

This comment was marked as outdated.

@ijjk
Copy link
Member

ijjk commented May 6, 2022

Stats from current PR

Default Build (Decrease detected ✓)
General Overall increase ⚠️
vercel/next.js canary SukkaW/next.js use-sync-external-store Change
buildDuration 15.8s 15.7s -121ms
buildDurationCached 6.4s 6.4s -17ms
nodeModulesSize 475 MB 475 MB ⚠️ +33.8 kB
Page Load Tests Overall decrease ⚠️
vercel/next.js canary SukkaW/next.js use-sync-external-store Change
/ failed reqs 0 0
/ total time (seconds) 3.762 3.817 ⚠️ +0.06
/ avg req/sec 664.56 654.98 ⚠️ -9.58
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.155 1.169 ⚠️ +0.01
/error-in-render avg req/sec 2163.97 2138.16 ⚠️ -25.81
Client Bundles (main, webpack)
vercel/next.js canary SukkaW/next.js use-sync-external-store Change
925.HASH.js gzip 179 B 179 B
framework-HASH.js gzip 42 kB 42 kB
main-HASH.js gzip 28.8 kB 28.8 kB
webpack-HASH.js gzip 1.44 kB 1.44 kB
Overall change 72.5 kB 72.5 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary SukkaW/next.js use-sync-external-store Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages Overall decrease ✓
vercel/next.js canary SukkaW/next.js use-sync-external-store Change
_app-HASH.js gzip 1.36 kB 1.36 kB
_error-HASH.js gzip 193 B 193 B
amp-HASH.js gzip 308 B 308 B
css-HASH.js gzip 327 B 327 B
dynamic-HASH.js gzip 3.08 kB 2.69 kB -387 B
head-HASH.js gzip 359 B 359 B
hooks-HASH.js gzip 920 B 920 B
image-HASH.js gzip 5.7 kB 5.7 kB
index-HASH.js gzip 263 B 263 B
link-HASH.js gzip 2.64 kB 2.64 kB
routerDirect..HASH.js gzip 320 B 320 B
script-HASH.js gzip 391 B 391 B
withRouter-HASH.js gzip 318 B 318 B
85e02e95b279..7e3.css gzip 107 B 107 B
Overall change 16.3 kB 15.9 kB -387 B
Client Build Manifests
vercel/next.js canary SukkaW/next.js use-sync-external-store Change
_buildManifest.js gzip 459 B 459 B
Overall change 459 B 459 B
Rendered Page Sizes
vercel/next.js canary SukkaW/next.js use-sync-external-store Change
index.html gzip 532 B 532 B
link.html gzip 546 B 546 B
withRouter.html gzip 528 B 528 B
Overall change 1.61 kB 1.61 kB

Diffs

Diff for _buildManifest.js
@@ -8,7 +8,7 @@ self.__BUILD_MANIFEST = {
     "static\u002Fchunks\u002Fpages\u002Fcss-436fa6bb26fc4120.js"
   ],
   "/dynamic": [
-    "static\u002Fchunks\u002Fpages\u002Fdynamic-80f5580e1c1b8ce3.js"
+    "static\u002Fchunks\u002Fpages\u002Fdynamic-8e11b4c2953d70e9.js"
   ],
   "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-544bb68363445a0e.js"],
   "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-c1372eeb4916d32c.js"],
Diff for dynamic-HASH.js
@@ -255,7 +255,7 @@
       });
       exports["default"] = void 0;
       var _react = _interopRequireDefault(__webpack_require__(7294));
-      var _useSubscription = __webpack_require__(2021);
+      var _shim = __webpack_require__(1688);
       var _loadableContext = __webpack_require__(3644);
       function _interopRequireDefault(obj) {
         return obj && obj.__esModule
@@ -308,7 +308,11 @@
           var context = _react.default.useContext(
             _loadableContext.LoadableContext
           );
-          var state = (0, _useSubscription).useSubscription(subscription);
+          var state = (0, _shim).useSyncExternalStore(
+            subscription.subscribe,
+            subscription.getCurrentValue,
+            subscription.getCurrentValue
+          );
           _react.default.useImperativeHandle(
             ref,
             function() {
@@ -368,7 +372,7 @@
         if (opts.suspense) {
           opts.lazy = _react.default.lazy(opts.loader);
         }
-        var subscription = null;
+        /** @type LoadableSubscription */ var subscription = null;
         // Server only
         if (false) {
         }
@@ -631,195 +635,103 @@
       /***/
     },
 
-    /***/ 2021: /***/ function(
+    /***/ 5152: /***/ function(
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      var __dirname = "/";
-      (function() {
-        "use strict";
-        var e = {
-          800: function(e) {
-            /*
-object-assign
-(c) Sindre Sorhus
-@license MIT
-*/
-            var r = Object.getOwnPropertySymbols;
-            var t = Object.prototype.hasOwnProperty;
-            var u = Object.prototype.propertyIsEnumerable;
-            function toObject(e) {
-              if (e === null || e === undefined) {
-                throw new TypeError(
-                  "Object.assign cannot be called with null or undefined"
-                );
-              }
-              return Object(e);
-            }
-            function shouldUseNative() {
-              try {
-                if (!Object.assign) {
-                  return false;
-                }
-                var e = new String("abc");
-                e[5] = "de";
-                if (Object.getOwnPropertyNames(e)[0] === "5") {
-                  return false;
-                }
-                var r = {};
-                for (var t = 0; t < 10; t++) {
-                  r["_" + String.fromCharCode(t)] = t;
-                }
-                var u = Object.getOwnPropertyNames(r).map(function(e) {
-                  return r[e];
-                });
-                if (u.join("") !== "0123456789") {
-                  return false;
-                }
-                var n = {};
-                "abcdefghijklmnopqrst".split("").forEach(function(e) {
-                  n[e] = e;
-                });
-                if (
-                  Object.keys(Object.assign({}, n)).join("") !==
-                  "abcdefghijklmnopqrst"
-                ) {
-                  return false;
-                }
-                return true;
-              } catch (e) {
-                return false;
-              }
-            }
-            e.exports = shouldUseNative()
-              ? Object.assign
-              : function(e, n) {
-                  var a;
-                  var i = toObject(e);
-                  var s;
-                  for (var c = 1; c < arguments.length; c++) {
-                    a = Object(arguments[c]);
-                    for (var o in a) {
-                      if (t.call(a, o)) {
-                        i[o] = a[o];
-                      }
-                    }
-                    if (r) {
-                      s = r(a);
-                      for (var f = 0; f < s.length; f++) {
-                        if (u.call(a, s[f])) {
-                          i[s[f]] = a[s[f]];
-                        }
-                      }
-                    }
-                  }
-                  return i;
-                };
-          },
-          569: function(e, r, t) {
-            /** @license React vundefined
-             * use-subscription.development.js
-             *
-             * Copyright (c) Facebook, Inc. and its affiliates.
-             *
-             * This source code is licensed under the MIT license found in the
-             * LICENSE file in the root directory of this source tree.
-             */
-            if (false) {
-            }
-          },
-          403: function(e, r, t) {
-            /** @license React vundefined
-             * use-subscription.production.min.js
-             *
-             * Copyright (c) Facebook, Inc. and its affiliates.
-             *
-             * This source code is licensed under the MIT license found in the
-             * LICENSE file in the root directory of this source tree.
-             */
-            var u = t(800),
-              n = t(522);
-            r.useSubscription = function(e) {
-              var r = e.getCurrentValue,
-                t = e.subscribe,
-                a = n.useState(function() {
-                  return { getCurrentValue: r, subscribe: t, value: r() };
-                });
-              e = a[0];
-              var i = a[1];
-              a = e.value;
-              if (e.getCurrentValue !== r || e.subscribe !== t)
-                (a = r()), i({ getCurrentValue: r, subscribe: t, value: a });
-              n.useDebugValue(a);
-              n.useEffect(
-                function() {
-                  function b() {
-                    if (!e) {
-                      var n = r();
-                      i(function(e) {
-                        return e.getCurrentValue !== r ||
-                          e.subscribe !== t ||
-                          e.value === n
-                          ? e
-                          : u({}, e, { value: n });
-                      });
-                    }
-                  }
-                  var e = !1,
-                    n = t(b);
-                  b();
-                  return function() {
-                    e = !0;
-                    n();
-                  };
-                },
-                [r, t]
-              );
-              return a;
-            };
+      module.exports = __webpack_require__(7645);
+
+      /***/
+    },
+
+    /***/ 3250: /***/ function(
+      __unused_webpack_module,
+      exports,
+      __webpack_require__
+    ) {
+      "use strict";
+      /**
+       * @license React
+       * use-sync-external-store-shim.production.min.js
+       *
+       * Copyright (c) Facebook, Inc. and its affiliates.
+       *
+       * This source code is licensed under the MIT license found in the
+       * LICENSE file in the root directory of this source tree.
+       */
+      var e = __webpack_require__(7294);
+      function h(a, b) {
+        return (
+          (a === b && (0 !== a || 1 / a === 1 / b)) || (a !== a && b !== b)
+        );
+      }
+      var k = "function" === typeof Object.is ? Object.is : h,
+        l = e.useState,
+        m = e.useEffect,
+        n = e.useLayoutEffect,
+        p = e.useDebugValue;
+      function q(a, b) {
+        var d = b(),
+          f = l({ inst: { value: d, getSnapshot: b } }),
+          c = f[0].inst,
+          g = f[1];
+        n(
+          function() {
+            c.value = d;
+            c.getSnapshot = b;
+            r(c) && g({ inst: c });
           },
-          138: function(e, r, t) {
-            if (true) {
-              e.exports = t(403);
-            } else {
-            }
+          [a, d, b]
+        );
+        m(
+          function() {
+            r(c) && g({ inst: c });
+            return a(function() {
+              r(c) && g({ inst: c });
+            });
           },
-          522: function(e) {
-            e.exports = __webpack_require__(7294);
-          }
-        };
-        var r = {};
-        function __nccwpck_require__(t) {
-          var u = r[t];
-          if (u !== undefined) {
-            return u.exports;
-          }
-          var n = (r[t] = { exports: {} });
-          var a = true;
-          try {
-            e[t](n, n.exports, __nccwpck_require__);
-            a = false;
-          } finally {
-            if (a) delete r[t];
-          }
-          return n.exports;
+          [a]
+        );
+        p(d);
+        return d;
+      }
+      function r(a) {
+        var b = a.getSnapshot;
+        a = a.value;
+        try {
+          var d = b();
+          return !k(a, d);
+        } catch (f) {
+          return !0;
         }
-        if (typeof __nccwpck_require__ !== "undefined")
-          __nccwpck_require__.ab = __dirname + "/";
-        var t = __nccwpck_require__(138);
-        module.exports = t;
-      })();
+      }
+      function t(a, b) {
+        return b();
+      }
+      var u =
+        "undefined" === typeof window ||
+        "undefined" === typeof window.document ||
+        "undefined" === typeof window.document.createElement
+          ? t
+          : q;
+      exports.useSyncExternalStore =
+        void 0 !== e.useSyncExternalStore ? e.useSyncExternalStore : u;
 
       /***/
     },
 
-    /***/ 5152: /***/ function(
+    /***/ 1688: /***/ function(
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      module.exports = __webpack_require__(7645);
+      "use strict";
+
+      if (true) {
+        module.exports = __webpack_require__(3250);
+      } else {
+      }
 
       /***/
     }

Default Build with SWC (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary SukkaW/next.js use-sync-external-store Change
buildDuration 17.8s 17.6s -222ms
buildDurationCached 6.3s 6.4s ⚠️ +21ms
nodeModulesSize 475 MB 475 MB ⚠️ +33.8 kB
Page Load Tests Overall increase ✓
vercel/next.js canary SukkaW/next.js use-sync-external-store Change
/ failed reqs 0 0
/ total time (seconds) 3.761 3.755 -0.01
/ avg req/sec 664.65 665.83 +1.18
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.21 1.173 -0.04
/error-in-render avg req/sec 2065.9 2131.24 +65.34
Client Bundles (main, webpack)
vercel/next.js canary SukkaW/next.js use-sync-external-store Change
925.HASH.js gzip 178 B 178 B
framework-HASH.js gzip 42.2 kB 42.2 kB
main-HASH.js gzip 29.2 kB 29.2 kB
webpack-HASH.js gzip 1.45 kB 1.45 kB
Overall change 73.1 kB 73.1 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary SukkaW/next.js use-sync-external-store Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages Overall decrease ✓
vercel/next.js canary SukkaW/next.js use-sync-external-store Change
_app-HASH.js gzip 1.35 kB 1.35 kB
_error-HASH.js gzip 179 B 179 B
amp-HASH.js gzip 312 B 312 B
css-HASH.js gzip 324 B 324 B
dynamic-HASH.js gzip 3.08 kB 2.71 kB -368 B
head-HASH.js gzip 357 B 357 B
hooks-HASH.js gzip 921 B 921 B
image-HASH.js gzip 5.79 kB 5.79 kB
index-HASH.js gzip 261 B 261 B
link-HASH.js gzip 2.76 kB 2.76 kB
routerDirect..HASH.js gzip 322 B 322 B
script-HASH.js gzip 392 B 392 B
withRouter-HASH.js gzip 317 B 317 B
85e02e95b279..7e3.css gzip 107 B 107 B
Overall change 16.5 kB 16.1 kB -368 B
Client Build Manifests
vercel/next.js canary SukkaW/next.js use-sync-external-store Change
_buildManifest.js gzip 456 B 456 B
Overall change 456 B 456 B
Rendered Page Sizes
vercel/next.js canary SukkaW/next.js use-sync-external-store Change
index.html gzip 529 B 529 B
link.html gzip 543 B 543 B
withRouter.html gzip 526 B 526 B
Overall change 1.6 kB 1.6 kB

Diffs

Diff for _buildManifest.js
@@ -8,7 +8,7 @@ self.__BUILD_MANIFEST = {
     "static\u002Fchunks\u002Fpages\u002Fcss-436fa6bb26fc4120.js"
   ],
   "/dynamic": [
-    "static\u002Fchunks\u002Fpages\u002Fdynamic-80f5580e1c1b8ce3.js"
+    "static\u002Fchunks\u002Fpages\u002Fdynamic-8e11b4c2953d70e9.js"
   ],
   "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-544bb68363445a0e.js"],
   "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-c1372eeb4916d32c.js"],
Diff for dynamic-HASH.js
@@ -255,7 +255,7 @@
       });
       exports["default"] = void 0;
       var _react = _interopRequireDefault(__webpack_require__(7294));
-      var _useSubscription = __webpack_require__(2021);
+      var _shim = __webpack_require__(1688);
       var _loadableContext = __webpack_require__(3644);
       function _interopRequireDefault(obj) {
         return obj && obj.__esModule
@@ -308,7 +308,11 @@
           var context = _react.default.useContext(
             _loadableContext.LoadableContext
           );
-          var state = (0, _useSubscription).useSubscription(subscription);
+          var state = (0, _shim).useSyncExternalStore(
+            subscription.subscribe,
+            subscription.getCurrentValue,
+            subscription.getCurrentValue
+          );
           _react.default.useImperativeHandle(
             ref,
             function() {
@@ -368,7 +372,7 @@
         if (opts.suspense) {
           opts.lazy = _react.default.lazy(opts.loader);
         }
-        var subscription = null;
+        /** @type LoadableSubscription */ var subscription = null;
         // Server only
         if (false) {
         }
@@ -631,195 +635,103 @@
       /***/
     },
 
-    /***/ 2021: /***/ function(
+    /***/ 5152: /***/ function(
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      var __dirname = "/";
-      (function() {
-        "use strict";
-        var e = {
-          800: function(e) {
-            /*
-object-assign
-(c) Sindre Sorhus
-@license MIT
-*/
-            var r = Object.getOwnPropertySymbols;
-            var t = Object.prototype.hasOwnProperty;
-            var u = Object.prototype.propertyIsEnumerable;
-            function toObject(e) {
-              if (e === null || e === undefined) {
-                throw new TypeError(
-                  "Object.assign cannot be called with null or undefined"
-                );
-              }
-              return Object(e);
-            }
-            function shouldUseNative() {
-              try {
-                if (!Object.assign) {
-                  return false;
-                }
-                var e = new String("abc");
-                e[5] = "de";
-                if (Object.getOwnPropertyNames(e)[0] === "5") {
-                  return false;
-                }
-                var r = {};
-                for (var t = 0; t < 10; t++) {
-                  r["_" + String.fromCharCode(t)] = t;
-                }
-                var u = Object.getOwnPropertyNames(r).map(function(e) {
-                  return r[e];
-                });
-                if (u.join("") !== "0123456789") {
-                  return false;
-                }
-                var n = {};
-                "abcdefghijklmnopqrst".split("").forEach(function(e) {
-                  n[e] = e;
-                });
-                if (
-                  Object.keys(Object.assign({}, n)).join("") !==
-                  "abcdefghijklmnopqrst"
-                ) {
-                  return false;
-                }
-                return true;
-              } catch (e) {
-                return false;
-              }
-            }
-            e.exports = shouldUseNative()
-              ? Object.assign
-              : function(e, n) {
-                  var a;
-                  var i = toObject(e);
-                  var s;
-                  for (var c = 1; c < arguments.length; c++) {
-                    a = Object(arguments[c]);
-                    for (var o in a) {
-                      if (t.call(a, o)) {
-                        i[o] = a[o];
-                      }
-                    }
-                    if (r) {
-                      s = r(a);
-                      for (var f = 0; f < s.length; f++) {
-                        if (u.call(a, s[f])) {
-                          i[s[f]] = a[s[f]];
-                        }
-                      }
-                    }
-                  }
-                  return i;
-                };
-          },
-          569: function(e, r, t) {
-            /** @license React vundefined
-             * use-subscription.development.js
-             *
-             * Copyright (c) Facebook, Inc. and its affiliates.
-             *
-             * This source code is licensed under the MIT license found in the
-             * LICENSE file in the root directory of this source tree.
-             */
-            if (false) {
-            }
-          },
-          403: function(e, r, t) {
-            /** @license React vundefined
-             * use-subscription.production.min.js
-             *
-             * Copyright (c) Facebook, Inc. and its affiliates.
-             *
-             * This source code is licensed under the MIT license found in the
-             * LICENSE file in the root directory of this source tree.
-             */
-            var u = t(800),
-              n = t(522);
-            r.useSubscription = function(e) {
-              var r = e.getCurrentValue,
-                t = e.subscribe,
-                a = n.useState(function() {
-                  return { getCurrentValue: r, subscribe: t, value: r() };
-                });
-              e = a[0];
-              var i = a[1];
-              a = e.value;
-              if (e.getCurrentValue !== r || e.subscribe !== t)
-                (a = r()), i({ getCurrentValue: r, subscribe: t, value: a });
-              n.useDebugValue(a);
-              n.useEffect(
-                function() {
-                  function b() {
-                    if (!e) {
-                      var n = r();
-                      i(function(e) {
-                        return e.getCurrentValue !== r ||
-                          e.subscribe !== t ||
-                          e.value === n
-                          ? e
-                          : u({}, e, { value: n });
-                      });
-                    }
-                  }
-                  var e = !1,
-                    n = t(b);
-                  b();
-                  return function() {
-                    e = !0;
-                    n();
-                  };
-                },
-                [r, t]
-              );
-              return a;
-            };
+      module.exports = __webpack_require__(7645);
+
+      /***/
+    },
+
+    /***/ 3250: /***/ function(
+      __unused_webpack_module,
+      exports,
+      __webpack_require__
+    ) {
+      "use strict";
+      /**
+       * @license React
+       * use-sync-external-store-shim.production.min.js
+       *
+       * Copyright (c) Facebook, Inc. and its affiliates.
+       *
+       * This source code is licensed under the MIT license found in the
+       * LICENSE file in the root directory of this source tree.
+       */
+      var e = __webpack_require__(7294);
+      function h(a, b) {
+        return (
+          (a === b && (0 !== a || 1 / a === 1 / b)) || (a !== a && b !== b)
+        );
+      }
+      var k = "function" === typeof Object.is ? Object.is : h,
+        l = e.useState,
+        m = e.useEffect,
+        n = e.useLayoutEffect,
+        p = e.useDebugValue;
+      function q(a, b) {
+        var d = b(),
+          f = l({ inst: { value: d, getSnapshot: b } }),
+          c = f[0].inst,
+          g = f[1];
+        n(
+          function() {
+            c.value = d;
+            c.getSnapshot = b;
+            r(c) && g({ inst: c });
           },
-          138: function(e, r, t) {
-            if (true) {
-              e.exports = t(403);
-            } else {
-            }
+          [a, d, b]
+        );
+        m(
+          function() {
+            r(c) && g({ inst: c });
+            return a(function() {
+              r(c) && g({ inst: c });
+            });
           },
-          522: function(e) {
-            e.exports = __webpack_require__(7294);
-          }
-        };
-        var r = {};
-        function __nccwpck_require__(t) {
-          var u = r[t];
-          if (u !== undefined) {
-            return u.exports;
-          }
-          var n = (r[t] = { exports: {} });
-          var a = true;
-          try {
-            e[t](n, n.exports, __nccwpck_require__);
-            a = false;
-          } finally {
-            if (a) delete r[t];
-          }
-          return n.exports;
+          [a]
+        );
+        p(d);
+        return d;
+      }
+      function r(a) {
+        var b = a.getSnapshot;
+        a = a.value;
+        try {
+          var d = b();
+          return !k(a, d);
+        } catch (f) {
+          return !0;
         }
-        if (typeof __nccwpck_require__ !== "undefined")
-          __nccwpck_require__.ab = __dirname + "/";
-        var t = __nccwpck_require__(138);
-        module.exports = t;
-      })();
+      }
+      function t(a, b) {
+        return b();
+      }
+      var u =
+        "undefined" === typeof window ||
+        "undefined" === typeof window.document ||
+        "undefined" === typeof window.document.createElement
+          ? t
+          : q;
+      exports.useSyncExternalStore =
+        void 0 !== e.useSyncExternalStore ? e.useSyncExternalStore : u;
 
       /***/
     },
 
-    /***/ 5152: /***/ function(
+    /***/ 1688: /***/ function(
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      module.exports = __webpack_require__(7645);
+      "use strict";
+
+      if (true) {
+        module.exports = __webpack_require__(3250);
+      } else {
+      }
 
       /***/
     }
Commit: 90359a1

Copy link
Member

@huozhi huozhi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

@kodiakhq kodiakhq bot merged commit 26459ef into vercel:canary May 8, 2022
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Jun 8, 2022
@SukkaW SukkaW deleted the use-sync-external-store branch October 24, 2023 08:35
# for free to subscribe to this conversation on GitHub. Already have an account? #.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants