Socket
Socket
Sign inDemoInstall

use-sync-external-store

Package Overview
Dependencies
1
Maintainers
1
Versions
1225
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.0.0-experimental-33226fada-20210913 to 0.0.0-experimental-3ee7a004e-20210920

69

cjs/use-sync-external-store-extra.development.js

@@ -32,7 +32,23 @@ /** @license React vundefined

var useMemo = React.useMemo,
var useRef = React.useRef,
useEffect = React.useEffect,
useMemo = React.useMemo,
useDebugValue = React.useDebugValue; // Same as useSyncExternalStore, but supports selector and isEqual arguments.
function useSyncExternalStoreExtra(subscribe, getSnapshot, selector, isEqual) {
var getSnapshotWithMemoizedSelector = useMemo(function () {
function useSyncExternalStoreExtra(subscribe, getSnapshot, getServerSnapshot, selector, isEqual) {
// Use this to track the rendered snapshot.
var instRef = useRef(null);
var inst;
if (instRef.current === null) {
inst = {
hasValue: false,
value: null
};
instRef.current = inst;
} else {
inst = instRef.current;
}
var _useMemo = useMemo(function () {
// Track the memoized state using closure variables that are local to this

@@ -45,5 +61,4 @@ // memoized instance of a getSnapshot function. Intentionally not using a

var memoizedSelection;
return function () {
var nextSnapshot = getSnapshot();
var memoizedSelector = function (nextSnapshot) {
if (!hasMemo) {

@@ -56,2 +71,16 @@ // The first time the hook is called, there is no memoized result.

if (isEqual !== undefined) {
// Even if the selector has changed, the currently rendered selection
// may be equal to the new selection. We should attempt to reuse the
// current value if possible, to preserve downstream memoizations.
if (inst.hasValue) {
var currentSelection = inst.value;
if (isEqual(currentSelection, _nextSelection)) {
memoizedSelection = currentSelection;
return currentSelection;
}
}
}
memoizedSelection = _nextSelection;

@@ -62,2 +91,3 @@ return _nextSelection;

// We may be able to reuse the previous invocation's result.
var prevSnapshot = memoizedSnapshot;

@@ -72,2 +102,3 @@ var prevSelection = memoizedSelection;

// The snapshot has changed, so we need to compute a new selection.
memoizedSnapshot = nextSnapshot;

@@ -79,2 +110,6 @@ var nextSelection = selector(nextSnapshot); // If a custom isEqual function is provided, use that to check if the data

// If a custom isEqual function is provided, use that to check if the data
// has changed. If it hasn't, return the previous selection. That signals
// to React that the selections are conceptually equal, and we can bail
// out of rendering.
if (isEqual !== undefined && isEqual(prevSelection, nextSelection)) {

@@ -86,5 +121,25 @@ return prevSelection;

return nextSelection;
}; // Assigning this to a constant so that Flow knows it can't change.
// Assigning this to a constant so that Flow knows it can't change.
var maybeGetServerSnapshot = getServerSnapshot === undefined ? null : getServerSnapshot;
var getSnapshotWithSelector = function () {
return memoizedSelector(getSnapshot());
};
}, [getSnapshot, selector, isEqual]);
var value = useSyncExternalStore.useSyncExternalStore(subscribe, getSnapshotWithMemoizedSelector);
var getServerSnapshotWithSelector = maybeGetServerSnapshot === null ? undefined : function () {
return memoizedSelector(maybeGetServerSnapshot());
};
return [getSnapshotWithSelector, getServerSnapshotWithSelector];
}, [getSnapshot, getServerSnapshot, selector, isEqual]),
getSelection = _useMemo[0],
getServerSelection = _useMemo[1];
var value = useSyncExternalStore.useSyncExternalStore(subscribe, getSelection, getServerSelection);
useEffect(function () {
inst.hasValue = true;
inst.value = value;
}, [value]);
useDebugValue(value);

@@ -91,0 +146,0 @@ return value;

4

cjs/use-sync-external-store-extra.production.min.js

@@ -9,2 +9,4 @@ /** @license React vundefined

*/
'use strict';var k=require("react"),l=require("use-sync-external-store");function m(a,c){return a===c&&(0!==a||1/a===1/c)||a!==a&&c!==c}var n="function"===typeof Object.is?Object.is:m,p=k.useMemo,q=k.useDebugValue;exports.useSyncExternalStoreExtra=function(a,c,e,f){var r=p(function(){var a=!1,g,h;return function(){var b=c();if(!a){a=!0;g=b;var d=e(b);return h=d}d=h;if(n(g,b))return d;g=b;b=e(b);return void 0!==f&&f(d,b)?d:h=b}},[c,e,f]);a=l.useSyncExternalStore(a,r);q(a);return a};
'use strict';var h=require("react"),p=require("use-sync-external-store");function q(a,e){return a===e&&(0!==a||1/a===1/e)||a!==a&&e!==e}var r="function"===typeof Object.is?Object.is:q,t=h.useRef,u=h.useEffect,v=h.useMemo,w=h.useDebugValue;
exports.useSyncExternalStoreExtra=function(a,e,l,m,g){var c=t(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f}else f=c.current;c=v(function(){function a(b){if(!c){c=!0;d=b;var a=m(b);return void 0!==g&&f.hasValue&&(b=f.value,g(b,a))?k=b:k=a}a=k;if(r(d,b))return a;d=b;b=m(b);return void 0!==g&&g(a,b)?a:k=b}var c=!1,d,k,n=void 0===l?null:l;return[function(){return a(e())},null===n?void 0:function(){return a(n())}]},[e,l,m,g]);var d=p.useSyncExternalStore(a,c[0],c[1]);u(function(){f.hasValue=
!0;f.value=d},[d]);w(d);return d};

