2023-02-07 08:04:52 +01:00
/ * *
* @ license React
2018-12-14 05:41:57 +01:00
* react . 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 .
* /
( function ( global , factory ) {
2020-10-16 01:08:26 +02:00
typeof exports === 'object' && typeof module !== 'undefined' ? factory ( exports ) :
typeof define === 'function' && define . amd ? define ( [ 'exports' ] , factory ) :
( global = global || self , factory ( global . React = { } ) ) ;
} ( this , ( function ( exports ) { 'use strict' ;
2023-02-07 08:04:52 +01:00
var ReactVersion = '18.2.0' ;
2020-10-16 01:08:26 +02:00
2021-11-12 01:05:15 +01:00
// ATTENTION
// When adding new symbols to this file,
// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'
2023-02-07 08:04:52 +01:00
// The Symbol used to tag the ReactElement-like types.
var REACT _ELEMENT _TYPE = Symbol . for ( 'react.element' ) ;
var REACT _PORTAL _TYPE = Symbol . for ( 'react.portal' ) ;
var REACT _FRAGMENT _TYPE = Symbol . for ( 'react.fragment' ) ;
var REACT _STRICT _MODE _TYPE = Symbol . for ( 'react.strict_mode' ) ;
var REACT _PROFILER _TYPE = Symbol . for ( 'react.profiler' ) ;
var REACT _PROVIDER _TYPE = Symbol . for ( 'react.provider' ) ;
var REACT _CONTEXT _TYPE = Symbol . for ( 'react.context' ) ;
var REACT _FORWARD _REF _TYPE = Symbol . for ( 'react.forward_ref' ) ;
var REACT _SUSPENSE _TYPE = Symbol . for ( 'react.suspense' ) ;
var REACT _SUSPENSE _LIST _TYPE = Symbol . for ( 'react.suspense_list' ) ;
var REACT _MEMO _TYPE = Symbol . for ( 'react.memo' ) ;
var REACT _LAZY _TYPE = Symbol . for ( 'react.lazy' ) ;
var REACT _OFFSCREEN _TYPE = Symbol . for ( 'react.offscreen' ) ;
var MAYBE _ITERATOR _SYMBOL = Symbol . iterator ;
2020-10-16 01:08:26 +02:00
var FAUX _ITERATOR _SYMBOL = '@@iterator' ;
function getIteratorFn ( maybeIterable ) {
if ( maybeIterable === null || typeof maybeIterable !== 'object' ) {
return null ;
}
var maybeIterator = MAYBE _ITERATOR _SYMBOL && maybeIterable [ MAYBE _ITERATOR _SYMBOL ] || maybeIterable [ FAUX _ITERATOR _SYMBOL ] ;
if ( typeof maybeIterator === 'function' ) {
return maybeIterator ;
}
2018-12-14 05:41:57 +01:00
return null ;
}
2020-10-16 01:08:26 +02:00
/ * *
* Keeps track of the current dispatcher .
* /
var ReactCurrentDispatcher = {
/ * *
* @ internal
* @ type { ReactComponent }
* /
current : null
} ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
/ * *
* Keeps track of the current batch ' s configuration such as how long an update
* should suspend for if it needs to .
* /
var ReactCurrentBatchConfig = {
2023-02-07 08:04:52 +01:00
transition : null
} ;
var ReactCurrentActQueue = {
current : null ,
// Used to reproduce behavior of `batchedUpdates` in legacy mode.
isBatchingLegacy : false ,
didScheduleLegacyUpdate : false
2020-10-16 01:08:26 +02:00
} ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
/ * *
* Keeps track of the current owner .
*
* The current owner is the component who should own any components that are
* currently being constructed .
* /
var ReactCurrentOwner = {
/ * *
* @ internal
* @ type { ReactComponent }
* /
current : null
2018-12-14 05:41:57 +01:00
} ;
2020-10-16 01:08:26 +02:00
var ReactDebugCurrentFrame = { } ;
2021-11-12 01:05:15 +01:00
var currentExtraStackFrame = null ;
function setExtraStackFrame ( stack ) {
2020-10-16 01:08:26 +02:00
{
2021-11-12 01:05:15 +01:00
currentExtraStackFrame = stack ;
Block Editor: Update `@wordpress` dependencies to match Gutenberg 4.5.1.
- Update the annotations, api-fetch, block-library, blocks, components, compose, core-data, data, date, dom, edit-post, editor, element, format-library, html-entities, i18n, jest-console, jest-preset-default, keycodes, list-reusable-blocks, notices, nux, plugins, rich-text, scripts, token-lists, url, viewport packages.
- Upgrades React from 16.5.2 to 16.6.3.
- Adds a missing `wp-date` dependency to the editor script.
- Updates changed dependencies in `script-loader.php`.
- Fixes undefined notices in some blocks.
- Removes incorrect `gutenberg` textdomain.
Merges [43891], [43903], and [43919] to trunk.
Props atimmer, aduth, youknowriad, danielbachhuber.
See #45145.
Built from https://develop.svn.wordpress.org/trunk@44262
git-svn-id: http://core.svn.wordpress.org/trunk@44092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-17 16:37:00 +01:00
}
}
2020-10-16 01:08:26 +02:00
{
2021-11-12 01:05:15 +01:00
ReactDebugCurrentFrame . setExtraStackFrame = function ( stack ) {
{
currentExtraStackFrame = stack ;
}
} ; // Stack implementation injected by the current renderer.
2020-10-16 01:08:26 +02:00
ReactDebugCurrentFrame . getCurrentStack = null ;
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
ReactDebugCurrentFrame . getStackAddendum = function ( ) {
var stack = '' ; // Add an extra top frame while an element is being validated
2019-09-25 10:20:57 +02:00
2021-11-12 01:05:15 +01:00
if ( currentExtraStackFrame ) {
stack += currentExtraStackFrame ;
2020-10-16 01:08:26 +02:00
} // Delegate to the injected renderer-specific implementation
2018-12-14 05:41:57 +01:00
2019-03-21 13:48:00 +01:00
2020-10-16 01:08:26 +02:00
var impl = ReactDebugCurrentFrame . getCurrentStack ;
2019-03-21 13:48:00 +01:00
2020-10-16 01:08:26 +02:00
if ( impl ) {
stack += impl ( ) || '' ;
}
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
return stack ;
} ;
}
2019-09-25 10:20:57 +02:00
2023-02-07 08:04:52 +01:00
// -----------------------------------------------------------------------------
var enableScopeAPI = false ; // Experimental Create Event Handle API.
var enableCacheElement = false ;
var enableTransitionTracing = false ; // No known bugs, but needs performance testing
var enableLegacyHidden = false ; // Enables unstable_avoidThisFallback feature in Fiber
// stuff. Intended to enable React core members to more easily debug scheduling
// issues in DEV builds.
var enableDebugTracing = false ; // Track which Fiber(s) schedule render work.
Block Editor: Update `@wordpress` dependencies to match Gutenberg 4.5.1.
- Update the annotations, api-fetch, block-library, blocks, components, compose, core-data, data, date, dom, edit-post, editor, element, format-library, html-entities, i18n, jest-console, jest-preset-default, keycodes, list-reusable-blocks, notices, nux, plugins, rich-text, scripts, token-lists, url, viewport packages.
- Upgrades React from 16.5.2 to 16.6.3.
- Adds a missing `wp-date` dependency to the editor script.
- Updates changed dependencies in `script-loader.php`.
- Fixes undefined notices in some blocks.
- Removes incorrect `gutenberg` textdomain.
Merges [43891], [43903], and [43919] to trunk.
Props atimmer, aduth, youknowriad, danielbachhuber.
See #45145.
Built from https://develop.svn.wordpress.org/trunk@44262
git-svn-id: http://core.svn.wordpress.org/trunk@44092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-17 16:37:00 +01:00
2020-10-16 01:08:26 +02:00
var ReactSharedInternals = {
ReactCurrentDispatcher : ReactCurrentDispatcher ,
ReactCurrentBatchConfig : ReactCurrentBatchConfig ,
2023-02-07 08:04:52 +01:00
ReactCurrentOwner : ReactCurrentOwner
2020-10-16 01:08:26 +02:00
} ;
Block Editor: Update `@wordpress` dependencies to match Gutenberg 4.5.1.
- Update the annotations, api-fetch, block-library, blocks, components, compose, core-data, data, date, dom, edit-post, editor, element, format-library, html-entities, i18n, jest-console, jest-preset-default, keycodes, list-reusable-blocks, notices, nux, plugins, rich-text, scripts, token-lists, url, viewport packages.
- Upgrades React from 16.5.2 to 16.6.3.
- Adds a missing `wp-date` dependency to the editor script.
- Updates changed dependencies in `script-loader.php`.
- Fixes undefined notices in some blocks.
- Removes incorrect `gutenberg` textdomain.
Merges [43891], [43903], and [43919] to trunk.
Props atimmer, aduth, youknowriad, danielbachhuber.
See #45145.
Built from https://develop.svn.wordpress.org/trunk@44262
git-svn-id: http://core.svn.wordpress.org/trunk@44092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-17 16:37:00 +01:00
2020-10-16 01:08:26 +02:00
{
2021-11-12 01:05:15 +01:00
ReactSharedInternals . ReactDebugCurrentFrame = ReactDebugCurrentFrame ;
2023-02-07 08:04:52 +01:00
ReactSharedInternals . ReactCurrentActQueue = ReactCurrentActQueue ;
2020-10-16 01:08:26 +02:00
}
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
// by calls to these methods by a Babel plugin.
//
// In PROD (or in packages without access to React internals),
// they are left as they are instead.
2019-03-21 13:48:00 +01:00
2020-10-16 01:08:26 +02:00
function warn ( format ) {
{
2023-02-07 08:04:52 +01:00
{
for ( var _len = arguments . length , args = new Array ( _len > 1 ? _len - 1 : 0 ) , _key = 1 ; _key < _len ; _key ++ ) {
args [ _key - 1 ] = arguments [ _key ] ;
}
2019-03-21 13:48:00 +01:00
2023-02-07 08:04:52 +01:00
printWarning ( 'warn' , format , args ) ;
}
2019-09-25 10:20:57 +02:00
}
2020-10-16 01:08:26 +02:00
}
function error ( format ) {
{
2023-02-07 08:04:52 +01:00
{
for ( var _len2 = arguments . length , args = new Array ( _len2 > 1 ? _len2 - 1 : 0 ) , _key2 = 1 ; _key2 < _len2 ; _key2 ++ ) {
args [ _key2 - 1 ] = arguments [ _key2 ] ;
}
2018-12-14 05:41:57 +01:00
2023-02-07 08:04:52 +01:00
printWarning ( 'error' , format , args ) ;
}
Block Editor: Update `@wordpress` dependencies to match Gutenberg 4.5.1.
- Update the annotations, api-fetch, block-library, blocks, components, compose, core-data, data, date, dom, edit-post, editor, element, format-library, html-entities, i18n, jest-console, jest-preset-default, keycodes, list-reusable-blocks, notices, nux, plugins, rich-text, scripts, token-lists, url, viewport packages.
- Upgrades React from 16.5.2 to 16.6.3.
- Adds a missing `wp-date` dependency to the editor script.
- Updates changed dependencies in `script-loader.php`.
- Fixes undefined notices in some blocks.
- Removes incorrect `gutenberg` textdomain.
Merges [43891], [43903], and [43919] to trunk.
Props atimmer, aduth, youknowriad, danielbachhuber.
See #45145.
Built from https://develop.svn.wordpress.org/trunk@44262
git-svn-id: http://core.svn.wordpress.org/trunk@44092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-17 16:37:00 +01:00
}
2020-10-16 01:08:26 +02:00
}
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
function printWarning ( level , format , args ) {
// When changing this logic, you might want to also
// update consoleWithStackDev.www.js as well.
{
2021-11-12 01:05:15 +01:00
var ReactDebugCurrentFrame = ReactSharedInternals . ReactDebugCurrentFrame ;
var stack = ReactDebugCurrentFrame . getStackAddendum ( ) ;
Block Editor: Update `@wordpress` dependencies to match Gutenberg 4.5.1.
- Update the annotations, api-fetch, block-library, blocks, components, compose, core-data, data, date, dom, edit-post, editor, element, format-library, html-entities, i18n, jest-console, jest-preset-default, keycodes, list-reusable-blocks, notices, nux, plugins, rich-text, scripts, token-lists, url, viewport packages.
- Upgrades React from 16.5.2 to 16.6.3.
- Adds a missing `wp-date` dependency to the editor script.
- Updates changed dependencies in `script-loader.php`.
- Fixes undefined notices in some blocks.
- Removes incorrect `gutenberg` textdomain.
Merges [43891], [43903], and [43919] to trunk.
Props atimmer, aduth, youknowriad, danielbachhuber.
See #45145.
Built from https://develop.svn.wordpress.org/trunk@44262
git-svn-id: http://core.svn.wordpress.org/trunk@44092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-17 16:37:00 +01:00
2021-11-12 01:05:15 +01:00
if ( stack !== '' ) {
format += '%s' ;
args = args . concat ( [ stack ] ) ;
2023-02-07 08:04:52 +01:00
} // eslint-disable-next-line react-internal/safe-string-coercion
Block Editor: Update `@wordpress` dependencies to match Gutenberg 4.5.1.
- Update the annotations, api-fetch, block-library, blocks, components, compose, core-data, data, date, dom, edit-post, editor, element, format-library, html-entities, i18n, jest-console, jest-preset-default, keycodes, list-reusable-blocks, notices, nux, plugins, rich-text, scripts, token-lists, url, viewport packages.
- Upgrades React from 16.5.2 to 16.6.3.
- Adds a missing `wp-date` dependency to the editor script.
- Updates changed dependencies in `script-loader.php`.
- Fixes undefined notices in some blocks.
- Removes incorrect `gutenberg` textdomain.
Merges [43891], [43903], and [43919] to trunk.
Props atimmer, aduth, youknowriad, danielbachhuber.
See #45145.
Built from https://develop.svn.wordpress.org/trunk@44262
git-svn-id: http://core.svn.wordpress.org/trunk@44092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-17 16:37:00 +01:00
2020-10-16 01:08:26 +02:00
var argsWithFormat = args . map ( function ( item ) {
2023-02-07 08:04:52 +01:00
return String ( item ) ;
2020-10-16 01:08:26 +02:00
} ) ; // Careful: RN currently depends on this prefix
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
argsWithFormat . unshift ( 'Warning: ' + format ) ; // We intentionally don't use spread (or .apply) directly because it
// breaks IE9: https://github.com/facebook/react/issues/13610
// eslint-disable-next-line react-internal/no-production-logging
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
Function . prototype . apply . call ( console [ level ] , console , argsWithFormat ) ;
2018-12-14 05:41:57 +01:00
}
}
2019-03-21 13:48:00 +01:00
2020-10-16 01:08:26 +02:00
var didWarnStateUpdateForUnmountedComponent = { } ;
function warnNoop ( publicInstance , callerName ) {
{
var _constructor = publicInstance . constructor ;
var componentName = _constructor && ( _constructor . displayName || _constructor . name ) || 'ReactClass' ;
var warningKey = componentName + "." + callerName ;
if ( didWarnStateUpdateForUnmountedComponent [ warningKey ] ) {
return ;
2019-09-25 10:20:57 +02:00
}
2020-10-16 01:08:26 +02:00
error ( "Can't call %s on a component that is not yet mounted. " + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.' , callerName , componentName ) ;
didWarnStateUpdateForUnmountedComponent [ warningKey ] = true ;
2019-09-25 10:20:57 +02:00
}
2019-03-21 13:48:00 +01:00
}
2020-10-16 01:08:26 +02:00
/ * *
* This is the abstract API for an update queue .
* /
2019-03-21 13:48:00 +01:00
2020-10-16 01:08:26 +02:00
var ReactNoopUpdateQueue = {
/ * *
* Checks whether or not this composite component is mounted .
* @ param { ReactClass } publicInstance The instance we want to test .
* @ return { boolean } True if mounted , false otherwise .
* @ protected
* @ final
* /
isMounted : function ( publicInstance ) {
return false ;
} ,
/ * *
* Forces an update . This should only be invoked when it is known with
* certainty that we are * * not * * in a DOM transaction .
*
* You may want to call this when you know that some deeper aspect of the
* component ' s state has changed but ` setState ` was not called .
*
* This will not invoke ` shouldComponentUpdate ` , but it will invoke
* ` componentWillUpdate ` and ` componentDidUpdate ` .
*
* @ param { ReactClass } publicInstance The instance that should rerender .
* @ param { ? function } callback Called after component is updated .
* @ param { ? string } callerName name of the calling function in the public API .
* @ internal
* /
enqueueForceUpdate : function ( publicInstance , callback , callerName ) {
warnNoop ( publicInstance , 'forceUpdate' ) ;
} ,
/ * *
* Replaces all of the state . Always use this or ` setState ` to mutate state .
* You should treat ` this.state ` as immutable .
*
* There is no guarantee that ` this.state ` will be immediately updated , so
* accessing ` this.state ` after calling this method may return the old value .
*
* @ param { ReactClass } publicInstance The instance that should rerender .
* @ param { object } completeState Next state .
* @ param { ? function } callback Called after component is updated .
* @ param { ? string } callerName name of the calling function in the public API .
* @ internal
* /
enqueueReplaceState : function ( publicInstance , completeState , callback , callerName ) {
warnNoop ( publicInstance , 'replaceState' ) ;
} ,
/ * *
* Sets a subset of the state . This only exists because _pendingState is
* internal . This provides a merging strategy that is not available to deep
* properties which is confusing . TODO : Expose pendingState or don ' t use it
* during the merge .
*
* @ param { ReactClass } publicInstance The instance that should rerender .
* @ param { object } partialState Next partial state to be merged with state .
* @ param { ? function } callback Called after component is updated .
* @ param { ? string } Name of the calling function in the public API .
* @ internal
* /
enqueueSetState : function ( publicInstance , partialState , callback , callerName ) {
warnNoop ( publicInstance , 'setState' ) ;
2018-12-14 05:41:57 +01:00
}
2019-09-25 10:20:57 +02:00
} ;
2018-12-14 05:41:57 +01:00
2023-02-07 08:04:52 +01:00
var assign = Object . assign ;
2020-10-16 01:08:26 +02:00
var emptyObject = { } ;
2018-12-14 05:41:57 +01:00
2019-09-25 10:20:57 +02:00
{
2020-10-16 01:08:26 +02:00
Object . freeze ( emptyObject ) ;
2019-09-25 10:20:57 +02:00
}
2020-10-16 01:08:26 +02:00
/ * *
* Base class helpers for the updating state of a component .
* /
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
function Component ( props , context , updater ) {
this . props = props ;
this . context = context ; // If a component has string refs, we will assign a different object later.
2019-03-21 13:48:00 +01:00
2020-10-16 01:08:26 +02:00
this . refs = emptyObject ; // We initialize the default updater but the real one gets injected by the
// renderer.
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
this . updater = updater || ReactNoopUpdateQueue ;
}
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
Component . prototype . isReactComponent = { } ;
/ * *
* Sets a subset of the state . Always use this to mutate
* state . You should treat ` this.state ` as immutable .
*
* There is no guarantee that ` this.state ` will be immediately updated , so
* accessing ` this.state ` after calling this method may return the old value .
*
* There is no guarantee that calls to ` setState ` will run synchronously ,
* as they may eventually be batched together . You can provide an optional
* callback that will be executed when the call to setState is actually
* completed .
*
* When a function is provided to setState , it will be called at some point in
* the future ( not synchronously ) . It will be called with the up to date
* component arguments ( state , props , context ) . These values can be different
* from this . * because your function may be called after receiveProps but before
* shouldComponentUpdate , and this new state , props , and context will not yet be
* assigned to this .
*
* @ param { object | function } partialState Next partial state or function to
* produce next partial state to be merged with current state .
* @ param { ? function } callback Called after state is updated .
* @ final
* @ protected
* /
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
Component . prototype . setState = function ( partialState , callback ) {
2023-02-07 08:04:52 +01:00
if ( typeof partialState !== 'object' && typeof partialState !== 'function' && partialState != null ) {
throw new Error ( 'setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.' ) ;
2020-10-16 01:08:26 +02:00
}
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
this . updater . enqueueSetState ( this , partialState , callback , 'setState' ) ;
} ;
/ * *
* Forces an update . This should only be invoked when it is known with
* certainty that we are * * not * * in a DOM transaction .
*
* You may want to call this when you know that some deeper aspect of the
* component ' s state has changed but ` setState ` was not called .
*
* This will not invoke ` shouldComponentUpdate ` , but it will invoke
* ` componentWillUpdate ` and ` componentDidUpdate ` .
*
* @ param { ? function } callback Called after update is complete .
* @ final
* @ protected
* /
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
Component . prototype . forceUpdate = function ( callback ) {
this . updater . enqueueForceUpdate ( this , callback , 'forceUpdate' ) ;
} ;
/ * *
* Deprecated APIs . These APIs used to exist on classic React classes but since
* we would like to deprecate them , we ' re not going to move them over to this
* modern base class . Instead , we define a getter that warns if it ' s accessed .
* /
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
{
var deprecatedAPIs = {
isMounted : [ 'isMounted' , 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.' ] ,
replaceState : [ 'replaceState' , 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).' ]
} ;
var defineDeprecationWarning = function ( methodName , info ) {
Object . defineProperty ( Component . prototype , methodName , {
get : function ( ) {
warn ( '%s(...) is deprecated in plain JavaScript React classes. %s' , info [ 0 ] , info [ 1 ] ) ;
return undefined ;
}
} ) ;
} ;
for ( var fnName in deprecatedAPIs ) {
if ( deprecatedAPIs . hasOwnProperty ( fnName ) ) {
defineDeprecationWarning ( fnName , deprecatedAPIs [ fnName ] ) ;
2019-09-25 10:20:57 +02:00
}
Block Editor: Update `@wordpress` dependencies to match Gutenberg 4.5.1.
- Update the annotations, api-fetch, block-library, blocks, components, compose, core-data, data, date, dom, edit-post, editor, element, format-library, html-entities, i18n, jest-console, jest-preset-default, keycodes, list-reusable-blocks, notices, nux, plugins, rich-text, scripts, token-lists, url, viewport packages.
- Upgrades React from 16.5.2 to 16.6.3.
- Adds a missing `wp-date` dependency to the editor script.
- Updates changed dependencies in `script-loader.php`.
- Fixes undefined notices in some blocks.
- Removes incorrect `gutenberg` textdomain.
Merges [43891], [43903], and [43919] to trunk.
Props atimmer, aduth, youknowriad, danielbachhuber.
See #45145.
Built from https://develop.svn.wordpress.org/trunk@44262
git-svn-id: http://core.svn.wordpress.org/trunk@44092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-17 16:37:00 +01:00
}
2019-09-25 10:20:57 +02:00
}
2020-10-16 01:08:26 +02:00
function ComponentDummy ( ) { }
ComponentDummy . prototype = Component . prototype ;
/ * *
* Convenience component with default shallow equality check for sCU .
* /
function PureComponent ( props , context , updater ) {
this . props = props ;
this . context = context ; // If a component has string refs, we will assign a different object later.
this . refs = emptyObject ;
this . updater = updater || ReactNoopUpdateQueue ;
2018-12-14 05:41:57 +01:00
}
2020-10-16 01:08:26 +02:00
var pureComponentPrototype = PureComponent . prototype = new ComponentDummy ( ) ;
pureComponentPrototype . constructor = PureComponent ; // Avoid an extra prototype jump for these methods.
2018-12-14 05:41:57 +01:00
2021-11-12 01:05:15 +01:00
assign ( pureComponentPrototype , Component . prototype ) ;
2020-10-16 01:08:26 +02:00
pureComponentPrototype . isPureReactComponent = true ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
// an immutable object with a single mutable value
function createRef ( ) {
var refObject = {
current : null
} ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
{
Object . seal ( refObject ) ;
2018-12-14 05:41:57 +01:00
}
2020-10-16 01:08:26 +02:00
return refObject ;
2019-09-25 10:20:57 +02:00
}
2018-12-14 05:41:57 +01:00
2023-02-07 08:04:52 +01:00
var isArrayImpl = Array . isArray ; // eslint-disable-next-line no-redeclare
function isArray ( a ) {
return isArrayImpl ( a ) ;
}
/ *
* The ` '' + value ` pattern ( used in in perf - sensitive code ) throws for Symbol
* and Temporal . * types . See https : //github.com/facebook/react/pull/22064.
*
* The functions in this module will throw an easier - to - understand ,
* easier - to - debug exception with a clear errors message message explaining the
* problem . ( Instead of a confusing exception thrown inside the implementation
* of the ` value ` object ) .
* /
// $FlowFixMe only called in DEV, so void return is not possible.
function typeName ( value ) {
{
// toStringTag is needed for namespaced types like Temporal.Instant
var hasToStringTag = typeof Symbol === 'function' && Symbol . toStringTag ;
var type = hasToStringTag && value [ Symbol . toStringTag ] || value . constructor . name || 'Object' ;
return type ;
}
} // $FlowFixMe only called in DEV, so void return is not possible.
function willCoercionThrow ( value ) {
{
try {
testStringCoercion ( value ) ;
return false ;
} catch ( e ) {
return true ;
}
}
}
function testStringCoercion ( value ) {
// If you ended up here by following an exception call stack, here's what's
// happened: you supplied an object or symbol value to React (as a prop, key,
// DOM attribute, CSS property, string ref, etc.) and when React tried to
// coerce it to a string using `'' + value`, an exception was thrown.
//
// The most common types that will cause this exception are `Symbol` instances
// and Temporal objects like `Temporal.Instant`. But any object that has a
// `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this
// exception. (Library authors do this to prevent users from using built-in
// numeric operators like `+` or comparison operators like `>=` because custom
// methods are needed to perform accurate arithmetic or comparison.)
//
// To fix the problem, coerce this object or symbol value to a string before
// passing it to React. The most reliable way is usually `String(value)`.
//
// To find which value is throwing, check the browser or debugger console.
// Before this exception was thrown, there should be `console.error` output
// that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the
// problem and how that type was used: key, atrribute, input value prop, etc.
// In most cases, this console output also shows the component and its
// ancestor components where the exception happened.
//
// eslint-disable-next-line react-internal/safe-string-coercion
return '' + value ;
}
function checkKeyStringCoercion ( value ) {
{
if ( willCoercionThrow ( value ) ) {
error ( 'The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.' , typeName ( value ) ) ;
return testStringCoercion ( value ) ; // throw (to help callers find troubleshooting comments)
}
}
}
2021-11-12 01:05:15 +01:00
function getWrappedName ( outerType , innerType , wrapperName ) {
2023-02-07 08:04:52 +01:00
var displayName = outerType . displayName ;
if ( displayName ) {
return displayName ;
}
2021-11-12 01:05:15 +01:00
var functionName = innerType . displayName || innerType . name || '' ;
2023-02-07 08:04:52 +01:00
return functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName ;
} // Keep in sync with react-reconciler/getComponentNameFromFiber
2021-11-12 01:05:15 +01:00
function getContextName ( type ) {
return type . displayName || 'Context' ;
2023-02-07 08:04:52 +01:00
} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.
2021-11-12 01:05:15 +01:00
2023-02-07 08:04:52 +01:00
function getComponentNameFromType ( type ) {
2021-11-12 01:05:15 +01:00
if ( type == null ) {
// Host root, text node or just invalid type.
return null ;
}
{
if ( typeof type . tag === 'number' ) {
2023-02-07 08:04:52 +01:00
error ( 'Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.' ) ;
2021-11-12 01:05:15 +01:00
}
}
if ( typeof type === 'function' ) {
return type . displayName || type . name || null ;
}
if ( typeof type === 'string' ) {
return type ;
}
switch ( type ) {
2023-02-07 08:04:52 +01:00
case REACT _FRAGMENT _TYPE :
2021-11-12 01:05:15 +01:00
return 'Fragment' ;
case REACT _PORTAL _TYPE :
return 'Portal' ;
2023-02-07 08:04:52 +01:00
case REACT _PROFILER _TYPE :
2021-11-12 01:05:15 +01:00
return 'Profiler' ;
2023-02-07 08:04:52 +01:00
case REACT _STRICT _MODE _TYPE :
2021-11-12 01:05:15 +01:00
return 'StrictMode' ;
2023-02-07 08:04:52 +01:00
case REACT _SUSPENSE _TYPE :
2021-11-12 01:05:15 +01:00
return 'Suspense' ;
case REACT _SUSPENSE _LIST _TYPE :
return 'SuspenseList' ;
2023-02-07 08:04:52 +01:00
2021-11-12 01:05:15 +01:00
}
if ( typeof type === 'object' ) {
switch ( type . $$typeof ) {
case REACT _CONTEXT _TYPE :
var context = type ;
return getContextName ( context ) + '.Consumer' ;
case REACT _PROVIDER _TYPE :
var provider = type ;
return getContextName ( provider . _context ) + '.Provider' ;
case REACT _FORWARD _REF _TYPE :
return getWrappedName ( type , type . render , 'ForwardRef' ) ;
case REACT _MEMO _TYPE :
2023-02-07 08:04:52 +01:00
var outerName = type . displayName || null ;
2021-11-12 01:05:15 +01:00
2023-02-07 08:04:52 +01:00
if ( outerName !== null ) {
return outerName ;
}
return getComponentNameFromType ( type . type ) || 'Memo' ;
2021-11-12 01:05:15 +01:00
case REACT _LAZY _TYPE :
{
var lazyComponent = type ;
var payload = lazyComponent . _payload ;
var init = lazyComponent . _init ;
try {
2023-02-07 08:04:52 +01:00
return getComponentNameFromType ( init ( payload ) ) ;
2021-11-12 01:05:15 +01:00
} catch ( x ) {
return null ;
}
}
2023-02-07 08:04:52 +01:00
// eslint-disable-next-line no-fallthrough
2021-11-12 01:05:15 +01:00
}
}
return null ;
}
2023-02-07 08:04:52 +01:00
var hasOwnProperty = Object . prototype . hasOwnProperty ;
2020-10-16 01:08:26 +02:00
var RESERVED _PROPS = {
key : true ,
ref : true ,
_ _self : true ,
_ _source : true
} ;
var specialPropKeyWarningShown , specialPropRefWarningShown , didWarnAboutStringRefs ;
2018-12-14 05:41:57 +01:00
2019-09-25 10:20:57 +02:00
{
2020-10-16 01:08:26 +02:00
didWarnAboutStringRefs = { } ;
2019-09-25 10:20:57 +02:00
}
2019-03-21 13:48:00 +01:00
2020-10-16 01:08:26 +02:00
function hasValidRef ( config ) {
{
2023-02-07 08:04:52 +01:00
if ( hasOwnProperty . call ( config , 'ref' ) ) {
2020-10-16 01:08:26 +02:00
var getter = Object . getOwnPropertyDescriptor ( config , 'ref' ) . get ;
2019-03-21 13:48:00 +01:00
2020-10-16 01:08:26 +02:00
if ( getter && getter . isReactWarning ) {
return false ;
}
2019-09-25 10:20:57 +02:00
}
}
2019-03-21 13:48:00 +01:00
2020-10-16 01:08:26 +02:00
return config . ref !== undefined ;
}
2019-03-21 13:48:00 +01:00
2020-10-16 01:08:26 +02:00
function hasValidKey ( config ) {
{
2023-02-07 08:04:52 +01:00
if ( hasOwnProperty . call ( config , 'key' ) ) {
2020-10-16 01:08:26 +02:00
var getter = Object . getOwnPropertyDescriptor ( config , 'key' ) . get ;
2019-03-21 13:48:00 +01:00
2020-10-16 01:08:26 +02:00
if ( getter && getter . isReactWarning ) {
return false ;
2019-09-25 10:20:57 +02:00
}
}
}
2019-03-21 13:48:00 +01:00
2020-10-16 01:08:26 +02:00
return config . key !== undefined ;
2019-09-25 10:20:57 +02:00
}
2019-03-21 13:48:00 +01:00
2020-10-16 01:08:26 +02:00
function defineKeyPropWarningGetter ( props , displayName ) {
var warnAboutAccessingKey = function ( ) {
{
if ( ! specialPropKeyWarningShown ) {
specialPropKeyWarningShown = true ;
2019-03-21 13:48:00 +01:00
2021-11-12 01:05:15 +01:00
error ( '%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)' , displayName ) ;
2020-10-16 01:08:26 +02:00
}
}
} ;
2019-03-21 13:48:00 +01:00
2020-10-16 01:08:26 +02:00
warnAboutAccessingKey . isReactWarning = true ;
Object . defineProperty ( props , 'key' , {
get : warnAboutAccessingKey ,
configurable : true
} ) ;
}
2019-03-21 13:48:00 +01:00
2020-10-16 01:08:26 +02:00
function defineRefPropWarningGetter ( props , displayName ) {
var warnAboutAccessingRef = function ( ) {
{
if ( ! specialPropRefWarningShown ) {
specialPropRefWarningShown = true ;
2018-12-14 05:41:57 +01:00
2021-11-12 01:05:15 +01:00
error ( '%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)' , displayName ) ;
2020-10-16 01:08:26 +02:00
}
}
2019-09-25 10:20:57 +02:00
} ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
warnAboutAccessingRef . isReactWarning = true ;
Object . defineProperty ( props , 'ref' , {
get : warnAboutAccessingRef ,
configurable : true
} ) ;
2018-12-14 05:41:57 +01:00
}
2020-10-16 01:08:26 +02:00
function warnIfStringRefCannotBeAutoConverted ( config ) {
{
if ( typeof config . ref === 'string' && ReactCurrentOwner . current && config . _ _self && ReactCurrentOwner . current . stateNode !== config . _ _self ) {
2023-02-07 08:04:52 +01:00
var componentName = getComponentNameFromType ( ReactCurrentOwner . current . type ) ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
if ( ! didWarnAboutStringRefs [ componentName ] ) {
2021-11-12 01:05:15 +01:00
error ( 'Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref' , componentName , config . ref ) ;
2020-10-16 01:08:26 +02:00
didWarnAboutStringRefs [ componentName ] = true ;
2019-09-25 10:20:57 +02:00
}
2020-10-16 01:08:26 +02:00
}
2019-09-25 10:20:57 +02:00
}
}
2020-10-16 01:08:26 +02:00
/ * *
* Factory method to create a new React element . This no longer adheres to
* the class pattern , so do not use new to call it . Also , instanceof check
* will not work . Instead test $$typeof field against Symbol . for ( 'react.element' ) to check
* if something is a React Element .
*
* @ param { * } type
* @ param { * } props
* @ param { * } key
* @ param { string | object } ref
* @ param { * } owner
* @ param { * } self A * temporary * helper to detect places where ` this ` is
* different from the ` owner ` when React . createElement is called , so that we
* can warn . We want to get rid of owner and replace string ` ref ` s with arrow
* functions , and as long as ` this ` and owner are the same , there will be no
* change in behavior .
* @ param { * } source An annotation object ( added by a transpiler or otherwise )
* indicating filename , line number , and / or other information .
* @ internal
* /
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
var ReactElement = function ( type , key , ref , self , source , owner , props ) {
var element = {
// This tag allows us to uniquely identify this as a React Element
$$typeof : REACT _ELEMENT _TYPE ,
// Built-in properties that belong on the element
type : type ,
key : key ,
ref : ref ,
props : props ,
// Record the component responsible for creating this element.
_owner : owner
} ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
{
// The validation flag is currently mutative. We put it on
// an external backing store so that we can freeze the whole object.
// This can be replaced with a WeakMap once they are implemented in
// commonly used development environments.
element . _store = { } ; // To make comparing ReactElements easier for testing purposes, we make
// the validation flag non-enumerable (where possible, which should
// include every environment we run tests in), so the test framework
// ignores it.
Object . defineProperty ( element . _store , 'validated' , {
configurable : false ,
enumerable : false ,
writable : true ,
value : false
} ) ; // self and source are DEV only properties.
Object . defineProperty ( element , '_self' , {
configurable : false ,
enumerable : false ,
writable : false ,
value : self
} ) ; // Two elements created in two different places should be considered
// equal for testing purposes and therefore we hide it from enumeration.
Object . defineProperty ( element , '_source' , {
configurable : false ,
enumerable : false ,
writable : false ,
value : source
} ) ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
if ( Object . freeze ) {
Object . freeze ( element . props ) ;
Object . freeze ( element ) ;
2019-09-25 10:20:57 +02:00
}
2018-12-14 05:41:57 +01:00
}
2020-10-16 01:08:26 +02:00
return element ;
} ;
/ * *
* Create and return a new ReactElement of the given type .
* See https : //reactjs.org/docs/react-api.html#createelement
* /
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
function createElement ( type , config , children ) {
var propName ; // Reserved names are extracted
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
var props = { } ;
var key = null ;
var ref = null ;
var self = null ;
var source = null ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
if ( config != null ) {
if ( hasValidRef ( config ) ) {
ref = config . ref ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
{
warnIfStringRefCannotBeAutoConverted ( config ) ;
}
}
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
if ( hasValidKey ( config ) ) {
2023-02-07 08:04:52 +01:00
{
checkKeyStringCoercion ( config . key ) ;
}
2020-10-16 01:08:26 +02:00
key = '' + config . key ;
}
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
self = config . _ _self === undefined ? null : config . _ _self ;
source = config . _ _source === undefined ? null : config . _ _source ; // Remaining properties are added to a new props object
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
for ( propName in config ) {
2023-02-07 08:04:52 +01:00
if ( hasOwnProperty . call ( config , propName ) && ! RESERVED _PROPS . hasOwnProperty ( propName ) ) {
2020-10-16 01:08:26 +02:00
props [ propName ] = config [ propName ] ;
}
}
} // Children can be more than one argument, and those are transferred onto
// the newly allocated props object.
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
var childrenLength = arguments . length - 2 ;
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
if ( childrenLength === 1 ) {
props . children = children ;
} else if ( childrenLength > 1 ) {
var childArray = Array ( childrenLength ) ;
for ( var i = 0 ; i < childrenLength ; i ++ ) {
childArray [ i ] = arguments [ i + 2 ] ;
}
2019-09-25 10:20:57 +02:00
{
2020-10-16 01:08:26 +02:00
if ( Object . freeze ) {
Object . freeze ( childArray ) ;
}
2019-09-25 10:20:57 +02:00
}
2020-10-16 01:08:26 +02:00
props . children = childArray ;
} // Resolve default props
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
if ( type && type . defaultProps ) {
var defaultProps = type . defaultProps ;
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
for ( propName in defaultProps ) {
if ( props [ propName ] === undefined ) {
props [ propName ] = defaultProps [ propName ] ;
2018-12-14 05:41:57 +01:00
}
}
2020-10-16 01:08:26 +02:00
}
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
{
if ( key || ref ) {
var displayName = typeof type === 'function' ? type . displayName || type . name || 'Unknown' : type ;
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
if ( key ) {
defineKeyPropWarningGetter ( props , displayName ) ;
2019-09-25 10:20:57 +02:00
}
2020-10-16 01:08:26 +02:00
if ( ref ) {
defineRefPropWarningGetter ( props , displayName ) ;
2019-09-25 10:20:57 +02:00
}
2018-12-14 05:41:57 +01:00
}
2019-09-25 10:20:57 +02:00
}
2020-10-16 01:08:26 +02:00
return ReactElement ( type , key , ref , self , source , ReactCurrentOwner . current , props ) ;
2018-12-14 05:41:57 +01:00
}
2020-10-16 01:08:26 +02:00
function cloneAndReplaceKey ( oldElement , newKey ) {
var newElement = ReactElement ( oldElement . type , newKey , oldElement . ref , oldElement . _self , oldElement . _source , oldElement . _owner , oldElement . props ) ;
return newElement ;
2019-09-25 10:20:57 +02:00
}
2020-10-16 01:08:26 +02:00
/ * *
* Clone and return a new ReactElement using element as the starting point .
* See https : //reactjs.org/docs/react-api.html#cloneelement
* /
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
function cloneElement ( element , config , children ) {
2023-02-07 08:04:52 +01:00
if ( element === null || element === undefined ) {
throw new Error ( "React.cloneElement(...): The argument must be a React element, but you passed " + element + "." ) ;
2019-09-25 10:20:57 +02:00
}
2020-10-16 01:08:26 +02:00
var propName ; // Original props are copied
2019-09-25 10:20:57 +02:00
2021-11-12 01:05:15 +01:00
var props = assign ( { } , element . props ) ; // Reserved names are extracted
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
var key = element . key ;
var ref = element . ref ; // Self is preserved since the owner is preserved.
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
var self = element . _self ; // Source is preserved since cloneElement is unlikely to be targeted by a
// transpiler, and the original source is probably a better indicator of the
// true owner.
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
var source = element . _source ; // Owner will be preserved, unless ref is overridden
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
var owner = element . _owner ;
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
if ( config != null ) {
if ( hasValidRef ( config ) ) {
// Silently steal the ref from the parent.
ref = config . ref ;
owner = ReactCurrentOwner . current ;
}
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
if ( hasValidKey ( config ) ) {
2023-02-07 08:04:52 +01:00
{
checkKeyStringCoercion ( config . key ) ;
}
2020-10-16 01:08:26 +02:00
key = '' + config . key ;
} // Remaining properties override existing props
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
var defaultProps ;
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
if ( element . type && element . type . defaultProps ) {
defaultProps = element . type . defaultProps ;
}
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
for ( propName in config ) {
2023-02-07 08:04:52 +01:00
if ( hasOwnProperty . call ( config , propName ) && ! RESERVED _PROPS . hasOwnProperty ( propName ) ) {
2020-10-16 01:08:26 +02:00
if ( config [ propName ] === undefined && defaultProps !== undefined ) {
// Resolve default props
props [ propName ] = defaultProps [ propName ] ;
} else {
props [ propName ] = config [ propName ] ;
2019-09-25 10:20:57 +02:00
}
}
2018-12-14 05:41:57 +01:00
}
2020-10-16 01:08:26 +02:00
} // Children can be more than one argument, and those are transferred onto
// the newly allocated props object.
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
var childrenLength = arguments . length - 2 ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
if ( childrenLength === 1 ) {
props . children = children ;
} else if ( childrenLength > 1 ) {
var childArray = Array ( childrenLength ) ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
for ( var i = 0 ; i < childrenLength ; i ++ ) {
childArray [ i ] = arguments [ i + 2 ] ;
}
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
props . children = childArray ;
2018-12-14 05:41:57 +01:00
}
2020-10-16 01:08:26 +02:00
return ReactElement ( element . type , key , ref , self , source , owner , props ) ;
2018-12-14 05:41:57 +01:00
}
2020-10-16 01:08:26 +02:00
/ * *
* Verifies the object is a ReactElement .
* See https : //reactjs.org/docs/react-api.html#isvalidelement
* @ param { ? object } object
* @ return { boolean } True if ` object ` is a ReactElement .
* @ final
* /
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
function isValidElement ( object ) {
return typeof object === 'object' && object !== null && object . $$typeof === REACT _ELEMENT _TYPE ;
2018-12-14 05:41:57 +01:00
}
2020-10-16 01:08:26 +02:00
var SEPARATOR = '.' ;
var SUBSEPARATOR = ':' ;
/ * *
* Escape and wrap key so it is safe to use as a reactid
*
* @ param { string } key to be escaped .
* @ return { string } the escaped key .
* /
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
function escape ( key ) {
var escapeRegex = /[=:]/g ;
var escaperLookup = {
'=' : '=0' ,
':' : '=2'
} ;
2021-11-12 01:05:15 +01:00
var escapedString = key . replace ( escapeRegex , function ( match ) {
2020-10-16 01:08:26 +02:00
return escaperLookup [ match ] ;
} ) ;
return '$' + escapedString ;
2018-12-14 05:41:57 +01:00
}
2020-10-16 01:08:26 +02:00
/ * *
* TODO : Test that a single child and an array with one item have the same key
* pattern .
* /
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
var didWarnAboutMaps = false ;
var userProvidedKeyEscapeRegex = /\/+/g ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
function escapeUserProvidedKey ( text ) {
2021-11-12 01:05:15 +01:00
return text . replace ( userProvidedKeyEscapeRegex , '$&/' ) ;
2019-09-25 10:20:57 +02:00
}
2021-11-12 01:05:15 +01:00
/ * *
* Generate a key string that identifies a element within a set .
*
* @ param { * } element A element that could contain a manual key .
* @ param { number } index Index that is used if a manual key is not provided .
* @ return { string }
* /
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
2021-11-12 01:05:15 +01:00
function getElementKey ( element , index ) {
// Do some typechecking here since we call this blindly. We want to ensure
// that we don't block potential future ES APIs.
if ( typeof element === 'object' && element !== null && element . key != null ) {
// Explicit key
2023-02-07 08:04:52 +01:00
{
checkKeyStringCoercion ( element . key ) ;
}
2021-11-12 01:05:15 +01:00
return escape ( '' + element . key ) ;
} // Implicit key determined by the index in the set
2020-10-16 01:08:26 +02:00
2021-11-12 01:05:15 +01:00
return index . toString ( 36 ) ;
2020-10-16 01:08:26 +02:00
}
2021-11-12 01:05:15 +01:00
function mapIntoArray ( children , array , escapedPrefix , nameSoFar , callback ) {
2020-10-16 01:08:26 +02:00
var type = typeof children ;
if ( type === 'undefined' || type === 'boolean' ) {
// All of the above are perceived as null.
children = null ;
}
var invokeCallback = false ;
if ( children === null ) {
invokeCallback = true ;
} else {
switch ( type ) {
case 'string' :
case 'number' :
invokeCallback = true ;
break ;
case 'object' :
switch ( children . $$typeof ) {
case REACT _ELEMENT _TYPE :
case REACT _PORTAL _TYPE :
invokeCallback = true ;
}
}
}
if ( invokeCallback ) {
2021-11-12 01:05:15 +01:00
var _child = children ;
var mappedChild = callback ( _child ) ; // If it's the only child, treat the name as if it was wrapped in an array
// so that it's consistent if the number of children grows:
var childKey = nameSoFar === '' ? SEPARATOR + getElementKey ( _child , 0 ) : nameSoFar ;
2023-02-07 08:04:52 +01:00
if ( isArray ( mappedChild ) ) {
2021-11-12 01:05:15 +01:00
var escapedChildKey = '' ;
if ( childKey != null ) {
escapedChildKey = escapeUserProvidedKey ( childKey ) + '/' ;
}
mapIntoArray ( mappedChild , array , escapedChildKey , '' , function ( c ) {
return c ;
} ) ;
} else if ( mappedChild != null ) {
if ( isValidElement ( mappedChild ) ) {
2023-02-07 08:04:52 +01:00
{
// The `if` statement here prevents auto-disabling of the safe
// coercion ESLint rule, so we must manually disable it below.
// $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key
if ( mappedChild . key && ( ! _child || _child . key !== mappedChild . key ) ) {
checkKeyStringCoercion ( mappedChild . key ) ;
}
}
2021-11-12 01:05:15 +01:00
mappedChild = cloneAndReplaceKey ( mappedChild , // Keep both the (mapped) and old keys if they differ, just as
// traverseAllChildren used to do for objects as children
escapedPrefix + ( // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key
mappedChild . key && ( ! _child || _child . key !== mappedChild . key ) ? // $FlowFixMe Flow incorrectly thinks existing element's key can be a number
2023-02-07 08:04:52 +01:00
// eslint-disable-next-line react-internal/safe-string-coercion
2021-11-12 01:05:15 +01:00
escapeUserProvidedKey ( '' + mappedChild . key ) + '/' : '' ) + childKey ) ;
}
array . push ( mappedChild ) ;
}
2020-10-16 01:08:26 +02:00
return 1 ;
}
var child ;
var nextName ;
var subtreeCount = 0 ; // Count of children found in the current subtree.
var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR ;
2023-02-07 08:04:52 +01:00
if ( isArray ( children ) ) {
2020-10-16 01:08:26 +02:00
for ( var i = 0 ; i < children . length ; i ++ ) {
child = children [ i ] ;
2021-11-12 01:05:15 +01:00
nextName = nextNamePrefix + getElementKey ( child , i ) ;
subtreeCount += mapIntoArray ( child , array , escapedPrefix , nextName , callback ) ;
2020-10-16 01:08:26 +02:00
}
} else {
var iteratorFn = getIteratorFn ( children ) ;
if ( typeof iteratorFn === 'function' ) {
2021-11-12 01:05:15 +01:00
var iterableChildren = children ;
2020-10-16 01:08:26 +02:00
{
// Warn about using Maps as children
2021-11-12 01:05:15 +01:00
if ( iteratorFn === iterableChildren . entries ) {
2020-10-16 01:08:26 +02:00
if ( ! didWarnAboutMaps ) {
2021-11-12 01:05:15 +01:00
warn ( 'Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.' ) ;
2020-10-16 01:08:26 +02:00
}
didWarnAboutMaps = true ;
}
}
2021-11-12 01:05:15 +01:00
var iterator = iteratorFn . call ( iterableChildren ) ;
2020-10-16 01:08:26 +02:00
var step ;
var ii = 0 ;
2018-12-14 05:41:57 +01:00
2019-09-25 10:20:57 +02:00
while ( ! ( step = iterator . next ( ) ) . done ) {
2020-10-16 01:08:26 +02:00
child = step . value ;
2021-11-12 01:05:15 +01:00
nextName = nextNamePrefix + getElementKey ( child , ii ++ ) ;
subtreeCount += mapIntoArray ( child , array , escapedPrefix , nextName , callback ) ;
2020-10-16 01:08:26 +02:00
}
} else if ( type === 'object' ) {
2023-02-07 08:04:52 +01:00
// eslint-disable-next-line react-internal/safe-string-coercion
var childrenString = String ( children ) ;
throw new Error ( "Objects are not valid as a React child (found: " + ( childrenString === '[object Object]' ? 'object with keys {' + Object . keys ( children ) . join ( ', ' ) + '}' : childrenString ) + "). " + 'If you meant to render a collection of children, use an array ' + 'instead.' ) ;
2019-09-25 10:20:57 +02:00
}
2018-12-14 05:41:57 +01:00
}
2020-10-16 01:08:26 +02:00
return subtreeCount ;
2018-12-14 05:41:57 +01:00
}
2020-10-16 01:08:26 +02:00
/ * *
* Maps children that are typically specified as ` props.children ` .
*
* See https : //reactjs.org/docs/react-api.html#reactchildrenmap
*
2021-11-12 01:05:15 +01:00
* The provided mapFunction ( child , index ) will be called for each
2020-10-16 01:08:26 +02:00
* leaf child .
*
* @ param { ? * } children Children tree container .
* @ param { function ( * , int ) } func The map function .
* @ param { * } context Context for mapFunction .
* @ return { object } Object containing the ordered map of results .
* /
function mapChildren ( children , func , context ) {
if ( children == null ) {
return children ;
2019-09-25 10:20:57 +02:00
}
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
var result = [ ] ;
2021-11-12 01:05:15 +01:00
var count = 0 ;
mapIntoArray ( children , result , '' , '' , function ( child ) {
return func . call ( context , child , count ++ ) ;
} ) ;
2020-10-16 01:08:26 +02:00
return result ;
}
/ * *
* Count the number of children that are typically specified as
* ` props.children ` .
*
* See https : //reactjs.org/docs/react-api.html#reactchildrencount
*
* @ param { ? * } children Children tree container .
* @ return { number } The number of children .
* /
function countChildren ( children ) {
2021-11-12 01:05:15 +01:00
var n = 0 ;
mapChildren ( children , function ( ) {
n ++ ; // Don't return anything
} ) ;
return n ;
}
/ * *
* Iterates through children that are typically specified as ` props.children ` .
*
* See https : //reactjs.org/docs/react-api.html#reactchildrenforeach
*
* The provided forEachFunc ( child , index ) will be called for each
* leaf child .
*
* @ param { ? * } children Children tree container .
* @ param { function ( * , int ) } forEachFunc
* @ param { * } forEachContext Context for forEachContext .
* /
function forEachChildren ( children , forEachFunc , forEachContext ) {
mapChildren ( children , function ( ) {
forEachFunc . apply ( this , arguments ) ; // Don't return anything.
} , forEachContext ) ;
2020-10-16 01:08:26 +02:00
}
/ * *
* Flatten a children object ( typically specified as ` props.children ` ) and
* return an array with appropriately re - keyed children .
*
* See https : //reactjs.org/docs/react-api.html#reactchildrentoarray
* /
function toArray ( children ) {
2021-11-12 01:05:15 +01:00
return mapChildren ( children , function ( child ) {
2020-10-16 01:08:26 +02:00
return child ;
2021-11-12 01:05:15 +01:00
} ) || [ ] ;
2020-10-16 01:08:26 +02:00
}
/ * *
* Returns the first child in a collection of children and verifies that there
* is only one child in the collection .
*
* See https : //reactjs.org/docs/react-api.html#reactchildrenonly
*
* The current implementation of this function assumes that a single child gets
* passed without a wrapper , but the purpose of this helper function is to
* abstract away the particular structure of children .
*
* @ param { ? object } children Child collection structure .
* @ return { ReactElement } The first and only ` ReactElement ` contained in the
* structure .
* /
function onlyChild ( children ) {
if ( ! isValidElement ( children ) ) {
2023-02-07 08:04:52 +01:00
throw new Error ( 'React.Children.only expected to receive a single React element child.' ) ;
2018-12-14 05:41:57 +01:00
}
2020-10-16 01:08:26 +02:00
return children ;
}
2023-02-07 08:04:52 +01:00
function createContext ( defaultValue ) {
// TODO: Second argument used to be an optional `calculateChangedBits`
// function. Warn to reserve for future use?
2020-10-16 01:08:26 +02:00
var context = {
$$typeof : REACT _CONTEXT _TYPE ,
// As a workaround to support multiple concurrent renderers, we categorize
// some renderers as primary and others as secondary. We only expect
// there to be two concurrent renderers at most: React Native (primary) and
// Fabric (secondary); React DOM (primary) and React ART (secondary).
// Secondary renderers store their context values on separate fields.
_currentValue : defaultValue ,
_currentValue2 : defaultValue ,
// Used to track how many concurrent renderers this context currently
// supports within in a single renderer. Such as parallel server rendering.
_threadCount : 0 ,
// These are circular
Provider : null ,
2023-02-07 08:04:52 +01:00
Consumer : null ,
// Add these to use same hidden class in VM as ServerContext
_defaultValue : null ,
_globalName : null
2020-10-16 01:08:26 +02:00
} ;
context . Provider = {
$$typeof : REACT _PROVIDER _TYPE ,
_context : context
} ;
var hasWarnedAboutUsingNestedContextConsumers = false ;
var hasWarnedAboutUsingConsumerProvider = false ;
2021-11-12 01:05:15 +01:00
var hasWarnedAboutDisplayNameOnConsumer = false ;
2020-10-16 01:08:26 +02:00
{
// A separate object, but proxies back to the original context object for
// backwards compatibility. It has a different $$typeof, so we can properly
// warn for the incorrect usage of Context as a Consumer.
var Consumer = {
$$typeof : REACT _CONTEXT _TYPE ,
2023-02-07 08:04:52 +01:00
_context : context
2020-10-16 01:08:26 +02:00
} ; // $FlowFixMe: Flow complains about not setting a value, which is intentional here
Object . defineProperties ( Consumer , {
Provider : {
get : function ( ) {
if ( ! hasWarnedAboutUsingConsumerProvider ) {
hasWarnedAboutUsingConsumerProvider = true ;
error ( 'Rendering <Context.Consumer.Provider> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Provider> instead?' ) ;
}
return context . Provider ;
} ,
set : function ( _Provider ) {
context . Provider = _Provider ;
}
} ,
_currentValue : {
get : function ( ) {
return context . _currentValue ;
} ,
set : function ( _currentValue ) {
context . _currentValue = _currentValue ;
}
} ,
_currentValue2 : {
get : function ( ) {
return context . _currentValue2 ;
} ,
set : function ( _currentValue2 ) {
context . _currentValue2 = _currentValue2 ;
}
} ,
_threadCount : {
get : function ( ) {
return context . _threadCount ;
} ,
set : function ( _threadCount ) {
context . _threadCount = _threadCount ;
}
} ,
Consumer : {
get : function ( ) {
if ( ! hasWarnedAboutUsingNestedContextConsumers ) {
hasWarnedAboutUsingNestedContextConsumers = true ;
error ( 'Rendering <Context.Consumer.Consumer> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?' ) ;
}
return context . Consumer ;
}
2021-11-12 01:05:15 +01:00
} ,
displayName : {
get : function ( ) {
return context . displayName ;
} ,
set : function ( displayName ) {
if ( ! hasWarnedAboutDisplayNameOnConsumer ) {
warn ( 'Setting `displayName` on Context.Consumer has no effect. ' + "You should set it directly on the context with Context.displayName = '%s'." , displayName ) ;
hasWarnedAboutDisplayNameOnConsumer = true ;
}
}
2020-10-16 01:08:26 +02:00
}
} ) ; // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty
context . Consumer = Consumer ;
}
{
context . _currentRenderer = null ;
context . _currentRenderer2 = null ;
}
return context ;
}
2021-11-12 01:05:15 +01:00
var Uninitialized = - 1 ;
var Pending = 0 ;
var Resolved = 1 ;
var Rejected = 2 ;
function lazyInitializer ( payload ) {
if ( payload . _status === Uninitialized ) {
var ctor = payload . _result ;
var thenable = ctor ( ) ; // Transition to the next state.
2023-02-07 08:04:52 +01:00
// This might throw either because it's missing or throws. If so, we treat it
// as still uninitialized and try again next time. Which is the same as what
// happens if the ctor or any wrappers processing the ctor throws. This might
// end up fixing it if the resolution was a concurrency bug.
2021-11-12 01:05:15 +01:00
thenable . then ( function ( moduleObject ) {
2023-02-07 08:04:52 +01:00
if ( payload . _status === Pending || payload . _status === Uninitialized ) {
// Transition to the next state.
2021-11-12 01:05:15 +01:00
var resolved = payload ;
resolved . _status = Resolved ;
2023-02-07 08:04:52 +01:00
resolved . _result = moduleObject ;
2021-11-12 01:05:15 +01:00
}
} , function ( error ) {
2023-02-07 08:04:52 +01:00
if ( payload . _status === Pending || payload . _status === Uninitialized ) {
2021-11-12 01:05:15 +01:00
// Transition to the next state.
var rejected = payload ;
rejected . _status = Rejected ;
rejected . _result = error ;
}
} ) ;
2023-02-07 08:04:52 +01:00
if ( payload . _status === Uninitialized ) {
// In case, we're still uninitialized, then we're waiting for the thenable
// to resolve. Set it as pending in the meantime.
var pending = payload ;
pending . _status = Pending ;
pending . _result = thenable ;
}
2021-11-12 01:05:15 +01:00
}
if ( payload . _status === Resolved ) {
2023-02-07 08:04:52 +01:00
var moduleObject = payload . _result ;
{
if ( moduleObject === undefined ) {
error ( 'lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\n\nYour code should look like: \n ' + // Break up imports to avoid accidentally parsing them as dependencies.
'const MyComponent = lazy(() => imp' + "ort('./MyComponent'))\n\n" + 'Did you accidentally put curly braces around the import?' , moduleObject ) ;
}
}
{
if ( ! ( 'default' in moduleObject ) ) {
error ( 'lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\n\nYour code should look like: \n ' + // Break up imports to avoid accidentally parsing them as dependencies.
'const MyComponent = lazy(() => imp' + "ort('./MyComponent'))" , moduleObject ) ;
}
}
return moduleObject . default ;
2021-11-12 01:05:15 +01:00
} else {
throw payload . _result ;
}
}
2020-10-16 01:08:26 +02:00
function lazy ( ctor ) {
2021-11-12 01:05:15 +01:00
var payload = {
// We use these fields to store the result.
2023-02-07 08:04:52 +01:00
_status : Uninitialized ,
2021-11-12 01:05:15 +01:00
_result : ctor
} ;
2020-10-16 01:08:26 +02:00
var lazyType = {
$$typeof : REACT _LAZY _TYPE ,
2021-11-12 01:05:15 +01:00
_payload : payload ,
_init : lazyInitializer
2020-10-16 01:08:26 +02:00
} ;
{
// In production, this would just set it on the object.
var defaultProps ;
2021-11-12 01:05:15 +01:00
var propTypes ; // $FlowFixMe
2020-10-16 01:08:26 +02:00
Object . defineProperties ( lazyType , {
defaultProps : {
configurable : true ,
get : function ( ) {
return defaultProps ;
} ,
set : function ( newDefaultProps ) {
error ( 'React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.' ) ;
defaultProps = newDefaultProps ; // Match production behavior more closely:
2021-11-12 01:05:15 +01:00
// $FlowFixMe
2020-10-16 01:08:26 +02:00
Object . defineProperty ( lazyType , 'defaultProps' , {
enumerable : true
} ) ;
}
} ,
propTypes : {
configurable : true ,
get : function ( ) {
return propTypes ;
} ,
set : function ( newPropTypes ) {
error ( 'React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.' ) ;
propTypes = newPropTypes ; // Match production behavior more closely:
2021-11-12 01:05:15 +01:00
// $FlowFixMe
2020-10-16 01:08:26 +02:00
Object . defineProperty ( lazyType , 'propTypes' , {
enumerable : true
} ) ;
}
}
} ) ;
}
return lazyType ;
}
function forwardRef ( render ) {
{
if ( render != null && render . $$typeof === REACT _MEMO _TYPE ) {
error ( 'forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).' ) ;
} else if ( typeof render !== 'function' ) {
error ( 'forwardRef requires a render function but was given %s.' , render === null ? 'null' : typeof render ) ;
} else {
if ( render . length !== 0 && render . length !== 2 ) {
error ( 'forwardRef render functions accept exactly two parameters: props and ref. %s' , render . length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.' ) ;
}
}
if ( render != null ) {
if ( render . defaultProps != null || render . propTypes != null ) {
error ( 'forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?' ) ;
}
}
}
2021-11-12 01:05:15 +01:00
var elementType = {
2020-10-16 01:08:26 +02:00
$$typeof : REACT _FORWARD _REF _TYPE ,
render : render
} ;
2021-11-12 01:05:15 +01:00
{
var ownName ;
Object . defineProperty ( elementType , 'displayName' , {
enumerable : false ,
configurable : true ,
get : function ( ) {
return ownName ;
} ,
set : function ( name ) {
2023-02-07 08:04:52 +01:00
ownName = name ; // The inner component shouldn't inherit this display name in most cases,
// because the component may be used elsewhere.
// But it's nice for anonymous functions to inherit the name,
// so that our component-stack generation logic will display their frames.
// An anonymous function generally suggests a pattern like:
// React.forwardRef((props, ref) => {...});
// This kind of inner function is not used elsewhere so the side effect is okay.
if ( ! render . name && ! render . displayName ) {
2021-11-12 01:05:15 +01:00
render . displayName = name ;
}
}
} ) ;
}
return elementType ;
2020-10-16 01:08:26 +02:00
}
2023-02-07 08:04:52 +01:00
var REACT _MODULE _REFERENCE ;
2021-11-12 01:05:15 +01:00
2023-02-07 08:04:52 +01:00
{
REACT _MODULE _REFERENCE = Symbol . for ( 'react.module.reference' ) ;
}
2021-11-12 01:05:15 +01:00
2020-10-16 01:08:26 +02:00
function isValidElementType ( type ) {
2021-11-12 01:05:15 +01:00
if ( typeof type === 'string' || typeof type === 'function' ) {
return true ;
} // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).
2023-02-07 08:04:52 +01:00
if ( type === REACT _FRAGMENT _TYPE || type === REACT _PROFILER _TYPE || enableDebugTracing || type === REACT _STRICT _MODE _TYPE || type === REACT _SUSPENSE _TYPE || type === REACT _SUSPENSE _LIST _TYPE || enableLegacyHidden || type === REACT _OFFSCREEN _TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {
2021-11-12 01:05:15 +01:00
return true ;
}
if ( typeof type === 'object' && type !== null ) {
2023-02-07 08:04:52 +01:00
if ( type . $$typeof === REACT _LAZY _TYPE || type . $$typeof === REACT _MEMO _TYPE || type . $$typeof === REACT _PROVIDER _TYPE || type . $$typeof === REACT _CONTEXT _TYPE || type . $$typeof === REACT _FORWARD _REF _TYPE || // This needs to include all possible module reference object
// types supported by any Flight configuration anywhere since
// we don't know which Flight build this will end up being used
// with.
type . $$typeof === REACT _MODULE _REFERENCE || type . getModuleId !== undefined ) {
2021-11-12 01:05:15 +01:00
return true ;
}
}
return false ;
2020-10-16 01:08:26 +02:00
}
function memo ( type , compare ) {
{
if ( ! isValidElementType ( type ) ) {
error ( 'memo: The first argument must be a component. Instead ' + 'received: %s' , type === null ? 'null' : typeof type ) ;
}
}
2021-11-12 01:05:15 +01:00
var elementType = {
2020-10-16 01:08:26 +02:00
$$typeof : REACT _MEMO _TYPE ,
type : type ,
compare : compare === undefined ? null : compare
} ;
2021-11-12 01:05:15 +01:00
{
var ownName ;
Object . defineProperty ( elementType , 'displayName' , {
enumerable : false ,
configurable : true ,
get : function ( ) {
return ownName ;
} ,
set : function ( name ) {
2023-02-07 08:04:52 +01:00
ownName = name ; // The inner component shouldn't inherit this display name in most cases,
// because the component may be used elsewhere.
// But it's nice for anonymous functions to inherit the name,
// so that our component-stack generation logic will display their frames.
// An anonymous function generally suggests a pattern like:
// React.memo((props) => {...});
// This kind of inner function is not used elsewhere so the side effect is okay.
if ( ! type . name && ! type . displayName ) {
2021-11-12 01:05:15 +01:00
type . displayName = name ;
}
}
} ) ;
}
return elementType ;
2020-10-16 01:08:26 +02:00
}
function resolveDispatcher ( ) {
var dispatcher = ReactCurrentDispatcher . current ;
2023-02-07 08:04:52 +01:00
{
if ( dispatcher === null ) {
error ( 'Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for' + ' one of the following reasons:\n' + '1. You might have mismatching versions of React and the renderer (such as React DOM)\n' + '2. You might be breaking the Rules of Hooks\n' + '3. You might have more than one copy of React in the same app\n' + 'See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.' ) ;
2020-10-16 01:08:26 +02:00
}
2023-02-07 08:04:52 +01:00
} // Will result in a null access error if accessed outside render phase. We
// intentionally don't throw our own error because this is in a hot path.
// Also helps ensure this is inlined.
2020-10-16 01:08:26 +02:00
return dispatcher ;
}
2023-02-07 08:04:52 +01:00
function useContext ( Context ) {
2020-10-16 01:08:26 +02:00
var dispatcher = resolveDispatcher ( ) ;
{
2023-02-07 08:04:52 +01:00
// TODO: add a more generic warning for invalid values.
2020-10-16 01:08:26 +02:00
if ( Context . _context !== undefined ) {
var realContext = Context . _context ; // Don't deduplicate because this legitimately causes bugs
// and nobody should be using this in existing code.
if ( realContext . Consumer === Context ) {
error ( 'Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?' ) ;
} else if ( realContext . Provider === Context ) {
error ( 'Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?' ) ;
}
}
}
2023-02-07 08:04:52 +01:00
return dispatcher . useContext ( Context ) ;
2020-10-16 01:08:26 +02:00
}
function useState ( initialState ) {
var dispatcher = resolveDispatcher ( ) ;
return dispatcher . useState ( initialState ) ;
}
function useReducer ( reducer , initialArg , init ) {
var dispatcher = resolveDispatcher ( ) ;
return dispatcher . useReducer ( reducer , initialArg , init ) ;
}
function useRef ( initialValue ) {
var dispatcher = resolveDispatcher ( ) ;
return dispatcher . useRef ( initialValue ) ;
}
function useEffect ( create , deps ) {
var dispatcher = resolveDispatcher ( ) ;
return dispatcher . useEffect ( create , deps ) ;
}
2023-02-07 08:04:52 +01:00
function useInsertionEffect ( create , deps ) {
var dispatcher = resolveDispatcher ( ) ;
return dispatcher . useInsertionEffect ( create , deps ) ;
}
2020-10-16 01:08:26 +02:00
function useLayoutEffect ( create , deps ) {
var dispatcher = resolveDispatcher ( ) ;
return dispatcher . useLayoutEffect ( create , deps ) ;
}
function useCallback ( callback , deps ) {
var dispatcher = resolveDispatcher ( ) ;
return dispatcher . useCallback ( callback , deps ) ;
}
function useMemo ( create , deps ) {
var dispatcher = resolveDispatcher ( ) ;
return dispatcher . useMemo ( create , deps ) ;
}
function useImperativeHandle ( ref , create , deps ) {
var dispatcher = resolveDispatcher ( ) ;
return dispatcher . useImperativeHandle ( ref , create , deps ) ;
}
function useDebugValue ( value , formatterFn ) {
{
var dispatcher = resolveDispatcher ( ) ;
return dispatcher . useDebugValue ( value , formatterFn ) ;
2018-12-14 05:41:57 +01:00
}
2020-10-16 01:08:26 +02:00
}
2023-02-07 08:04:52 +01:00
function useTransition ( ) {
var dispatcher = resolveDispatcher ( ) ;
return dispatcher . useTransition ( ) ;
}
function useDeferredValue ( value ) {
var dispatcher = resolveDispatcher ( ) ;
return dispatcher . useDeferredValue ( value ) ;
}
function useId ( ) {
var dispatcher = resolveDispatcher ( ) ;
return dispatcher . useId ( ) ;
}
function useSyncExternalStore ( subscribe , getSnapshot , getServerSnapshot ) {
var dispatcher = resolveDispatcher ( ) ;
return dispatcher . useSyncExternalStore ( subscribe , getSnapshot , getServerSnapshot ) ;
}
2020-10-16 01:08:26 +02:00
2021-11-12 01:05:15 +01:00
// Helpers to patch console.logs to avoid logging during side-effect free
// replaying on render function. This currently only patches the object
// lazily which won't cover if the log function was extracted eagerly.
// We could also eagerly patch the method.
var disabledDepth = 0 ;
var prevLog ;
var prevInfo ;
var prevWarn ;
var prevError ;
var prevGroup ;
var prevGroupCollapsed ;
var prevGroupEnd ;
function disabledLog ( ) { }
disabledLog . _ _reactDisabledLog = true ;
function disableLogs ( ) {
{
if ( disabledDepth === 0 ) {
/* eslint-disable react-internal/no-production-logging */
prevLog = console . log ;
prevInfo = console . info ;
prevWarn = console . warn ;
prevError = console . error ;
prevGroup = console . group ;
prevGroupCollapsed = console . groupCollapsed ;
prevGroupEnd = console . groupEnd ; // https://github.com/facebook/react/issues/19099
var props = {
configurable : true ,
enumerable : true ,
value : disabledLog ,
writable : true
} ; // $FlowFixMe Flow thinks console is immutable.
Object . defineProperties ( console , {
info : props ,
log : props ,
warn : props ,
error : props ,
group : props ,
groupCollapsed : props ,
groupEnd : props
} ) ;
/* eslint-enable react-internal/no-production-logging */
}
disabledDepth ++ ;
}
}
function reenableLogs ( ) {
{
disabledDepth -- ;
if ( disabledDepth === 0 ) {
/* eslint-disable react-internal/no-production-logging */
var props = {
configurable : true ,
enumerable : true ,
writable : true
} ; // $FlowFixMe Flow thinks console is immutable.
Object . defineProperties ( console , {
log : assign ( { } , props , {
value : prevLog
} ) ,
info : assign ( { } , props , {
value : prevInfo
} ) ,
warn : assign ( { } , props , {
value : prevWarn
} ) ,
error : assign ( { } , props , {
value : prevError
} ) ,
group : assign ( { } , props , {
value : prevGroup
} ) ,
groupCollapsed : assign ( { } , props , {
value : prevGroupCollapsed
} ) ,
groupEnd : assign ( { } , props , {
value : prevGroupEnd
} )
} ) ;
/* eslint-enable react-internal/no-production-logging */
}
if ( disabledDepth < 0 ) {
error ( 'disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.' ) ;
}
}
}
2020-10-16 01:08:26 +02:00
2021-11-12 01:05:15 +01:00
var ReactCurrentDispatcher$1 = ReactSharedInternals . ReactCurrentDispatcher ;
var prefix ;
function describeBuiltInComponentFrame ( name , source , ownerFn ) {
{
if ( prefix === undefined ) {
// Extract the VM specific prefix used by each line.
try {
throw Error ( ) ;
} catch ( x ) {
var match = x . stack . trim ( ) . match ( /\n( *(at )?)/ ) ;
prefix = match && match [ 1 ] || '' ;
}
} // We use the prefix to ensure our stacks line up with native stack frames.
2020-10-16 01:08:26 +02:00
2018-12-14 05:41:57 +01:00
2021-11-12 01:05:15 +01:00
return '\n' + prefix + name ;
}
}
var reentry = false ;
var componentFrameCache ;
2020-10-16 01:08:26 +02:00
{
2021-11-12 01:05:15 +01:00
var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map ;
componentFrameCache = new PossiblyWeakMap ( ) ;
}
function describeNativeComponentFrame ( fn , construct ) {
// If something asked for a stack inside a fake render, it should get ignored.
2023-02-07 08:04:52 +01:00
if ( ! fn || reentry ) {
2021-11-12 01:05:15 +01:00
return '' ;
}
{
var frame = componentFrameCache . get ( fn ) ;
2020-10-16 01:08:26 +02:00
2021-11-12 01:05:15 +01:00
if ( frame !== undefined ) {
return frame ;
2020-10-16 01:08:26 +02:00
}
2021-11-12 01:05:15 +01:00
}
var control ;
reentry = true ;
var previousPrepareStackTrace = Error . prepareStackTrace ; // $FlowFixMe It does accept undefined.
Error . prepareStackTrace = undefined ;
var previousDispatcher ;
{
previousDispatcher = ReactCurrentDispatcher$1 . current ; // Set the dispatcher in DEV because this might be call in the render function
// for warnings.
ReactCurrentDispatcher$1 . current = null ;
disableLogs ( ) ;
}
try {
// This should throw.
if ( construct ) {
// Something should be setting the props in the constructor.
var Fake = function ( ) {
throw Error ( ) ;
} ; // $FlowFixMe
Object . defineProperty ( Fake . prototype , 'props' , {
set : function ( ) {
// We use a throwing setter instead of frozen or non-writable props
// because that won't throw in a non-strict mode function.
throw Error ( ) ;
}
} ) ;
if ( typeof Reflect === 'object' && Reflect . construct ) {
// We construct a different control for this case to include any extra
// frames added by the construct call.
try {
Reflect . construct ( Fake , [ ] ) ;
} catch ( x ) {
control = x ;
}
Reflect . construct ( fn , [ ] , Fake ) ;
} else {
try {
Fake . call ( ) ;
} catch ( x ) {
control = x ;
}
fn . call ( Fake . prototype ) ;
}
} else {
try {
throw Error ( ) ;
} catch ( x ) {
control = x ;
}
fn ( ) ;
}
} catch ( sample ) {
// This is inlined manually because closure doesn't do it for us.
if ( sample && control && typeof sample . stack === 'string' ) {
// This extracts the first frame from the sample that isn't also in the control.
// Skipping one frame that we assume is the frame that calls the two.
var sampleLines = sample . stack . split ( '\n' ) ;
var controlLines = control . stack . split ( '\n' ) ;
var s = sampleLines . length - 1 ;
var c = controlLines . length - 1 ;
while ( s >= 1 && c >= 0 && sampleLines [ s ] !== controlLines [ c ] ) {
// We expect at least one stack frame to be shared.
// Typically this will be the root most one. However, stack frames may be
// cut off due to maximum stack limits. In this case, one maybe cut off
// earlier than the other. We assume that the sample is longer or the same
// and there for cut off earlier. So we should find the root most frame in
// the sample somewhere in the control.
c -- ;
}
for ( ; s >= 1 && c >= 0 ; s -- , c -- ) {
// Next we find the first one that isn't the same which should be the
// frame that called our sample function and the control.
if ( sampleLines [ s ] !== controlLines [ c ] ) {
// In V8, the first line is describing the message but other VMs don't.
// If we're about to return the first line, and the control is also on the same
// line, that's a pretty good indicator that our sample threw at same line as
// the control. I.e. before we entered the sample frame. So we ignore this result.
// This can happen if you passed a class to function component, or non-function.
if ( s !== 1 || c !== 1 ) {
do {
s -- ;
c -- ; // We may still have similar intermediate frames from the construct call.
// The next one that isn't the same should be our match though.
if ( c < 0 || sampleLines [ s ] !== controlLines [ c ] ) {
// V8 adds a "new" prefix for native classes. Let's remove it to make it prettier.
2023-02-07 08:04:52 +01:00
var _frame = '\n' + sampleLines [ s ] . replace ( ' at new ' , ' at ' ) ; // If our component frame is labeled "<anonymous>"
// but we have a user-provided "displayName"
// splice it in to make the stack more readable.
if ( fn . displayName && _frame . includes ( '<anonymous>' ) ) {
_frame = _frame . replace ( '<anonymous>' , fn . displayName ) ;
}
2021-11-12 01:05:15 +01:00
{
if ( typeof fn === 'function' ) {
componentFrameCache . set ( fn , _frame ) ;
}
} // Return the line we found.
return _frame ;
}
} while ( s >= 1 && c >= 0 ) ;
}
break ;
}
}
}
} finally {
reentry = false ;
{
ReactCurrentDispatcher$1 . current = previousDispatcher ;
reenableLogs ( ) ;
}
Error . prepareStackTrace = previousPrepareStackTrace ;
} // Fallback to just using the name if we couldn't make it throw.
var name = fn ? fn . displayName || fn . name : '' ;
var syntheticFrame = name ? describeBuiltInComponentFrame ( name ) : '' ;
{
if ( typeof fn === 'function' ) {
componentFrameCache . set ( fn , syntheticFrame ) ;
}
}
return syntheticFrame ;
}
function describeFunctionComponentFrame ( fn , source , ownerFn ) {
{
return describeNativeComponentFrame ( fn , false ) ;
}
2019-09-25 10:20:57 +02:00
}
2018-12-14 05:41:57 +01:00
2021-11-12 01:05:15 +01:00
function shouldConstruct ( Component ) {
var prototype = Component . prototype ;
return ! ! ( prototype && prototype . isReactComponent ) ;
}
function describeUnknownElementTypeFrameInDEV ( type , source , ownerFn ) {
if ( type == null ) {
return '' ;
}
if ( typeof type === 'function' ) {
{
return describeNativeComponentFrame ( type , shouldConstruct ( type ) ) ;
}
}
if ( typeof type === 'string' ) {
return describeBuiltInComponentFrame ( type ) ;
}
switch ( type ) {
2023-02-07 08:04:52 +01:00
case REACT _SUSPENSE _TYPE :
2021-11-12 01:05:15 +01:00
return describeBuiltInComponentFrame ( 'Suspense' ) ;
case REACT _SUSPENSE _LIST _TYPE :
return describeBuiltInComponentFrame ( 'SuspenseList' ) ;
}
if ( typeof type === 'object' ) {
switch ( type . $$typeof ) {
case REACT _FORWARD _REF _TYPE :
return describeFunctionComponentFrame ( type . render ) ;
case REACT _MEMO _TYPE :
// Memo may contain any component type so we recursively resolve it.
return describeUnknownElementTypeFrameInDEV ( type . type , source , ownerFn ) ;
case REACT _LAZY _TYPE :
{
var lazyComponent = type ;
var payload = lazyComponent . _payload ;
var init = lazyComponent . _init ;
try {
// Lazy may contain any component type so we recursively resolve it.
return describeUnknownElementTypeFrameInDEV ( init ( payload ) , source , ownerFn ) ;
} catch ( x ) { }
}
}
}
return '' ;
}
var loggedTypeFailures = { } ;
var ReactDebugCurrentFrame$1 = ReactSharedInternals . ReactDebugCurrentFrame ;
function setCurrentlyValidatingElement ( element ) {
{
if ( element ) {
var owner = element . _owner ;
var stack = describeUnknownElementTypeFrameInDEV ( element . type , element . _source , owner ? owner . type : null ) ;
ReactDebugCurrentFrame$1 . setExtraStackFrame ( stack ) ;
} else {
ReactDebugCurrentFrame$1 . setExtraStackFrame ( null ) ;
}
}
}
function checkPropTypes ( typeSpecs , values , location , componentName , element ) {
2020-10-16 01:08:26 +02:00
{
2021-11-12 01:05:15 +01:00
// $FlowFixMe This is okay but Flow doesn't know it.
2023-02-07 08:04:52 +01:00
var has = Function . call . bind ( hasOwnProperty ) ;
2021-11-12 01:05:15 +01:00
2020-10-16 01:08:26 +02:00
for ( var typeSpecName in typeSpecs ) {
if ( has ( typeSpecs , typeSpecName ) ) {
2021-11-12 01:05:15 +01:00
var error$1 = void 0 ; // Prop type validation may throw. In case they do, we don't want to
2020-10-16 01:08:26 +02:00
// fail the render phase where it didn't fail before. So we log it.
// After these have been cleaned up, we'll let them throw.
2021-11-12 01:05:15 +01:00
2020-10-16 01:08:26 +02:00
try {
// This is intentionally an invariant that gets caught. It's the same
// behavior as without this statement except with a better message.
if ( typeof typeSpecs [ typeSpecName ] !== 'function' ) {
2023-02-07 08:04:52 +01:00
// eslint-disable-next-line react-internal/prod-error-codes
2021-11-12 01:05:15 +01:00
var err = Error ( ( componentName || 'React class' ) + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs [ typeSpecName ] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.' ) ;
2020-10-16 01:08:26 +02:00
err . name = 'Invariant Violation' ;
throw err ;
}
2021-11-12 01:05:15 +01:00
error$1 = typeSpecs [ typeSpecName ] ( values , typeSpecName , componentName , location , null , 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED' ) ;
2020-10-16 01:08:26 +02:00
} catch ( ex ) {
2021-11-12 01:05:15 +01:00
error$1 = ex ;
2020-10-16 01:08:26 +02:00
}
2021-11-12 01:05:15 +01:00
if ( error$1 && ! ( error$1 instanceof Error ) ) {
setCurrentlyValidatingElement ( element ) ;
error ( '%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).' , componentName || 'React class' , location , typeSpecName , typeof error$1 ) ;
setCurrentlyValidatingElement ( null ) ;
2020-10-16 01:08:26 +02:00
}
2021-11-12 01:05:15 +01:00
if ( error$1 instanceof Error && ! ( error$1 . message in loggedTypeFailures ) ) {
2020-10-16 01:08:26 +02:00
// Only monitor this failure once because there tends to be a lot of the
// same error.
2021-11-12 01:05:15 +01:00
loggedTypeFailures [ error$1 . message ] = true ;
setCurrentlyValidatingElement ( element ) ;
2020-10-16 01:08:26 +02:00
2021-11-12 01:05:15 +01:00
error ( 'Failed %s type: %s' , location , error$1 . message ) ;
2020-10-16 01:08:26 +02:00
2021-11-12 01:05:15 +01:00
setCurrentlyValidatingElement ( null ) ;
2020-10-16 01:08:26 +02:00
}
}
}
}
}
2021-11-12 01:05:15 +01:00
function setCurrentlyValidatingElement$1 ( element ) {
2020-10-16 01:08:26 +02:00
{
2021-11-12 01:05:15 +01:00
if ( element ) {
var owner = element . _owner ;
var stack = describeUnknownElementTypeFrameInDEV ( element . type , element . _source , owner ? owner . type : null ) ;
setExtraStackFrame ( stack ) ;
} else {
setExtraStackFrame ( null ) ;
}
2020-10-16 01:08:26 +02:00
}
2021-11-12 01:05:15 +01:00
}
2020-10-16 01:08:26 +02:00
var propTypesMisspellWarningShown ;
{
propTypesMisspellWarningShown = false ;
}
function getDeclarationErrorAddendum ( ) {
if ( ReactCurrentOwner . current ) {
2023-02-07 08:04:52 +01:00
var name = getComponentNameFromType ( ReactCurrentOwner . current . type ) ;
2020-10-16 01:08:26 +02:00
if ( name ) {
return '\n\nCheck the render method of `' + name + '`.' ;
}
}
return '' ;
}
function getSourceInfoErrorAddendum ( source ) {
if ( source !== undefined ) {
var fileName = source . fileName . replace ( /^.*[\\\/]/ , '' ) ;
var lineNumber = source . lineNumber ;
return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.' ;
}
return '' ;
}
function getSourceInfoErrorAddendumForProps ( elementProps ) {
if ( elementProps !== null && elementProps !== undefined ) {
return getSourceInfoErrorAddendum ( elementProps . _ _source ) ;
}
return '' ;
}
/ * *
* Warn if there ' s no key explicitly set on dynamic arrays of children or
* object keys are not valid . This allows us to keep track of children between
* updates .
* /
var ownerHasKeyUseWarning = { } ;
function getCurrentComponentErrorInfo ( parentType ) {
var info = getDeclarationErrorAddendum ( ) ;
if ( ! info ) {
var parentName = typeof parentType === 'string' ? parentType : parentType . displayName || parentType . name ;
if ( parentName ) {
info = "\n\nCheck the top-level render call using <" + parentName + ">." ;
}
}
return info ;
}
/ * *
* Warn if the element doesn ' t have an explicit key assigned to it .
* This element is in an array . The array could grow and shrink or be
* reordered . All children that haven ' t already been validated are required to
* have a "key" property assigned to it . Error statuses are cached so a warning
* will only be shown once .
*
* @ internal
* @ param { ReactElement } element Element that requires a key .
* @ param { * } parentType element 's parent' s type .
* /
function validateExplicitKey ( element , parentType ) {
if ( ! element . _store || element . _store . validated || element . key != null ) {
return ;
}
element . _store . validated = true ;
var currentComponentErrorInfo = getCurrentComponentErrorInfo ( parentType ) ;
if ( ownerHasKeyUseWarning [ currentComponentErrorInfo ] ) {
return ;
}
ownerHasKeyUseWarning [ currentComponentErrorInfo ] = true ; // Usually the current owner is the offender, but if it accepts children as a
// property, it may be the creator of the child that's responsible for
// assigning it a key.
var childOwner = '' ;
if ( element && element . _owner && element . _owner !== ReactCurrentOwner . current ) {
// Give the component that originally created this child.
2023-02-07 08:04:52 +01:00
childOwner = " It was passed a child from " + getComponentNameFromType ( element . _owner . type ) + "." ;
2020-10-16 01:08:26 +02:00
}
{
2021-11-12 01:05:15 +01:00
setCurrentlyValidatingElement$1 ( element ) ;
2020-10-16 01:08:26 +02:00
2021-11-12 01:05:15 +01:00
error ( 'Each child in a list should have a unique "key" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.' , currentComponentErrorInfo , childOwner ) ;
setCurrentlyValidatingElement$1 ( null ) ;
}
2020-10-16 01:08:26 +02:00
}
/ * *
* Ensure that every element either is passed in a static location , in an
* array with an explicit keys property defined , or in an object literal
* with valid key property .
*
* @ internal
* @ param { ReactNode } node Statically passed child of any type .
* @ param { * } parentType node 's parent' s type .
* /
function validateChildKeys ( node , parentType ) {
if ( typeof node !== 'object' ) {
return ;
}
2023-02-07 08:04:52 +01:00
if ( isArray ( node ) ) {
2020-10-16 01:08:26 +02:00
for ( var i = 0 ; i < node . length ; i ++ ) {
var child = node [ i ] ;
if ( isValidElement ( child ) ) {
validateExplicitKey ( child , parentType ) ;
}
}
} else if ( isValidElement ( node ) ) {
// This element was passed in a valid location.
if ( node . _store ) {
node . _store . validated = true ;
}
} else if ( node ) {
var iteratorFn = getIteratorFn ( node ) ;
if ( typeof iteratorFn === 'function' ) {
// Entry iterators used to provide implicit keys,
// but now we print a separate warning for them later.
if ( iteratorFn !== node . entries ) {
var iterator = iteratorFn . call ( node ) ;
var step ;
while ( ! ( step = iterator . next ( ) ) . done ) {
if ( isValidElement ( step . value ) ) {
validateExplicitKey ( step . value , parentType ) ;
}
}
}
}
}
}
/ * *
* Given an element , validate that its props follow the propTypes definition ,
* provided by the type .
*
* @ param { ReactElement } element
* /
function validatePropTypes ( element ) {
{
var type = element . type ;
if ( type === null || type === undefined || typeof type === 'string' ) {
return ;
}
var propTypes ;
if ( typeof type === 'function' ) {
propTypes = type . propTypes ;
} else if ( typeof type === 'object' && ( type . $$typeof === REACT _FORWARD _REF _TYPE || // Note: Memo only checks outer props here.
// Inner props are checked in the reconciler.
type . $$typeof === REACT _MEMO _TYPE ) ) {
propTypes = type . propTypes ;
} else {
return ;
}
if ( propTypes ) {
2021-11-12 01:05:15 +01:00
// Intentionally inside to avoid triggering lazy initializers:
2023-02-07 08:04:52 +01:00
var name = getComponentNameFromType ( type ) ;
2021-11-12 01:05:15 +01:00
checkPropTypes ( propTypes , element . props , 'prop' , name , element ) ;
2020-10-16 01:08:26 +02:00
} else if ( type . PropTypes !== undefined && ! propTypesMisspellWarningShown ) {
2021-11-12 01:05:15 +01:00
propTypesMisspellWarningShown = true ; // Intentionally inside to avoid triggering lazy initializers:
2020-10-16 01:08:26 +02:00
2023-02-07 08:04:52 +01:00
var _name = getComponentNameFromType ( type ) ;
2021-11-12 01:05:15 +01:00
error ( 'Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?' , _name || 'Unknown' ) ;
2020-10-16 01:08:26 +02:00
}
if ( typeof type . getDefaultProps === 'function' && ! type . getDefaultProps . isReactClassApproved ) {
error ( 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.' ) ;
}
}
}
/ * *
* Given a fragment , validate that it can only be provided with fragment props
* @ param { ReactElement } fragment
* /
function validateFragmentProps ( fragment ) {
{
var keys = Object . keys ( fragment . props ) ;
for ( var i = 0 ; i < keys . length ; i ++ ) {
var key = keys [ i ] ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
if ( key !== 'children' && key !== 'key' ) {
2021-11-12 01:05:15 +01:00
setCurrentlyValidatingElement$1 ( fragment ) ;
2020-10-16 01:08:26 +02:00
error ( 'Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.' , key ) ;
2019-09-25 10:20:57 +02:00
2021-11-12 01:05:15 +01:00
setCurrentlyValidatingElement$1 ( null ) ;
2020-10-16 01:08:26 +02:00
break ;
2019-09-25 10:20:57 +02:00
}
}
2020-10-16 01:08:26 +02:00
if ( fragment . ref !== null ) {
2021-11-12 01:05:15 +01:00
setCurrentlyValidatingElement$1 ( fragment ) ;
2020-10-16 01:08:26 +02:00
error ( 'Invalid attribute `ref` supplied to `React.Fragment`.' ) ;
2021-11-12 01:05:15 +01:00
setCurrentlyValidatingElement$1 ( null ) ;
}
2018-12-14 05:41:57 +01:00
}
2019-09-25 10:20:57 +02:00
}
2020-10-16 01:08:26 +02:00
function createElementWithValidation ( type , props , children ) {
var validType = isValidElementType ( type ) ; // We warn in this case but don't throw. We expect the element creation to
// succeed and there will likely be errors in render.
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
if ( ! validType ) {
var info = '' ;
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
if ( type === undefined || typeof type === 'object' && type !== null && Object . keys ( type ) . length === 0 ) {
info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports." ;
}
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
var sourceInfo = getSourceInfoErrorAddendumForProps ( props ) ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
if ( sourceInfo ) {
info += sourceInfo ;
} else {
info += getDeclarationErrorAddendum ( ) ;
}
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
var typeString ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
if ( type === null ) {
typeString = 'null' ;
2023-02-07 08:04:52 +01:00
} else if ( isArray ( type ) ) {
2020-10-16 01:08:26 +02:00
typeString = 'array' ;
} else if ( type !== undefined && type . $$typeof === REACT _ELEMENT _TYPE ) {
2023-02-07 08:04:52 +01:00
typeString = "<" + ( getComponentNameFromType ( type . type ) || 'Unknown' ) + " />" ;
2020-10-16 01:08:26 +02:00
info = ' Did you accidentally export a JSX literal instead of a component?' ;
} else {
typeString = typeof type ;
}
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
{
error ( 'React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s' , typeString , info ) ;
}
2018-12-14 05:41:57 +01:00
}
2020-10-16 01:08:26 +02:00
var element = createElement . apply ( this , arguments ) ; // The result can be nullish if a mock or a custom function is used.
// TODO: Drop this when these are no longer allowed as the type argument.
if ( element == null ) {
return element ;
} // Skip key warning if the type isn't valid since our key validation logic
// doesn't expect a non-string/function type and can throw confusing errors.
// We don't want exception behavior to differ between dev and prod.
// (Rendering will throw with a helpful message and as soon as the type is
// fixed, the key warnings will appear.)
if ( validType ) {
for ( var i = 2 ; i < arguments . length ; i ++ ) {
validateChildKeys ( arguments [ i ] , type ) ;
}
2019-09-25 10:20:57 +02:00
}
2018-12-14 05:41:57 +01:00
2023-02-07 08:04:52 +01:00
if ( type === REACT _FRAGMENT _TYPE ) {
2020-10-16 01:08:26 +02:00
validateFragmentProps ( element ) ;
2019-09-25 10:20:57 +02:00
} else {
2020-10-16 01:08:26 +02:00
validatePropTypes ( element ) ;
2019-09-25 10:20:57 +02:00
}
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
return element ;
2019-09-25 10:20:57 +02:00
}
2020-10-16 01:08:26 +02:00
var didWarnAboutDeprecatedCreateFactory = false ;
function createFactoryWithValidation ( type ) {
var validatedFactory = createElementWithValidation . bind ( null , type ) ;
validatedFactory . type = type ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
{
if ( ! didWarnAboutDeprecatedCreateFactory ) {
didWarnAboutDeprecatedCreateFactory = true ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
warn ( 'React.createFactory() is deprecated and will be removed in ' + 'a future major release. Consider using JSX ' + 'or use React.createElement() directly instead.' ) ;
} // Legacy hook: remove it
2018-12-14 05:41:57 +01:00
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
Object . defineProperty ( validatedFactory , 'type' , {
enumerable : false ,
get : function ( ) {
warn ( 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.' ) ;
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
Object . defineProperty ( this , 'type' , {
value : type
} ) ;
return type ;
}
} ) ;
}
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
return validatedFactory ;
2018-12-14 05:41:57 +01:00
}
2020-10-16 01:08:26 +02:00
function cloneElementWithValidation ( element , props , children ) {
var newElement = cloneElement . apply ( this , arguments ) ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
for ( var i = 2 ; i < arguments . length ; i ++ ) {
validateChildKeys ( arguments [ i ] , newElement . type ) ;
2019-09-25 10:20:57 +02:00
}
2020-10-16 01:08:26 +02:00
validatePropTypes ( newElement ) ;
return newElement ;
2018-12-14 05:41:57 +01:00
}
2020-10-16 01:08:26 +02:00
var enableSchedulerDebugging = false ;
2022-04-12 17:12:47 +02:00
var enableProfiling = false ;
2023-02-07 08:04:52 +01:00
var frameYieldMs = 5 ;
2020-10-16 01:08:26 +02:00
function push ( heap , node ) {
var index = heap . length ;
heap . push ( node ) ;
siftUp ( heap , node , index ) ;
}
function peek ( heap ) {
2023-02-07 08:04:52 +01:00
return heap . length === 0 ? null : heap [ 0 ] ;
2020-10-16 01:08:26 +02:00
}
function pop ( heap ) {
2023-02-07 08:04:52 +01:00
if ( heap . length === 0 ) {
return null ;
}
2020-10-16 01:08:26 +02:00
2023-02-07 08:04:52 +01:00
var first = heap [ 0 ] ;
var last = heap . pop ( ) ;
2020-10-16 01:08:26 +02:00
2023-02-07 08:04:52 +01:00
if ( last !== first ) {
heap [ 0 ] = last ;
siftDown ( heap , last , 0 ) ;
2020-10-16 01:08:26 +02:00
}
2023-02-07 08:04:52 +01:00
return first ;
2020-10-16 01:08:26 +02:00
}
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
function siftUp ( heap , node , i ) {
var index = i ;
2023-02-07 08:04:52 +01:00
while ( index > 0 ) {
2020-10-16 01:08:26 +02:00
var parentIndex = index - 1 >>> 1 ;
var parent = heap [ parentIndex ] ;
2023-02-07 08:04:52 +01:00
if ( compare ( parent , node ) > 0 ) {
2020-10-16 01:08:26 +02:00
// The parent is larger. Swap positions.
heap [ parentIndex ] = node ;
heap [ index ] = parent ;
index = parentIndex ;
} else {
// The parent is smaller. Exit.
return ;
2018-12-14 05:41:57 +01:00
}
}
2020-10-16 01:08:26 +02:00
}
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
function siftDown ( heap , node , i ) {
var index = i ;
var length = heap . length ;
2023-02-07 08:04:52 +01:00
var halfLength = length >>> 1 ;
2019-09-25 10:20:57 +02:00
2023-02-07 08:04:52 +01:00
while ( index < halfLength ) {
2020-10-16 01:08:26 +02:00
var leftIndex = ( index + 1 ) * 2 - 1 ;
var left = heap [ leftIndex ] ;
var rightIndex = leftIndex + 1 ;
var right = heap [ rightIndex ] ; // If the left or right node is smaller, swap with the smaller of those.
2023-02-07 08:04:52 +01:00
if ( compare ( left , node ) < 0 ) {
if ( rightIndex < length && compare ( right , left ) < 0 ) {
2020-10-16 01:08:26 +02:00
heap [ index ] = right ;
heap [ rightIndex ] = node ;
index = rightIndex ;
} else {
heap [ index ] = left ;
heap [ leftIndex ] = node ;
index = leftIndex ;
2019-09-25 10:20:57 +02:00
}
2023-02-07 08:04:52 +01:00
} else if ( rightIndex < length && compare ( right , node ) < 0 ) {
2020-10-16 01:08:26 +02:00
heap [ index ] = right ;
heap [ rightIndex ] = node ;
index = rightIndex ;
2019-09-25 10:20:57 +02:00
} else {
2020-10-16 01:08:26 +02:00
// Neither child is smaller. Exit.
return ;
2019-09-25 10:20:57 +02:00
}
2020-10-16 01:08:26 +02:00
}
}
function compare ( a , b ) {
// Compare sort index first, then task id.
var diff = a . sortIndex - b . sortIndex ;
return diff !== 0 ? diff : a . id - b . id ;
2018-12-14 05:41:57 +01:00
}
2020-10-16 01:08:26 +02:00
// TODO: Use symbols?
var ImmediatePriority = 1 ;
var UserBlockingPriority = 2 ;
var NormalPriority = 3 ;
var LowPriority = 4 ;
var IdlePriority = 5 ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
function markTaskErrored ( task , ms ) {
2018-12-14 05:41:57 +01:00
}
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
/* eslint-disable no-var */
2023-02-07 08:04:52 +01:00
var getCurrentTime ;
var hasPerformanceNow = typeof performance === 'object' && typeof performance . now === 'function' ;
if ( hasPerformanceNow ) {
var localPerformance = performance ;
getCurrentTime = function ( ) {
return localPerformance . now ( ) ;
} ;
} else {
var localDate = Date ;
var initialTime = localDate . now ( ) ;
getCurrentTime = function ( ) {
return localDate . now ( ) - initialTime ;
} ;
} // Max 31 bit integer. The max integer size in V8 for 32-bit systems.
2020-10-16 01:08:26 +02:00
// Math.pow(2, 30) - 1
// 0b111111111111111111111111111111
2018-12-14 05:41:57 +01:00
2023-02-07 08:04:52 +01:00
2020-10-16 01:08:26 +02:00
var maxSigned31BitInt = 1073741823 ; // Times out immediately
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
var IMMEDIATE _PRIORITY _TIMEOUT = - 1 ; // Eventually times out
2019-09-25 10:20:57 +02:00
2021-11-12 01:05:15 +01:00
var USER _BLOCKING _PRIORITY _TIMEOUT = 250 ;
2020-10-16 01:08:26 +02:00
var NORMAL _PRIORITY _TIMEOUT = 5000 ;
var LOW _PRIORITY _TIMEOUT = 10000 ; // Never times out
2018-12-14 05:41:57 +01:00
2021-11-12 01:05:15 +01:00
var IDLE _PRIORITY _TIMEOUT = maxSigned31BitInt ; // Tasks are stored on a min heap
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
var taskQueue = [ ] ;
var timerQueue = [ ] ; // Incrementing id counter. Used to maintain insertion order.
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
var taskIdCounter = 1 ; // Pausing the scheduler is useful for debugging.
var currentTask = null ;
2023-02-07 08:04:52 +01:00
var currentPriorityLevel = NormalPriority ; // This is set while performing work, to prevent re-entrance.
2020-10-16 01:08:26 +02:00
var isPerformingWork = false ;
var isHostCallbackScheduled = false ;
2023-02-07 08:04:52 +01:00
var isHostTimeoutScheduled = false ; // Capture local references to native APIs, in case a polyfill overrides them.
var localSetTimeout = typeof setTimeout === 'function' ? setTimeout : null ;
var localClearTimeout = typeof clearTimeout === 'function' ? clearTimeout : null ;
var localSetImmediate = typeof setImmediate !== 'undefined' ? setImmediate : null ; // IE and Node.js + jsdom
var isInputPending = typeof navigator !== 'undefined' && navigator . scheduling !== undefined && navigator . scheduling . isInputPending !== undefined ? navigator . scheduling . isInputPending . bind ( navigator . scheduling ) : null ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
function advanceTimers ( currentTime ) {
// Check for tasks that are no longer delayed and add them to the queue.
var timer = peek ( timerQueue ) ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
while ( timer !== null ) {
if ( timer . callback === null ) {
// Timer was cancelled.
pop ( timerQueue ) ;
} else if ( timer . startTime <= currentTime ) {
// Timer fired. Transfer to the task queue.
pop ( timerQueue ) ;
timer . sortIndex = timer . expirationTime ;
push ( taskQueue , timer ) ;
} else {
// Remaining timers are pending.
return ;
}
timer = peek ( timerQueue ) ;
}
2019-09-25 10:20:57 +02:00
}
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
function handleTimeout ( currentTime ) {
isHostTimeoutScheduled = false ;
advanceTimers ( currentTime ) ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
if ( ! isHostCallbackScheduled ) {
if ( peek ( taskQueue ) !== null ) {
isHostCallbackScheduled = true ;
requestHostCallback ( flushWork ) ;
} else {
var firstTimer = peek ( timerQueue ) ;
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
if ( firstTimer !== null ) {
requestHostTimeout ( handleTimeout , firstTimer . startTime - currentTime ) ;
}
}
2018-12-14 05:41:57 +01:00
}
}
2020-10-16 01:08:26 +02:00
function flushWork ( hasTimeRemaining , initialTime ) {
2018-12-14 05:41:57 +01:00
Block Editor: Update `@wordpress` dependencies to match Gutenberg 4.5.1.
- Update the annotations, api-fetch, block-library, blocks, components, compose, core-data, data, date, dom, edit-post, editor, element, format-library, html-entities, i18n, jest-console, jest-preset-default, keycodes, list-reusable-blocks, notices, nux, plugins, rich-text, scripts, token-lists, url, viewport packages.
- Upgrades React from 16.5.2 to 16.6.3.
- Adds a missing `wp-date` dependency to the editor script.
- Updates changed dependencies in `script-loader.php`.
- Fixes undefined notices in some blocks.
- Removes incorrect `gutenberg` textdomain.
Merges [43891], [43903], and [43919] to trunk.
Props atimmer, aduth, youknowriad, danielbachhuber.
See #45145.
Built from https://develop.svn.wordpress.org/trunk@44262
git-svn-id: http://core.svn.wordpress.org/trunk@44092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-17 16:37:00 +01:00
2020-10-16 01:08:26 +02:00
isHostCallbackScheduled = false ;
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
if ( isHostTimeoutScheduled ) {
// We scheduled a timeout but it's no longer needed. Cancel it.
isHostTimeoutScheduled = false ;
cancelHostTimeout ( ) ;
}
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
isPerformingWork = true ;
var previousPriorityLevel = currentPriorityLevel ;
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
try {
if ( enableProfiling ) {
try {
return workLoop ( hasTimeRemaining , initialTime ) ;
} catch ( error ) {
if ( currentTask !== null ) {
var currentTime = getCurrentTime ( ) ;
markTaskErrored ( currentTask , currentTime ) ;
currentTask . isQueued = false ;
}
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
throw error ;
}
} else {
2021-11-12 01:05:15 +01:00
// No catch in prod code path.
2020-10-16 01:08:26 +02:00
return workLoop ( hasTimeRemaining , initialTime ) ;
}
} finally {
currentTask = null ;
currentPriorityLevel = previousPriorityLevel ;
isPerformingWork = false ;
}
}
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
function workLoop ( hasTimeRemaining , initialTime ) {
var currentTime = initialTime ;
advanceTimers ( currentTime ) ;
currentTask = peek ( taskQueue ) ;
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
while ( currentTask !== null && ! ( enableSchedulerDebugging ) ) {
if ( currentTask . expirationTime > currentTime && ( ! hasTimeRemaining || shouldYieldToHost ( ) ) ) {
// This currentTask hasn't expired, and we've reached the deadline.
break ;
}
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
var callback = currentTask . callback ;
2019-09-25 10:20:57 +02:00
2021-11-12 01:05:15 +01:00
if ( typeof callback === 'function' ) {
2020-10-16 01:08:26 +02:00
currentTask . callback = null ;
currentPriorityLevel = currentTask . priorityLevel ;
var didUserCallbackTimeout = currentTask . expirationTime <= currentTime ;
2022-04-12 17:12:47 +02:00
2020-10-16 01:08:26 +02:00
var continuationCallback = callback ( didUserCallbackTimeout ) ;
currentTime = getCurrentTime ( ) ;
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
if ( typeof continuationCallback === 'function' ) {
currentTask . callback = continuationCallback ;
} else {
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
if ( currentTask === peek ( taskQueue ) ) {
pop ( taskQueue ) ;
}
}
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
advanceTimers ( currentTime ) ;
} else {
pop ( taskQueue ) ;
}
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
currentTask = peek ( taskQueue ) ;
} // Return whether there's additional work
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
if ( currentTask !== null ) {
return true ;
} else {
var firstTimer = peek ( timerQueue ) ;
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
if ( firstTimer !== null ) {
requestHostTimeout ( handleTimeout , firstTimer . startTime - currentTime ) ;
}
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
return false ;
}
}
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
function unstable _runWithPriority ( priorityLevel , eventHandler ) {
switch ( priorityLevel ) {
case ImmediatePriority :
case UserBlockingPriority :
case NormalPriority :
case LowPriority :
case IdlePriority :
break ;
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
default :
priorityLevel = NormalPriority ;
}
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
var previousPriorityLevel = currentPriorityLevel ;
currentPriorityLevel = priorityLevel ;
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
try {
return eventHandler ( ) ;
} finally {
currentPriorityLevel = previousPriorityLevel ;
}
}
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
function unstable _next ( eventHandler ) {
var priorityLevel ;
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
switch ( currentPriorityLevel ) {
case ImmediatePriority :
case UserBlockingPriority :
case NormalPriority :
// Shift down to normal priority
priorityLevel = NormalPriority ;
break ;
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
default :
// Anything lower than normal priority should remain at the current level.
priorityLevel = currentPriorityLevel ;
break ;
}
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
var previousPriorityLevel = currentPriorityLevel ;
currentPriorityLevel = priorityLevel ;
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
try {
return eventHandler ( ) ;
} finally {
currentPriorityLevel = previousPriorityLevel ;
}
}
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
function unstable _wrapCallback ( callback ) {
var parentPriorityLevel = currentPriorityLevel ;
return function ( ) {
// This is a fork of runWithPriority, inlined for performance.
var previousPriorityLevel = currentPriorityLevel ;
currentPriorityLevel = parentPriorityLevel ;
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
try {
return callback . apply ( this , arguments ) ;
} finally {
currentPriorityLevel = previousPriorityLevel ;
}
} ;
}
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
function unstable _scheduleCallback ( priorityLevel , callback , options ) {
var currentTime = getCurrentTime ( ) ;
var startTime ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
if ( typeof options === 'object' && options !== null ) {
var delay = options . delay ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
if ( typeof delay === 'number' && delay > 0 ) {
startTime = currentTime + delay ;
} else {
startTime = currentTime ;
}
} else {
startTime = currentTime ;
}
Block Editor: Update `@wordpress` dependencies to match Gutenberg 4.5.1.
- Update the annotations, api-fetch, block-library, blocks, components, compose, core-data, data, date, dom, edit-post, editor, element, format-library, html-entities, i18n, jest-console, jest-preset-default, keycodes, list-reusable-blocks, notices, nux, plugins, rich-text, scripts, token-lists, url, viewport packages.
- Upgrades React from 16.5.2 to 16.6.3.
- Adds a missing `wp-date` dependency to the editor script.
- Updates changed dependencies in `script-loader.php`.
- Fixes undefined notices in some blocks.
- Removes incorrect `gutenberg` textdomain.
Merges [43891], [43903], and [43919] to trunk.
Props atimmer, aduth, youknowriad, danielbachhuber.
See #45145.
Built from https://develop.svn.wordpress.org/trunk@44262
git-svn-id: http://core.svn.wordpress.org/trunk@44092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-17 16:37:00 +01:00
2021-11-12 01:05:15 +01:00
var timeout ;
switch ( priorityLevel ) {
case ImmediatePriority :
timeout = IMMEDIATE _PRIORITY _TIMEOUT ;
break ;
case UserBlockingPriority :
timeout = USER _BLOCKING _PRIORITY _TIMEOUT ;
break ;
case IdlePriority :
timeout = IDLE _PRIORITY _TIMEOUT ;
break ;
case LowPriority :
timeout = LOW _PRIORITY _TIMEOUT ;
break ;
case NormalPriority :
default :
timeout = NORMAL _PRIORITY _TIMEOUT ;
break ;
}
2020-10-16 01:08:26 +02:00
var expirationTime = startTime + timeout ;
var newTask = {
id : taskIdCounter ++ ,
callback : callback ,
priorityLevel : priorityLevel ,
startTime : startTime ,
expirationTime : expirationTime ,
sortIndex : - 1
} ;
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
if ( startTime > currentTime ) {
// This is a delayed task.
newTask . sortIndex = startTime ;
push ( timerQueue , newTask ) ;
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
if ( peek ( taskQueue ) === null && newTask === peek ( timerQueue ) ) {
// All tasks are delayed, and this is the task with the earliest delay.
if ( isHostTimeoutScheduled ) {
// Cancel an existing timeout.
cancelHostTimeout ( ) ;
} else {
isHostTimeoutScheduled = true ;
} // Schedule a timeout.
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
requestHostTimeout ( handleTimeout , startTime - currentTime ) ;
}
} else {
newTask . sortIndex = expirationTime ;
push ( taskQueue , newTask ) ;
// wait until the next time we yield.
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
if ( ! isHostCallbackScheduled && ! isPerformingWork ) {
isHostCallbackScheduled = true ;
requestHostCallback ( flushWork ) ;
}
}
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
return newTask ;
}
Block Editor: Update `@wordpress` dependencies to match Gutenberg 4.5.1.
- Update the annotations, api-fetch, block-library, blocks, components, compose, core-data, data, date, dom, edit-post, editor, element, format-library, html-entities, i18n, jest-console, jest-preset-default, keycodes, list-reusable-blocks, notices, nux, plugins, rich-text, scripts, token-lists, url, viewport packages.
- Upgrades React from 16.5.2 to 16.6.3.
- Adds a missing `wp-date` dependency to the editor script.
- Updates changed dependencies in `script-loader.php`.
- Fixes undefined notices in some blocks.
- Removes incorrect `gutenberg` textdomain.
Merges [43891], [43903], and [43919] to trunk.
Props atimmer, aduth, youknowriad, danielbachhuber.
See #45145.
Built from https://develop.svn.wordpress.org/trunk@44262
git-svn-id: http://core.svn.wordpress.org/trunk@44092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-17 16:37:00 +01:00
2020-10-16 01:08:26 +02:00
function unstable _pauseExecution ( ) {
2019-09-25 10:20:57 +02:00
}
Block Editor: Update `@wordpress` dependencies to match Gutenberg 4.5.1.
- Update the annotations, api-fetch, block-library, blocks, components, compose, core-data, data, date, dom, edit-post, editor, element, format-library, html-entities, i18n, jest-console, jest-preset-default, keycodes, list-reusable-blocks, notices, nux, plugins, rich-text, scripts, token-lists, url, viewport packages.
- Upgrades React from 16.5.2 to 16.6.3.
- Adds a missing `wp-date` dependency to the editor script.
- Updates changed dependencies in `script-loader.php`.
- Fixes undefined notices in some blocks.
- Removes incorrect `gutenberg` textdomain.
Merges [43891], [43903], and [43919] to trunk.
Props atimmer, aduth, youknowriad, danielbachhuber.
See #45145.
Built from https://develop.svn.wordpress.org/trunk@44262
git-svn-id: http://core.svn.wordpress.org/trunk@44092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-17 16:37:00 +01:00
2020-10-16 01:08:26 +02:00
function unstable _continueExecution ( ) {
2019-03-21 13:48:00 +01:00
2020-10-16 01:08:26 +02:00
if ( ! isHostCallbackScheduled && ! isPerformingWork ) {
isHostCallbackScheduled = true ;
requestHostCallback ( flushWork ) ;
}
Block Editor: Update `@wordpress` dependencies to match Gutenberg 4.5.1.
- Update the annotations, api-fetch, block-library, blocks, components, compose, core-data, data, date, dom, edit-post, editor, element, format-library, html-entities, i18n, jest-console, jest-preset-default, keycodes, list-reusable-blocks, notices, nux, plugins, rich-text, scripts, token-lists, url, viewport packages.
- Upgrades React from 16.5.2 to 16.6.3.
- Adds a missing `wp-date` dependency to the editor script.
- Updates changed dependencies in `script-loader.php`.
- Fixes undefined notices in some blocks.
- Removes incorrect `gutenberg` textdomain.
Merges [43891], [43903], and [43919] to trunk.
Props atimmer, aduth, youknowriad, danielbachhuber.
See #45145.
Built from https://develop.svn.wordpress.org/trunk@44262
git-svn-id: http://core.svn.wordpress.org/trunk@44092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-17 16:37:00 +01:00
}
2020-10-16 01:08:26 +02:00
function unstable _getFirstCallbackNode ( ) {
return peek ( taskQueue ) ;
2019-09-25 10:20:57 +02:00
}
Block Editor: Update `@wordpress` dependencies to match Gutenberg 4.5.1.
- Update the annotations, api-fetch, block-library, blocks, components, compose, core-data, data, date, dom, edit-post, editor, element, format-library, html-entities, i18n, jest-console, jest-preset-default, keycodes, list-reusable-blocks, notices, nux, plugins, rich-text, scripts, token-lists, url, viewport packages.
- Upgrades React from 16.5.2 to 16.6.3.
- Adds a missing `wp-date` dependency to the editor script.
- Updates changed dependencies in `script-loader.php`.
- Fixes undefined notices in some blocks.
- Removes incorrect `gutenberg` textdomain.
Merges [43891], [43903], and [43919] to trunk.
Props atimmer, aduth, youknowriad, danielbachhuber.
See #45145.
Built from https://develop.svn.wordpress.org/trunk@44262
git-svn-id: http://core.svn.wordpress.org/trunk@44092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-17 16:37:00 +01:00
2020-10-16 01:08:26 +02:00
function unstable _cancelCallback ( task ) {
// remove from the queue because you can't remove arbitrary nodes from an
// array based heap, only the first one.)
task . callback = null ;
}
function unstable _getCurrentPriorityLevel ( ) {
return currentPriorityLevel ;
}
2023-02-07 08:04:52 +01:00
var isMessageLoopRunning = false ;
var scheduledHostCallback = null ;
var taskTimeoutID = - 1 ; // Scheduler periodically yields in case there is other work on the main
// thread, like user events. By default, it yields multiple times per frame.
// It does not attempt to align with frame boundaries, since most tasks don't
// need to be frame aligned; for those that do, use requestAnimationFrame.
var frameInterval = frameYieldMs ;
var startTime = - 1 ;
function shouldYieldToHost ( ) {
var timeElapsed = getCurrentTime ( ) - startTime ;
if ( timeElapsed < frameInterval ) {
// The main thread has only been blocked for a really short amount of time;
// smaller than a single frame. Don't yield yet.
return false ;
} // The main thread has been blocked for a non-negligible amount of time. We
return true ;
}
function requestPaint ( ) {
}
function forceFrameRate ( fps ) {
if ( fps < 0 || fps > 125 ) {
// Using console['error'] to evade Babel and ESLint
console [ 'error' ] ( 'forceFrameRate takes a positive int between 0 and 125, ' + 'forcing frame rates higher than 125 fps is not supported' ) ;
return ;
}
if ( fps > 0 ) {
frameInterval = Math . floor ( 1000 / fps ) ;
} else {
// reset the framerate
frameInterval = frameYieldMs ;
}
}
var performWorkUntilDeadline = function ( ) {
if ( scheduledHostCallback !== null ) {
var currentTime = getCurrentTime ( ) ; // Keep track of the start time so we can measure how long the main thread
// has been blocked.
startTime = currentTime ;
var hasTimeRemaining = true ; // If a scheduler task throws, exit the current browser task so the
// error can be observed.
//
// Intentionally not using a try-catch, since that makes some debugging
// techniques harder. Instead, if `scheduledHostCallback` errors, then
// `hasMoreWork` will remain true, and we'll continue the work loop.
var hasMoreWork = true ;
try {
hasMoreWork = scheduledHostCallback ( hasTimeRemaining , currentTime ) ;
} finally {
if ( hasMoreWork ) {
// If there's more work, schedule the next message event at the end
// of the preceding one.
schedulePerformWorkUntilDeadline ( ) ;
} else {
isMessageLoopRunning = false ;
scheduledHostCallback = null ;
}
}
} else {
isMessageLoopRunning = false ;
} // Yielding to the browser will give it a chance to paint, so we can
} ;
var schedulePerformWorkUntilDeadline ;
if ( typeof localSetImmediate === 'function' ) {
// Node.js and old IE.
// There's a few reasons for why we prefer setImmediate.
//
// Unlike MessageChannel, it doesn't prevent a Node.js process from exiting.
// (Even though this is a DOM fork of the Scheduler, you could get here
// with a mix of Node.js 15+, which has a MessageChannel, and jsdom.)
// https://github.com/facebook/react/issues/20756
//
// But also, it runs earlier which is the semantic we want.
// If other browsers ever implement it, it's better to use it.
// Although both of these would be inferior to native scheduling.
schedulePerformWorkUntilDeadline = function ( ) {
localSetImmediate ( performWorkUntilDeadline ) ;
} ;
} else if ( typeof MessageChannel !== 'undefined' ) {
// DOM and Worker environments.
// We prefer MessageChannel because of the 4ms setTimeout clamping.
var channel = new MessageChannel ( ) ;
var port = channel . port2 ;
channel . port1 . onmessage = performWorkUntilDeadline ;
schedulePerformWorkUntilDeadline = function ( ) {
port . postMessage ( null ) ;
} ;
} else {
// We should only fallback here in non-browser environments.
schedulePerformWorkUntilDeadline = function ( ) {
localSetTimeout ( performWorkUntilDeadline , 0 ) ;
} ;
}
function requestHostCallback ( callback ) {
scheduledHostCallback = callback ;
if ( ! isMessageLoopRunning ) {
isMessageLoopRunning = true ;
schedulePerformWorkUntilDeadline ( ) ;
}
}
function requestHostTimeout ( callback , ms ) {
taskTimeoutID = localSetTimeout ( function ( ) {
callback ( getCurrentTime ( ) ) ;
} , ms ) ;
}
function cancelHostTimeout ( ) {
localClearTimeout ( taskTimeoutID ) ;
taskTimeoutID = - 1 ;
}
2020-10-16 01:08:26 +02:00
var unstable _requestPaint = requestPaint ;
2022-04-12 17:12:47 +02:00
var unstable _Profiling = null ;
2020-10-16 01:08:26 +02:00
var Scheduler = /*#__PURE__*/ Object . freeze ( {
_ _proto _ _ : null ,
unstable _ImmediatePriority : ImmediatePriority ,
unstable _UserBlockingPriority : UserBlockingPriority ,
unstable _NormalPriority : NormalPriority ,
unstable _IdlePriority : IdlePriority ,
unstable _LowPriority : LowPriority ,
unstable _runWithPriority : unstable _runWithPriority ,
unstable _next : unstable _next ,
unstable _scheduleCallback : unstable _scheduleCallback ,
unstable _cancelCallback : unstable _cancelCallback ,
unstable _wrapCallback : unstable _wrapCallback ,
unstable _getCurrentPriorityLevel : unstable _getCurrentPriorityLevel ,
2023-02-07 08:04:52 +01:00
unstable _shouldYield : shouldYieldToHost ,
2020-10-16 01:08:26 +02:00
unstable _requestPaint : unstable _requestPaint ,
unstable _continueExecution : unstable _continueExecution ,
unstable _pauseExecution : unstable _pauseExecution ,
unstable _getFirstCallbackNode : unstable _getFirstCallbackNode ,
get unstable _now ( ) { return getCurrentTime ; } ,
2023-02-07 08:04:52 +01:00
unstable _forceFrameRate : forceFrameRate ,
2020-10-16 01:08:26 +02:00
unstable _Profiling : unstable _Profiling
} ) ;
Block Editor: Update `@wordpress` dependencies to match Gutenberg 4.5.1.
- Update the annotations, api-fetch, block-library, blocks, components, compose, core-data, data, date, dom, edit-post, editor, element, format-library, html-entities, i18n, jest-console, jest-preset-default, keycodes, list-reusable-blocks, notices, nux, plugins, rich-text, scripts, token-lists, url, viewport packages.
- Upgrades React from 16.5.2 to 16.6.3.
- Adds a missing `wp-date` dependency to the editor script.
- Updates changed dependencies in `script-loader.php`.
- Fixes undefined notices in some blocks.
- Removes incorrect `gutenberg` textdomain.
Merges [43891], [43903], and [43919] to trunk.
Props atimmer, aduth, youknowriad, danielbachhuber.
See #45145.
Built from https://develop.svn.wordpress.org/trunk@44262
git-svn-id: http://core.svn.wordpress.org/trunk@44092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-17 16:37:00 +01:00
2023-02-07 08:04:52 +01:00
var ReactSharedInternals$1 = {
ReactCurrentDispatcher : ReactCurrentDispatcher ,
ReactCurrentOwner : ReactCurrentOwner ,
ReactCurrentBatchConfig : ReactCurrentBatchConfig ,
// Re-export the schedule API(s) for UMD bundles.
// This avoids introducing a dependency on a new UMD global in a minor update,
// Since that would be a breaking change (e.g. for all existing CodeSandboxes).
// This re-export is only required for UMD bundles;
// CJS bundles use the shared NPM package.
Scheduler : Scheduler
} ;
Block Editor: Update `@wordpress` dependencies to match Gutenberg 4.5.1.
- Update the annotations, api-fetch, block-library, blocks, components, compose, core-data, data, date, dom, edit-post, editor, element, format-library, html-entities, i18n, jest-console, jest-preset-default, keycodes, list-reusable-blocks, notices, nux, plugins, rich-text, scripts, token-lists, url, viewport packages.
- Upgrades React from 16.5.2 to 16.6.3.
- Adds a missing `wp-date` dependency to the editor script.
- Updates changed dependencies in `script-loader.php`.
- Fixes undefined notices in some blocks.
- Removes incorrect `gutenberg` textdomain.
Merges [43891], [43903], and [43919] to trunk.
Props atimmer, aduth, youknowriad, danielbachhuber.
See #45145.
Built from https://develop.svn.wordpress.org/trunk@44262
git-svn-id: http://core.svn.wordpress.org/trunk@44092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-17 16:37:00 +01:00
2020-10-16 01:08:26 +02:00
{
2023-02-07 08:04:52 +01:00
ReactSharedInternals$1 . ReactCurrentActQueue = ReactCurrentActQueue ;
ReactSharedInternals$1 . ReactDebugCurrentFrame = ReactDebugCurrentFrame ;
2020-10-16 01:08:26 +02:00
}
Block Editor: Update `@wordpress` dependencies to match Gutenberg 4.5.1.
- Update the annotations, api-fetch, block-library, blocks, components, compose, core-data, data, date, dom, edit-post, editor, element, format-library, html-entities, i18n, jest-console, jest-preset-default, keycodes, list-reusable-blocks, notices, nux, plugins, rich-text, scripts, token-lists, url, viewport packages.
- Upgrades React from 16.5.2 to 16.6.3.
- Adds a missing `wp-date` dependency to the editor script.
- Updates changed dependencies in `script-loader.php`.
- Fixes undefined notices in some blocks.
- Removes incorrect `gutenberg` textdomain.
Merges [43891], [43903], and [43919] to trunk.
Props atimmer, aduth, youknowriad, danielbachhuber.
See #45145.
Built from https://develop.svn.wordpress.org/trunk@44262
git-svn-id: http://core.svn.wordpress.org/trunk@44092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-17 16:37:00 +01:00
2023-02-07 08:04:52 +01:00
function startTransition ( scope , options ) {
var prevTransition = ReactCurrentBatchConfig . transition ;
ReactCurrentBatchConfig . transition = { } ;
var currentTransition = ReactCurrentBatchConfig . transition ;
2019-03-21 13:48:00 +01:00
2020-10-16 01:08:26 +02:00
{
2023-02-07 08:04:52 +01:00
ReactCurrentBatchConfig . transition . _updatedFibers = new Set ( ) ;
2019-09-25 10:20:57 +02:00
}
2020-10-16 01:08:26 +02:00
2019-09-25 10:20:57 +02:00
try {
2023-02-07 08:04:52 +01:00
scope ( ) ;
2019-09-25 10:20:57 +02:00
} finally {
2023-02-07 08:04:52 +01:00
ReactCurrentBatchConfig . transition = prevTransition ;
2018-12-14 05:41:57 +01:00
2023-02-07 08:04:52 +01:00
{
if ( prevTransition === null && currentTransition . _updatedFibers ) {
var updatedFibersCount = currentTransition . _updatedFibers . size ;
2020-10-16 01:08:26 +02:00
2023-02-07 08:04:52 +01:00
if ( updatedFibersCount > 10 ) {
warn ( 'Detected a large number of updates inside startTransition. ' + 'If this is due to a subscription please re-write it to use React provided hooks. ' + 'Otherwise concurrent mode guarantees are off the table.' ) ;
2019-09-25 10:20:57 +02:00
}
2023-02-07 08:04:52 +01:00
currentTransition . _updatedFibers . clear ( ) ;
2019-09-25 10:20:57 +02:00
}
}
}
}
2018-12-14 05:41:57 +01:00
2023-02-07 08:04:52 +01:00
var didWarnAboutMessageChannel = false ;
var enqueueTaskImpl = null ;
function enqueueTask ( task ) {
if ( enqueueTaskImpl === null ) {
2019-09-25 10:20:57 +02:00
try {
2023-02-07 08:04:52 +01:00
// read require off the module object to get around the bundlers.
// we don't want them to detect a require and bundle a Node polyfill.
var requireString = ( 'require' + Math . random ( ) ) . slice ( 0 , 7 ) ;
var nodeRequire = module && module [ requireString ] ; // assuming we're in node, let's try to get node's
// version of setImmediate, bypassing fake timers if any.
enqueueTaskImpl = nodeRequire . call ( module , 'timers' ) . setImmediate ;
} catch ( _err ) {
// we're in a browser
// we can't use regular timers because they may still be faked
// so we try MessageChannel+postMessage instead
enqueueTaskImpl = function ( callback ) {
{
if ( didWarnAboutMessageChannel === false ) {
didWarnAboutMessageChannel = true ;
2019-09-25 10:20:57 +02:00
2023-02-07 08:04:52 +01:00
if ( typeof MessageChannel === 'undefined' ) {
error ( 'This browser does not have a MessageChannel implementation, ' + 'so enqueuing tasks via await act(async () => ...) will fail. ' + 'Please file an issue at https://github.com/facebook/react/issues ' + 'if you encounter this warning.' ) ;
}
2020-10-16 01:08:26 +02:00
}
2018-12-14 05:41:57 +01:00
}
2020-10-16 01:08:26 +02:00
2023-02-07 08:04:52 +01:00
var channel = new MessageChannel ( ) ;
channel . port1 . onmessage = callback ;
channel . port2 . postMessage ( undefined ) ;
} ;
2019-09-25 10:20:57 +02:00
}
2020-10-16 01:08:26 +02:00
}
2018-12-14 05:41:57 +01:00
2023-02-07 08:04:52 +01:00
return enqueueTaskImpl ( task ) ;
2018-12-14 05:41:57 +01:00
}
2023-02-07 08:04:52 +01:00
var actScopeDepth = 0 ;
var didWarnNoAwaitAct = false ;
function act ( callback ) {
2020-10-16 01:08:26 +02:00
{
2023-02-07 08:04:52 +01:00
// `act` calls can be nested, so we track the depth. This represents the
// number of `act` scopes on the stack.
var prevActScopeDepth = actScopeDepth ;
actScopeDepth ++ ;
2018-12-14 05:41:57 +01:00
2023-02-07 08:04:52 +01:00
if ( ReactCurrentActQueue . current === null ) {
// This is the outermost `act` scope. Initialize the queue. The reconciler
// will detect the queue and use it instead of Scheduler.
ReactCurrentActQueue . current = [ ] ;
2020-10-16 01:08:26 +02:00
}
2018-12-14 05:41:57 +01:00
2023-02-07 08:04:52 +01:00
var prevIsBatchingLegacy = ReactCurrentActQueue . isBatchingLegacy ;
var result ;
2019-09-25 10:20:57 +02:00
2020-10-16 01:08:26 +02:00
try {
2023-02-07 08:04:52 +01:00
// Used to reproduce behavior of `batchedUpdates` in legacy mode. Only
// set to `true` while the given callback is executed, not for updates
// triggered during an async event, because this is how the legacy
// implementation of `act` behaved.
ReactCurrentActQueue . isBatchingLegacy = true ;
result = callback ( ) ; // Replicate behavior of original `act` implementation in legacy mode,
// which flushed updates immediately after the scope function exits, even
// if it's an async function.
if ( ! prevIsBatchingLegacy && ReactCurrentActQueue . didScheduleLegacyUpdate ) {
var queue = ReactCurrentActQueue . current ;
if ( queue !== null ) {
ReactCurrentActQueue . didScheduleLegacyUpdate = false ;
flushActQueue ( queue ) ;
}
2020-10-16 01:08:26 +02:00
}
} catch ( error ) {
2023-02-07 08:04:52 +01:00
popActScope ( prevActScopeDepth ) ;
throw error ;
} finally {
ReactCurrentActQueue . isBatchingLegacy = prevIsBatchingLegacy ;
}
if ( result !== null && typeof result === 'object' && typeof result . then === 'function' ) {
var thenableResult = result ; // The callback is an async function (i.e. returned a promise). Wait
// for it to resolve before exiting the current scope.
var wasAwaited = false ;
var thenable = {
then : function ( resolve , reject ) {
wasAwaited = true ;
thenableResult . then ( function ( returnValue ) {
popActScope ( prevActScopeDepth ) ;
if ( actScopeDepth === 0 ) {
// We've exited the outermost act scope. Recursively flush the
// queue until there's no remaining work.
recursivelyFlushAsyncActWork ( returnValue , resolve , reject ) ;
} else {
resolve ( returnValue ) ;
}
} , function ( error ) {
// The callback threw an error.
popActScope ( prevActScopeDepth ) ;
reject ( error ) ;
} ) ;
}
} ;
2018-12-14 05:41:57 +01:00
2023-02-07 08:04:52 +01:00
{
if ( ! didWarnNoAwaitAct && typeof Promise !== 'undefined' ) {
// eslint-disable-next-line no-undef
Promise . resolve ( ) . then ( function ( ) { } ) . then ( function ( ) {
if ( ! wasAwaited ) {
didWarnNoAwaitAct = true ;
error ( 'You called act(async () => ...) without await. ' + 'This could lead to unexpected testing behaviour, ' + 'interleaving multiple act calls and mixing their ' + 'scopes. ' + 'You should - await act(async () => ...);' ) ;
}
} ) ;
}
}
2018-12-14 05:41:57 +01:00
2023-02-07 08:04:52 +01:00
return thenable ;
} else {
var returnValue = result ; // The callback is not an async function. Exit the current scope
// immediately, without awaiting.
popActScope ( prevActScopeDepth ) ;
if ( actScopeDepth === 0 ) {
// Exiting the outermost act scope. Flush the queue.
var _queue = ReactCurrentActQueue . current ;
if ( _queue !== null ) {
flushActQueue ( _queue ) ;
ReactCurrentActQueue . current = null ;
} // Return a thenable. If the user awaits it, we'll flush again in
// case additional work was scheduled by a microtask.
var _thenable = {
then : function ( resolve , reject ) {
// Confirm we haven't re-entered another `act` scope, in case
// the user does something weird like await the thenable
// multiple times.
if ( ReactCurrentActQueue . current === null ) {
// Recursively flush the queue until there's no remaining work.
ReactCurrentActQueue . current = [ ] ;
recursivelyFlushAsyncActWork ( returnValue , resolve , reject ) ;
} else {
resolve ( returnValue ) ;
}
}
} ;
return _thenable ;
} else {
// Since we're inside a nested `act` scope, the returned thenable
// immediately resolves. The outer scope will flush the queue.
var _thenable2 = {
then : function ( resolve , reject ) {
resolve ( returnValue ) ;
}
} ;
return _thenable2 ;
2020-10-16 01:08:26 +02:00
}
2019-09-25 10:20:57 +02:00
}
2020-10-16 01:08:26 +02:00
}
2018-12-14 05:41:57 +01:00
}
2023-02-07 08:04:52 +01:00
function popActScope ( prevActScopeDepth ) {
{
if ( prevActScopeDepth !== actScopeDepth - 1 ) {
error ( 'You seem to have overlapping act() calls, this is not supported. ' + 'Be sure to await previous act() calls before making a new one. ' ) ;
2019-09-25 10:20:57 +02:00
}
2023-02-07 08:04:52 +01:00
actScopeDepth = prevActScopeDepth ;
2020-10-16 01:08:26 +02:00
}
2018-12-14 05:41:57 +01:00
}
2019-09-25 10:20:57 +02:00
2023-02-07 08:04:52 +01:00
function recursivelyFlushAsyncActWork ( returnValue , resolve , reject ) {
{
var queue = ReactCurrentActQueue . current ;
if ( queue !== null ) {
try {
flushActQueue ( queue ) ;
enqueueTask ( function ( ) {
if ( queue . length === 0 ) {
// No additional work was scheduled. Finish.
ReactCurrentActQueue . current = null ;
resolve ( returnValue ) ;
} else {
// Keep flushing work until there's none left.
recursivelyFlushAsyncActWork ( returnValue , resolve , reject ) ;
}
} ) ;
} catch ( error ) {
reject ( error ) ;
2020-10-16 01:08:26 +02:00
}
2023-02-07 08:04:52 +01:00
} else {
resolve ( returnValue ) ;
2019-09-25 10:20:57 +02:00
}
2020-10-16 01:08:26 +02:00
}
2018-12-14 05:41:57 +01:00
}
2023-02-07 08:04:52 +01:00
var isFlushing = false ;
2019-09-25 10:20:57 +02:00
2023-02-07 08:04:52 +01:00
function flushActQueue ( queue ) {
{
if ( ! isFlushing ) {
// Prevent re-entrance.
isFlushing = true ;
var i = 0 ;
2019-09-25 10:20:57 +02:00
2023-02-07 08:04:52 +01:00
try {
for ( ; i < queue . length ; i ++ ) {
var callback = queue [ i ] ;
2020-10-16 01:08:26 +02:00
2023-02-07 08:04:52 +01:00
do {
callback = callback ( true ) ;
} while ( callback !== null ) ;
}
2020-10-16 01:08:26 +02:00
2023-02-07 08:04:52 +01:00
queue . length = 0 ;
} catch ( error ) {
// If something throws, leave the remaining callbacks on the queue.
queue = queue . slice ( i + 1 ) ;
throw error ;
} finally {
isFlushing = false ;
}
}
2020-10-16 01:08:26 +02:00
}
2018-12-14 05:41:57 +01:00
}
2020-10-16 01:08:26 +02:00
var createElement$1 = createElementWithValidation ;
var cloneElement$1 = cloneElementWithValidation ;
var createFactory = createFactoryWithValidation ;
var Children = {
2018-12-14 05:41:57 +01:00
map : mapChildren ,
forEach : forEachChildren ,
count : countChildren ,
toArray : toArray ,
only : onlyChild
2020-10-16 01:08:26 +02:00
} ;
2018-12-14 05:41:57 +01:00
2020-10-16 01:08:26 +02:00
exports . Children = Children ;
exports . Component = Component ;
2023-02-07 08:04:52 +01:00
exports . Fragment = REACT _FRAGMENT _TYPE ;
exports . Profiler = REACT _PROFILER _TYPE ;
2020-10-16 01:08:26 +02:00
exports . PureComponent = PureComponent ;
2023-02-07 08:04:52 +01:00
exports . StrictMode = REACT _STRICT _MODE _TYPE ;
exports . Suspense = REACT _SUSPENSE _TYPE ;
2020-10-16 01:08:26 +02:00
exports . _ _SECRET _INTERNALS _DO _NOT _USE _OR _YOU _WILL _BE _FIRED = ReactSharedInternals$1 ;
exports . cloneElement = cloneElement$1 ;
exports . createContext = createContext ;
exports . createElement = createElement$1 ;
exports . createFactory = createFactory ;
exports . createRef = createRef ;
exports . forwardRef = forwardRef ;
exports . isValidElement = isValidElement ;
exports . lazy = lazy ;
exports . memo = memo ;
2023-02-07 08:04:52 +01:00
exports . startTransition = startTransition ;
exports . unstable _act = act ;
2020-10-16 01:08:26 +02:00
exports . useCallback = useCallback ;
exports . useContext = useContext ;
exports . useDebugValue = useDebugValue ;
2023-02-07 08:04:52 +01:00
exports . useDeferredValue = useDeferredValue ;
2020-10-16 01:08:26 +02:00
exports . useEffect = useEffect ;
2023-02-07 08:04:52 +01:00
exports . useId = useId ;
2020-10-16 01:08:26 +02:00
exports . useImperativeHandle = useImperativeHandle ;
2023-02-07 08:04:52 +01:00
exports . useInsertionEffect = useInsertionEffect ;
2020-10-16 01:08:26 +02:00
exports . useLayoutEffect = useLayoutEffect ;
exports . useMemo = useMemo ;
exports . useReducer = useReducer ;
exports . useRef = useRef ;
exports . useState = useState ;
2023-02-07 08:04:52 +01:00
exports . useSyncExternalStore = useSyncExternalStore ;
exports . useTransition = useTransition ;
2020-10-16 01:08:26 +02:00
exports . version = ReactVersion ;
2018-12-14 05:41:57 +01:00
} ) ) ) ;