@@ -67,2 +67,4 @@ /** @license React vundefined

var canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');
// dispatch for CommonJS interop named imports.

@@ -74,9 +76,24 @@

useDebugValue = React.useDebugValue,
builtInAPI = React.useSyncExternalStore; // Prefer the built-in API, if it exists. If it doesn't exist, then we assume
builtInAPI = React.unstable_useSyncExternalStore; // TODO: This heuristic doesn't work in React Native. We'll need to provide a
// special build, using the `.native` extension.
var isServerEnvironment = !canUseDOM; // Prefer the built-in API, if it exists. If it doesn't exist, then we assume
// we're in version 16 or 17, so rendering is always synchronous. The shim
// does not support concurrent rendering, only the built-in API.
var useSyncExternalStore = builtInAPI !== undefined ? builtInAPI : useSyncExternalStore_shim;
var useSyncExternalStore = builtInAPI !== undefined ? builtInAPI : isServerEnvironment ? useSyncExternalStore_server : useSyncExternalStore_client;
var didWarnOld18Alpha = false;
var didWarnUncachedGetSnapshot = false; // Disclaimer: This shim breaks many of the rules of React, and only works
var didWarnUncachedGetSnapshot = false;
function useSyncExternalStore_server(subscribe, getSnapshot, getServerSnapshot) {
if (getServerSnapshot === undefined) {
{
{
throw Error( "Missing getServerSnapshot, which is required for server-rendered content." );
}
}
}
return getServerSnapshot();
} // Disclaimer: This shim breaks many of the rules of React, and only works
// because of a very particular set of implementation details and assumptions

@@ -92,3 +109,8 @@ // -- change any one of them and it will break. The most important assumption

function useSyncExternalStore_shim(subscribe, getSnapshot) {
function useSyncExternalStore_client(subscribe, getSnapshot, // Note: The client shim does not use getServerSnapshot, because pre-18
// versions of React do not expose a way to check if we're hydrating. So
// users of the shim will need to track that themselves and return the
// correct value from `getSnapshot`.
getServerSnapshot) {
{

@@ -144,3 +166,2 @@ if (!didWarnOld18Alpha) {

// happens on subscribe.
// TODO: Circumvent SSR warning

@@ -147,0 +168,0 @@

@@ -9,3 +9,4 @@ /** @license React vundefined

*/
'use strict';var e=require("react");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,q=e.useSyncExternalStore;function r(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;t(c)&&g({inst:c})},[a,d,b]);m(function(){t(c)&&g({inst:c});return a(function(){t(c)&&g({inst:c})})},[a]);p(d);return d}
function t(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}exports.useSyncExternalStore=void 0!==q?q:r;
'use strict';var e=require("react");function h(a){for(var b="https://reactjs.org/docs/error-decoder.html?invariant="+a,c=1;c<arguments.length;c++)b+="&args[]="+encodeURIComponent(arguments[c]);return"Minified React error #"+a+"; visit "+b+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function k(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}
var l="function"===typeof Object.is?Object.is:k,m=e.useState,n=e.useEffect,p=e.useLayoutEffect,q=e.useDebugValue,r=e.unstable_useSyncExternalStore,t=!("undefined"!==typeof window&&"undefined"!==typeof window.document&&"undefined"!==typeof window.document.createElement);function u(a,b,c){if(void 0===c)throw Error(h(408));return c()}
function v(a,b){var c=b(),f=m({inst:{value:c,getSnapshot:b}}),d=f[0].inst,g=f[1];p(function(){d.value=c;d.getSnapshot=b;w(d)&&g({inst:d})},[a,c,b]);n(function(){w(d)&&g({inst:d});return a(function(){w(d)&&g({inst:d})})},[a]);q(c);return c}function w(a){var b=a.getSnapshot;a=a.value;try{var c=b();return!l(a,c)}catch(f){return!0}}exports.useSyncExternalStore=void 0!==r?r:t?u:v;
{
"name": "use-sync-external-store",
"description": "Backwards compatible shim for React's useSyncExternalStore. Works with any React that supports hooks.",
"version": "0.0.0-experimental-33226fada-20210913",
"version": "0.0.0-experimental-3ee7a004e-20210920",
"repository": {

@@ -20,4 +20,4 @@ "type": "git",

"peerDependencies": {
"react": "0.0.0-experimental-33226fada-20210913"
"react": "0.0.0-experimental-3ee7a004e-20210920"
}
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc