Comparing version
@@ -11,1260 +11,342 @@ /** | ||
'use strict'; | ||
if (process.env.NODE_ENV !== "production") { | ||
(function() { | ||
'use strict'; | ||
var React = require('react'); | ||
// ATTENTION | ||
// When adding new symbols to this file, | ||
// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols' | ||
// 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'); // TODO: Delete with enableRenderableContext | ||
var REACT_CONSUMER_TYPE = Symbol.for('react.consumer'); | ||
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; | ||
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; | ||
} | ||
return null; | ||
} | ||
var ReactSharedInternals = React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; | ||
function error(format) { | ||
{ | ||
{ | ||
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { | ||
args[_key2 - 1] = arguments[_key2]; | ||
"use strict"; | ||
"production" !== process.env.NODE_ENV && | ||
(function () { | ||
function getComponentNameFromType(type) { | ||
if (null == type) return null; | ||
if ("function" === typeof type) | ||
return type.$$typeof === REACT_CLIENT_REFERENCE | ||
? null | ||
: type.displayName || type.name || null; | ||
if ("string" === typeof type) return type; | ||
switch (type) { | ||
case REACT_FRAGMENT_TYPE: | ||
return "Fragment"; | ||
case REACT_PROFILER_TYPE: | ||
return "Profiler"; | ||
case REACT_STRICT_MODE_TYPE: | ||
return "StrictMode"; | ||
case REACT_SUSPENSE_TYPE: | ||
return "Suspense"; | ||
case REACT_SUSPENSE_LIST_TYPE: | ||
return "SuspenseList"; | ||
case REACT_ACTIVITY_TYPE: | ||
return "Activity"; | ||
case REACT_VIEW_TRANSITION_TYPE: | ||
return "ViewTransition"; | ||
} | ||
printWarning('error', format, args); | ||
} | ||
} | ||
} | ||
function printWarning(level, format, args) { | ||
// When changing this logic, you might want to also | ||
// update consoleWithStackDev.www.js as well. | ||
{ | ||
var stack = ReactSharedInternals.getStackAddendum(); | ||
if (stack !== '') { | ||
format += '%s'; | ||
args = args.concat([stack]); | ||
} // eslint-disable-next-line react-internal/safe-string-coercion | ||
var argsWithFormat = args.map(function (item) { | ||
return String(item); | ||
}); // Careful: RN currently depends on this prefix | ||
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 | ||
Function.prototype.apply.call(console[level], console, argsWithFormat); | ||
} | ||
} | ||
// ----------------------------------------------------------------------------- | ||
var enableScopeAPI = false; // Experimental Create Event Handle API. | ||
var enableTransitionTracing = false; // No known bugs, but needs performance testing | ||
var enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber | ||
// as a normal prop instead of stripping it from the props object. | ||
// Passes `ref` as a normal prop instead of stripping it from the props object | ||
// during element creation. | ||
var enableRefAsProp = true; | ||
var enableRenderableContext = true; // ----------------------------------------------------------------------------- | ||
// stuff. Intended to enable React core members to more easily debug scheduling | ||
// issues in DEV builds. | ||
var enableDebugTracing = false; | ||
function getWrappedName(outerType, innerType, wrapperName) { | ||
var displayName = outerType.displayName; | ||
if (displayName) { | ||
return displayName; | ||
} | ||
var functionName = innerType.displayName || innerType.name || ''; | ||
return functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName; | ||
} // Keep in sync with react-reconciler/getComponentNameFromFiber | ||
function getContextName(type) { | ||
return type.displayName || 'Context'; | ||
} | ||
var REACT_CLIENT_REFERENCE$2 = Symbol.for('react.client.reference'); // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead. | ||
function getComponentNameFromType(type) { | ||
if (type == null) { | ||
// Host root, text node or just invalid type. | ||
return null; | ||
} | ||
if (typeof type === 'function') { | ||
if (type.$$typeof === REACT_CLIENT_REFERENCE$2) { | ||
// TODO: Create a convention for naming client references with debug info. | ||
if ("object" === typeof type) | ||
switch ( | ||
("number" === typeof type.tag && | ||
console.error( | ||
"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue." | ||
), | ||
type.$$typeof) | ||
) { | ||
case REACT_PORTAL_TYPE: | ||
return "Portal"; | ||
case REACT_CONTEXT_TYPE: | ||
return type.displayName || "Context"; | ||
case REACT_CONSUMER_TYPE: | ||
return (type._context.displayName || "Context") + ".Consumer"; | ||
case REACT_FORWARD_REF_TYPE: | ||
var innerType = type.render; | ||
type = type.displayName; | ||
type || | ||
((type = innerType.displayName || innerType.name || ""), | ||
(type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef")); | ||
return type; | ||
case REACT_MEMO_TYPE: | ||
return ( | ||
(innerType = type.displayName || null), | ||
null !== innerType | ||
? innerType | ||
: getComponentNameFromType(type.type) || "Memo" | ||
); | ||
case REACT_LAZY_TYPE: | ||
innerType = type._payload; | ||
type = type._init; | ||
try { | ||
return getComponentNameFromType(type(innerType)); | ||
} catch (x) {} | ||
} | ||
return null; | ||
} | ||
return type.displayName || type.name || null; | ||
} | ||
if (typeof type === 'string') { | ||
return type; | ||
} | ||
switch (type) { | ||
case REACT_FRAGMENT_TYPE: | ||
return 'Fragment'; | ||
case REACT_PORTAL_TYPE: | ||
return 'Portal'; | ||
case REACT_PROFILER_TYPE: | ||
return 'Profiler'; | ||
case REACT_STRICT_MODE_TYPE: | ||
return 'StrictMode'; | ||
case REACT_SUSPENSE_TYPE: | ||
return 'Suspense'; | ||
case REACT_SUSPENSE_LIST_TYPE: | ||
return 'SuspenseList'; | ||
} | ||
if (typeof type === 'object') { | ||
{ | ||
if (typeof type.tag === 'number') { | ||
error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.'); | ||
} | ||
function testStringCoercion(value) { | ||
return "" + value; | ||
} | ||
switch (type.$$typeof) { | ||
case REACT_PROVIDER_TYPE: | ||
{ | ||
return null; | ||
} | ||
case REACT_CONTEXT_TYPE: | ||
var context = type; | ||
{ | ||
return getContextName(context) + '.Provider'; | ||
} | ||
case REACT_CONSUMER_TYPE: | ||
{ | ||
var consumer = type; | ||
return getContextName(consumer._context) + '.Consumer'; | ||
} | ||
case REACT_FORWARD_REF_TYPE: | ||
return getWrappedName(type, type.render, 'ForwardRef'); | ||
case REACT_MEMO_TYPE: | ||
var outerName = type.displayName || null; | ||
if (outerName !== null) { | ||
return outerName; | ||
} | ||
return getComponentNameFromType(type.type) || 'Memo'; | ||
case REACT_LAZY_TYPE: | ||
{ | ||
var lazyComponent = type; | ||
var payload = lazyComponent._payload; | ||
var init = lazyComponent._init; | ||
try { | ||
return getComponentNameFromType(init(payload)); | ||
} catch (x) { | ||
return null; | ||
} | ||
} | ||
} | ||
} | ||
return null; | ||
} | ||
// $FlowFixMe[method-unbinding] | ||
var hasOwnProperty = Object.prototype.hasOwnProperty; | ||
var assign = Object.assign; | ||
/* | ||
* The `'' + value` pattern (used 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[incompatible-return] 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'; // $FlowFixMe[incompatible-return] | ||
return type; | ||
} | ||
} // $FlowFixMe[incompatible-return] 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 using it here.', typeName(value)); | ||
return testStringCoercion(value); // throw (to help callers find troubleshooting comments) | ||
} | ||
} | ||
} | ||
var REACT_CLIENT_REFERENCE$1 = Symbol.for('react.client.reference'); | ||
function isValidElementType(type) { | ||
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). | ||
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 || enableTransitionTracing ) { | ||
return true; | ||
} | ||
if (typeof type === 'object' && type !== null) { | ||
if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || !enableRenderableContext || type.$$typeof === REACT_CONSUMER_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_CLIENT_REFERENCE$1 || type.getModuleId !== undefined) { | ||
return true; | ||
} | ||
} | ||
return false; | ||
} | ||
var isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare | ||
function isArray(a) { | ||
return isArrayImpl(a); | ||
} | ||
// 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[cannot-write] 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[cannot-write] 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.'); | ||
} | ||
} | ||
} | ||
var prefix; | ||
function describeBuiltInComponentFrame(name) { | ||
{ | ||
if (prefix === undefined) { | ||
// Extract the VM specific prefix used by each line. | ||
function checkKeyStringCoercion(value) { | ||
try { | ||
throw Error(); | ||
} catch (x) { | ||
var match = x.stack.trim().match(/\n( *(at )?)/); | ||
prefix = match && match[1] || ''; | ||
testStringCoercion(value); | ||
var JSCompiler_inline_result = !1; | ||
} catch (e) { | ||
JSCompiler_inline_result = !0; | ||
} | ||
} // We use the prefix to ensure our stacks line up with native stack frames. | ||
return '\n' + prefix + name; | ||
} | ||
} | ||
var reentry = false; | ||
var componentFrameCache; | ||
{ | ||
var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; | ||
componentFrameCache = new PossiblyWeakMap(); | ||
} | ||
/** | ||
* Leverages native browser/VM stack frames to get proper details (e.g. | ||
* filename, line + col number) for a single component in a component stack. We | ||
* do this by: | ||
* (1) throwing and catching an error in the function - this will be our | ||
* control error. | ||
* (2) calling the component which will eventually throw an error that we'll | ||
* catch - this will be our sample error. | ||
* (3) diffing the control and sample error stacks to find the stack frame | ||
* which represents our component. | ||
*/ | ||
function describeNativeComponentFrame(fn, construct) { | ||
// If something asked for a stack inside a fake render, it should get ignored. | ||
if (!fn || reentry) { | ||
return ''; | ||
} | ||
{ | ||
var frame = componentFrameCache.get(fn); | ||
if (frame !== undefined) { | ||
return frame; | ||
if (JSCompiler_inline_result) { | ||
JSCompiler_inline_result = console; | ||
var JSCompiler_temp_const = JSCompiler_inline_result.error; | ||
var JSCompiler_inline_result$jscomp$0 = | ||
("function" === typeof Symbol && | ||
Symbol.toStringTag && | ||
value[Symbol.toStringTag]) || | ||
value.constructor.name || | ||
"Object"; | ||
JSCompiler_temp_const.call( | ||
JSCompiler_inline_result, | ||
"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", | ||
JSCompiler_inline_result$jscomp$0 | ||
); | ||
return testStringCoercion(value); | ||
} | ||
} | ||
} | ||
reentry = true; | ||
var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe[incompatible-type] It does accept undefined. | ||
Error.prepareStackTrace = undefined; | ||
var previousDispatcher = null; | ||
{ | ||
previousDispatcher = ReactSharedInternals.H; // Set the dispatcher in DEV because this might be call in the render function | ||
// for warnings. | ||
ReactSharedInternals.H = null; | ||
disableLogs(); | ||
} | ||
/** | ||
* Finding a common stack frame between sample and control errors can be | ||
* tricky given the different types and levels of stack trace truncation from | ||
* different JS VMs. So instead we'll attempt to control what that common | ||
* frame should be through this object method: | ||
* Having both the sample and control errors be in the function under the | ||
* `DescribeNativeComponentFrameRoot` property, + setting the `name` and | ||
* `displayName` properties of the function ensures that a stack | ||
* frame exists that has the method name `DescribeNativeComponentFrameRoot` in | ||
* it for both control and sample stacks. | ||
*/ | ||
var RunInRootFrame = { | ||
DetermineComponentFrameRoot: function () { | ||
var control; | ||
function getTaskName(type) { | ||
if (type === REACT_FRAGMENT_TYPE) return "<>"; | ||
if ( | ||
"object" === typeof type && | ||
null !== type && | ||
type.$$typeof === REACT_LAZY_TYPE | ||
) | ||
return "<...>"; | ||
try { | ||
// This should throw. | ||
if (construct) { | ||
// Something should be setting the props in the constructor. | ||
var Fake = function () { | ||
throw Error(); | ||
}; // $FlowFixMe[prop-missing] | ||
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; | ||
} // $FlowFixMe[prop-missing] found when upgrading Flow | ||
fn.call(Fake.prototype); | ||
} | ||
} else { | ||
try { | ||
throw Error(); | ||
} catch (x) { | ||
control = x; | ||
} // TODO(luna): This will currently only throw if the function component | ||
// tries to access React/ReactDOM/props. We should probably make this throw | ||
// in simple components too | ||
var maybePromise = fn(); // If the function component returns a promise, it's likely an async | ||
// component, which we don't yet support. Attach a noop catch handler to | ||
// silence the error. | ||
// TODO: Implement component stacks for async client components? | ||
if (maybePromise && typeof maybePromise.catch === 'function') { | ||
maybePromise.catch(function () {}); | ||
} | ||
} | ||
} catch (sample) { | ||
// This is inlined manually because closure doesn't do it for us. | ||
if (sample && control && typeof sample.stack === 'string') { | ||
return [sample.stack, control.stack]; | ||
} | ||
var name = getComponentNameFromType(type); | ||
return name ? "<" + name + ">" : "<...>"; | ||
} catch (x) { | ||
return "<...>"; | ||
} | ||
return [null, null]; | ||
} | ||
}; // $FlowFixMe[prop-missing] | ||
RunInRootFrame.DetermineComponentFrameRoot.displayName = 'DetermineComponentFrameRoot'; | ||
var namePropDescriptor = Object.getOwnPropertyDescriptor(RunInRootFrame.DetermineComponentFrameRoot, 'name'); // Before ES6, the `name` property was not configurable. | ||
if (namePropDescriptor && namePropDescriptor.configurable) { | ||
// V8 utilizes a function's `name` property when generating a stack trace. | ||
Object.defineProperty(RunInRootFrame.DetermineComponentFrameRoot, // Configurable properties can be updated even if its writable descriptor | ||
// is set to `false`. | ||
// $FlowFixMe[cannot-write] | ||
'name', { | ||
value: 'DetermineComponentFrameRoot' | ||
}); | ||
} | ||
try { | ||
var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(), | ||
sampleStack = _RunInRootFrame$Deter[0], | ||
controlStack = _RunInRootFrame$Deter[1]; | ||
if (sampleStack && controlStack) { | ||
// 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 = sampleStack.split('\n'); | ||
var controlLines = controlStack.split('\n'); | ||
var s = 0; | ||
var c = 0; | ||
while (s < sampleLines.length && !sampleLines[s].includes('DetermineComponentFrameRoot')) { | ||
s++; | ||
} | ||
while (c < controlLines.length && !controlLines[c].includes('DetermineComponentFrameRoot')) { | ||
c++; | ||
} // We couldn't find our intentionally injected common root frame, attempt | ||
// to find another common root frame by search from the bottom of the | ||
// control stack... | ||
if (s === sampleLines.length || c === controlLines.length) { | ||
s = sampleLines.length - 1; | ||
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. | ||
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); | ||
} | ||
if (true) { | ||
if (typeof fn === 'function') { | ||
componentFrameCache.set(fn, _frame); | ||
} | ||
} // Return the line we found. | ||
return _frame; | ||
} | ||
} while (s >= 1 && c >= 0); | ||
} | ||
break; | ||
} | ||
} | ||
function getOwner() { | ||
var dispatcher = ReactSharedInternals.A; | ||
return null === dispatcher ? null : dispatcher.getOwner(); | ||
} | ||
} finally { | ||
reentry = false; | ||
{ | ||
ReactSharedInternals.H = previousDispatcher; | ||
reenableLogs(); | ||
function UnknownOwner() { | ||
return Error("react-stack-top-frame"); | ||
} | ||
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) { | ||
{ | ||
return describeNativeComponentFrame(fn, false); | ||
} | ||
} | ||
function shouldConstruct(Component) { | ||
var prototype = Component.prototype; | ||
return !!(prototype && prototype.isReactComponent); | ||
} | ||
function describeUnknownElementTypeFrameInDEV(type) { | ||
if (type == null) { | ||
return ''; | ||
} | ||
if (typeof type === 'function') { | ||
{ | ||
return describeNativeComponentFrame(type, shouldConstruct(type)); | ||
} | ||
} | ||
if (typeof type === 'string') { | ||
return describeBuiltInComponentFrame(type); | ||
} | ||
switch (type) { | ||
case REACT_SUSPENSE_TYPE: | ||
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); | ||
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)); | ||
} catch (x) {} | ||
} | ||
} | ||
} | ||
return ''; | ||
} | ||
var REACT_CLIENT_REFERENCE = Symbol.for('react.client.reference'); | ||
var specialPropKeyWarningShown; | ||
var didWarnAboutElementRef; | ||
{ | ||
didWarnAboutElementRef = {}; | ||
} | ||
function hasValidRef(config) { | ||
{ | ||
if (hasOwnProperty.call(config, 'ref')) { | ||
var getter = Object.getOwnPropertyDescriptor(config, 'ref').get; | ||
if (getter && getter.isReactWarning) { | ||
return false; | ||
function hasValidKey(config) { | ||
if (hasOwnProperty.call(config, "key")) { | ||
var getter = Object.getOwnPropertyDescriptor(config, "key").get; | ||
if (getter && getter.isReactWarning) return !1; | ||
} | ||
return void 0 !== config.key; | ||
} | ||
} | ||
return config.ref !== undefined; | ||
} | ||
function hasValidKey(config) { | ||
{ | ||
if (hasOwnProperty.call(config, 'key')) { | ||
var getter = Object.getOwnPropertyDescriptor(config, 'key').get; | ||
if (getter && getter.isReactWarning) { | ||
return false; | ||
function defineKeyPropWarningGetter(props, displayName) { | ||
function warnAboutAccessingKey() { | ||
specialPropKeyWarningShown || | ||
((specialPropKeyWarningShown = !0), | ||
console.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://react.dev/link/special-props)", | ||
displayName | ||
)); | ||
} | ||
warnAboutAccessingKey.isReactWarning = !0; | ||
Object.defineProperty(props, "key", { | ||
get: warnAboutAccessingKey, | ||
configurable: !0 | ||
}); | ||
} | ||
} | ||
return config.key !== undefined; | ||
} | ||
function defineKeyPropWarningGetter(props, displayName) { | ||
{ | ||
var warnAboutAccessingKey = function () { | ||
if (!specialPropKeyWarningShown) { | ||
specialPropKeyWarningShown = true; | ||
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://react.dev/link/special-props)', displayName); | ||
} | ||
}; | ||
warnAboutAccessingKey.isReactWarning = true; | ||
Object.defineProperty(props, 'key', { | ||
get: warnAboutAccessingKey, | ||
configurable: true | ||
}); | ||
} | ||
} | ||
function elementRefGetterWithDeprecationWarning() { | ||
{ | ||
var componentName = getComponentNameFromType(this.type); | ||
if (!didWarnAboutElementRef[componentName]) { | ||
didWarnAboutElementRef[componentName] = true; | ||
error('Accessing element.ref was removed in React 19. ref is now a ' + 'regular prop. It will be removed from the JSX Element ' + 'type in a future release.'); | ||
} // An undefined `element.ref` is coerced to `null` for | ||
// backwards compatibility. | ||
var refProp = this.props.ref; | ||
return refProp !== undefined ? refProp : null; | ||
} | ||
} | ||
/** | ||
* 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 | ||
*/ | ||
function ReactElement(type, key, _ref, self, source, owner, props) { | ||
var ref; | ||
{ | ||
// When enableRefAsProp is on, ignore whatever was passed as the ref | ||
// argument and treat `props.ref` as the source of truth. The only thing we | ||
// use this for is `element.ref`, which will log a deprecation warning on | ||
// access. In the next release, we can remove `element.ref` as well as the | ||
// `ref` argument. | ||
var refProp = props.ref; // An undefined `element.ref` is coerced to `null` for | ||
// backwards compatibility. | ||
ref = refProp !== undefined ? refProp : null; | ||
} | ||
var element; | ||
{ | ||
// In dev, make `ref` a non-enumerable property with a warning. It's non- | ||
// enumerable so that test matchers and serializers don't access it and | ||
// trigger the warning. | ||
// | ||
// `ref` will be removed from the element completely in a future release. | ||
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, | ||
props: props, | ||
// Record the component responsible for creating this element. | ||
_owner: owner | ||
}; | ||
if (ref !== null) { | ||
Object.defineProperty(element, 'ref', { | ||
enumerable: false, | ||
get: elementRefGetterWithDeprecationWarning | ||
function elementRefGetterWithDeprecationWarning() { | ||
var componentName = getComponentNameFromType(this.type); | ||
didWarnAboutElementRef[componentName] || | ||
((didWarnAboutElementRef[componentName] = !0), | ||
console.error( | ||
"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release." | ||
)); | ||
componentName = this.props.ref; | ||
return void 0 !== componentName ? componentName : null; | ||
} | ||
function ReactElement( | ||
type, | ||
key, | ||
self, | ||
source, | ||
owner, | ||
props, | ||
debugStack, | ||
debugTask | ||
) { | ||
self = props.ref; | ||
type = { | ||
$$typeof: REACT_ELEMENT_TYPE, | ||
type: type, | ||
key: key, | ||
props: props, | ||
_owner: owner | ||
}; | ||
null !== (void 0 !== self ? self : null) | ||
? Object.defineProperty(type, "ref", { | ||
enumerable: !1, | ||
get: elementRefGetterWithDeprecationWarning | ||
}) | ||
: Object.defineProperty(type, "ref", { enumerable: !1, value: null }); | ||
type._store = {}; | ||
Object.defineProperty(type._store, "validated", { | ||
configurable: !1, | ||
enumerable: !1, | ||
writable: !0, | ||
value: 0 | ||
}); | ||
} else { | ||
// Don't warn on access if a ref is not given. This reduces false | ||
// positives in cases where a test serializer uses | ||
// getOwnPropertyDescriptors to compare objects, like Jest does, which is | ||
// a problem because it bypasses non-enumerability. | ||
// | ||
// So unfortunately this will trigger a false positive warning in Jest | ||
// when the diff is printed: | ||
// | ||
// expect(<div ref={ref} />).toEqual(<span ref={ref} />); | ||
// | ||
// A bit sketchy, but this is what we've done for the `props.key` and | ||
// `props.ref` accessors for years, which implies it will be good enough | ||
// for `element.ref`, too. Let's see if anyone complains. | ||
Object.defineProperty(element, 'ref', { | ||
enumerable: false, | ||
Object.defineProperty(type, "_debugInfo", { | ||
configurable: !1, | ||
enumerable: !1, | ||
writable: !0, | ||
value: null | ||
}); | ||
Object.defineProperty(type, "_debugStack", { | ||
configurable: !1, | ||
enumerable: !1, | ||
writable: !0, | ||
value: debugStack | ||
}); | ||
Object.defineProperty(type, "_debugTask", { | ||
configurable: !1, | ||
enumerable: !1, | ||
writable: !0, | ||
value: debugTask | ||
}); | ||
Object.freeze && (Object.freeze(type.props), Object.freeze(type)); | ||
return type; | ||
} | ||
} | ||
{ | ||
// 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 | ||
}); // debugInfo contains Server Component debug information. | ||
Object.defineProperty(element, '_debugInfo', { | ||
configurable: false, | ||
enumerable: false, | ||
writable: true, | ||
value: null | ||
}); | ||
if (Object.freeze) { | ||
Object.freeze(element.props); | ||
Object.freeze(element); | ||
} | ||
} | ||
return element; | ||
} | ||
var didWarnAboutKeySpread = {}; | ||
/** | ||
* https://github.com/reactjs/rfcs/pull/107 | ||
* @param {*} type | ||
* @param {object} props | ||
* @param {string} key | ||
*/ | ||
function jsxDEV$1(type, config, maybeKey, isStaticChildren, source, self) { | ||
{ | ||
if (!isValidElementType(type)) { | ||
// This is an invalid element 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. | ||
var info = ''; | ||
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."; | ||
} | ||
var typeString; | ||
if (type === null) { | ||
typeString = 'null'; | ||
} else if (isArray(type)) { | ||
typeString = 'array'; | ||
} else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) { | ||
typeString = "<" + (getComponentNameFromType(type.type) || 'Unknown') + " />"; | ||
info = ' Did you accidentally export a JSX literal instead of a component?'; | ||
} else { | ||
typeString = typeof type; | ||
} | ||
error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info); | ||
} else { | ||
// This is a valid element type. | ||
// 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.) | ||
function jsxDEVImpl( | ||
type, | ||
config, | ||
maybeKey, | ||
isStaticChildren, | ||
source, | ||
self, | ||
debugStack, | ||
debugTask | ||
) { | ||
var children = config.children; | ||
if (children !== undefined) { | ||
if (isStaticChildren) { | ||
if (isArray(children)) { | ||
for (var i = 0; i < children.length; i++) { | ||
validateChildKeys(children[i], type); | ||
} | ||
if (Object.freeze) { | ||
Object.freeze(children); | ||
} | ||
} else { | ||
error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.'); | ||
} | ||
} else { | ||
validateChildKeys(children, type); | ||
} | ||
if (void 0 !== children) | ||
if (isStaticChildren) | ||
if (isArrayImpl(children)) { | ||
for ( | ||
isStaticChildren = 0; | ||
isStaticChildren < children.length; | ||
isStaticChildren++ | ||
) | ||
validateChildKeys(children[isStaticChildren]); | ||
Object.freeze && Object.freeze(children); | ||
} else | ||
console.error( | ||
"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead." | ||
); | ||
else validateChildKeys(children); | ||
if (hasOwnProperty.call(config, "key")) { | ||
children = getComponentNameFromType(type); | ||
var keys = Object.keys(config).filter(function (k) { | ||
return "key" !== k; | ||
}); | ||
isStaticChildren = | ||
0 < keys.length | ||
? "{key: someKey, " + keys.join(": ..., ") + ": ...}" | ||
: "{key: someKey}"; | ||
didWarnAboutKeySpread[children + isStaticChildren] || | ||
((keys = | ||
0 < keys.length ? "{" + keys.join(": ..., ") + ": ...}" : "{}"), | ||
console.error( | ||
'A props object containing a "key" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />', | ||
isStaticChildren, | ||
children, | ||
keys, | ||
children | ||
), | ||
(didWarnAboutKeySpread[children + isStaticChildren] = !0)); | ||
} | ||
} // Warn about key spread regardless of whether the type is valid. | ||
if (hasOwnProperty.call(config, 'key')) { | ||
var componentName = getComponentNameFromType(type); | ||
var keys = Object.keys(config).filter(function (k) { | ||
return k !== 'key'; | ||
}); | ||
var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}'; | ||
if (!didWarnAboutKeySpread[componentName + beforeExample]) { | ||
var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}'; | ||
error('A props object containing a "key" prop is being spread into JSX:\n' + ' let props = %s;\n' + ' <%s {...props} />\n' + 'React keys must be passed directly to JSX without using spread:\n' + ' let props = %s;\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName); | ||
didWarnAboutKeySpread[componentName + beforeExample] = true; | ||
} | ||
children = null; | ||
void 0 !== maybeKey && | ||
(checkKeyStringCoercion(maybeKey), (children = "" + maybeKey)); | ||
hasValidKey(config) && | ||
(checkKeyStringCoercion(config.key), (children = "" + config.key)); | ||
if ("key" in config) { | ||
maybeKey = {}; | ||
for (var propName in config) | ||
"key" !== propName && (maybeKey[propName] = config[propName]); | ||
} else maybeKey = config; | ||
children && | ||
defineKeyPropWarningGetter( | ||
maybeKey, | ||
"function" === typeof type | ||
? type.displayName || type.name || "Unknown" | ||
: type | ||
); | ||
return ReactElement( | ||
type, | ||
children, | ||
self, | ||
source, | ||
getOwner(), | ||
maybeKey, | ||
debugStack, | ||
debugTask | ||
); | ||
} | ||
var key = null; | ||
var ref = null; // Currently, key can be spread in as a prop. This causes a potential | ||
// issue if key is also explicitly declared (ie. <div {...props} key="Hi" /> | ||
// or <div key="Hi" {...props} /> ). We want to deprecate key spread, | ||
// but as an intermediary step, we will use jsxDEV for everything except | ||
// <div {...props} key="Hi" />, because we aren't currently able to tell if | ||
// key is explicitly declared to be undefined or not. | ||
if (maybeKey !== undefined) { | ||
{ | ||
checkKeyStringCoercion(maybeKey); | ||
} | ||
key = '' + maybeKey; | ||
function validateChildKeys(node) { | ||
"object" === typeof node && | ||
null !== node && | ||
node.$$typeof === REACT_ELEMENT_TYPE && | ||
node._store && | ||
(node._store.validated = 1); | ||
} | ||
if (hasValidKey(config)) { | ||
{ | ||
checkKeyStringCoercion(config.key); | ||
var React = require("react"), | ||
REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), | ||
REACT_PORTAL_TYPE = Symbol.for("react.portal"), | ||
REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), | ||
REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), | ||
REACT_PROFILER_TYPE = Symbol.for("react.profiler"), | ||
REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), | ||
REACT_CONTEXT_TYPE = Symbol.for("react.context"), | ||
REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), | ||
REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), | ||
REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), | ||
REACT_MEMO_TYPE = Symbol.for("react.memo"), | ||
REACT_LAZY_TYPE = Symbol.for("react.lazy"), | ||
REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), | ||
REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"), | ||
REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), | ||
ReactSharedInternals = | ||
React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, | ||
hasOwnProperty = Object.prototype.hasOwnProperty, | ||
isArrayImpl = Array.isArray, | ||
createTask = console.createTask | ||
? console.createTask | ||
: function () { | ||
return null; | ||
}; | ||
React = { | ||
react_stack_bottom_frame: function (callStackForError) { | ||
return callStackForError(); | ||
} | ||
key = '' + config.key; | ||
} | ||
if (hasValidRef(config)) ; | ||
var props; | ||
if (!('key' in config)) { | ||
// If key was not spread in, we can reuse the original props object. This | ||
// only works for `jsx`, not `createElement`, because `jsx` is a compiler | ||
// target and the compiler always passes a new object. For `createElement`, | ||
// we can't assume a new object is passed every time because it can be | ||
// called manually. | ||
// | ||
// Spreading key is a warning in dev. In a future release, we will not | ||
// remove a spread key from the props object. (But we'll still warn.) We'll | ||
// always pass the object straight through. | ||
props = config; | ||
} else { | ||
// We need to remove reserved props (key, prop, ref). Create a fresh props | ||
// object and copy over all the non-reserved props. We don't use `delete` | ||
// because in V8 it will deopt the object to dictionary mode. | ||
props = {}; | ||
for (var propName in config) { | ||
// Skip over reserved prop names | ||
if (propName !== 'key' && (enableRefAsProp )) { | ||
{ | ||
props[propName] = config[propName]; | ||
} | ||
} | ||
} | ||
} | ||
if (key || !enableRefAsProp ) { | ||
var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type; | ||
if (key) { | ||
defineKeyPropWarningGetter(props, displayName); | ||
} | ||
} | ||
var element = ReactElement(type, key, ref, self, source, ReactSharedInternals.owner, props); | ||
if (type === REACT_FRAGMENT_TYPE) { | ||
validateFragmentProps(element); | ||
} | ||
return element; | ||
} | ||
} | ||
function getDeclarationErrorAddendum() { | ||
{ | ||
if (ReactSharedInternals.owner) { | ||
var name = getComponentNameFromType(ReactSharedInternals.owner.type); | ||
if (name) { | ||
return '\n\nCheck the render method of `' + name + '`.'; | ||
} | ||
} | ||
return ''; | ||
} | ||
} | ||
/** | ||
* 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' || !node) { | ||
return; | ||
} | ||
if (node.$$typeof === REACT_CLIENT_REFERENCE) ; else if (isArray(node)) { | ||
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 { | ||
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); | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
/** | ||
* 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 | ||
*/ | ||
function isValidElement(object) { | ||
return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; | ||
} | ||
var ownerHasKeyUseWarning = {}; | ||
/** | ||
* 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 != null && element._owner !== ReactSharedInternals.owner) { | ||
var ownerName = null; | ||
if (typeof element._owner.tag === 'number') { | ||
ownerName = getComponentNameFromType(element._owner.type); | ||
} else if (typeof element._owner.name === 'string') { | ||
ownerName = element._owner.name; | ||
} // Give the component that originally created this child. | ||
childOwner = " It was passed a child from " + ownerName + "."; | ||
} | ||
setCurrentlyValidatingElement(element); | ||
error('Each child in a list should have a unique "key" prop.' + '%s%s See https://react.dev/link/warning-keys for more information.', currentComponentErrorInfo, childOwner); | ||
setCurrentlyValidatingElement(null); | ||
} | ||
} | ||
function setCurrentlyValidatingElement(element) { | ||
{ | ||
if (element) { | ||
var stack = describeUnknownElementTypeFrameInDEV(element.type); | ||
ReactSharedInternals.setExtraStackFrame(stack); | ||
} else { | ||
ReactSharedInternals.setExtraStackFrame(null); | ||
} | ||
} | ||
} | ||
function getCurrentComponentErrorInfo(parentType) { | ||
{ | ||
var info = getDeclarationErrorAddendum(); | ||
if (!info) { | ||
var parentName = getComponentNameFromType(parentType); | ||
if (parentName) { | ||
info = "\n\nCheck the top-level render call using <" + parentName + ">."; | ||
} | ||
} | ||
return info; | ||
} | ||
} | ||
/** | ||
* Given a fragment, validate that it can only be provided with fragment props | ||
* @param {ReactElement} fragment | ||
*/ | ||
function validateFragmentProps(fragment) { | ||
// TODO: Move this to render phase instead of at element creation. | ||
{ | ||
var keys = Object.keys(fragment.props); | ||
for (var i = 0; i < keys.length; i++) { | ||
var key = keys[i]; | ||
if (key !== 'children' && key !== 'key') { | ||
setCurrentlyValidatingElement(fragment); | ||
error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key); | ||
setCurrentlyValidatingElement(null); | ||
break; | ||
} | ||
} | ||
} | ||
} | ||
var jsxDEV = jsxDEV$1 ; | ||
exports.Fragment = REACT_FRAGMENT_TYPE; | ||
exports.jsxDEV = jsxDEV; | ||
}; | ||
var specialPropKeyWarningShown; | ||
var didWarnAboutElementRef = {}; | ||
var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind( | ||
React, | ||
UnknownOwner | ||
)(); | ||
var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner)); | ||
var didWarnAboutKeySpread = {}; | ||
exports.Fragment = REACT_FRAGMENT_TYPE; | ||
exports.jsxDEV = function ( | ||
type, | ||
config, | ||
maybeKey, | ||
isStaticChildren, | ||
source, | ||
self | ||
) { | ||
var trackActualOwner = | ||
1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++; | ||
return jsxDEVImpl( | ||
type, | ||
config, | ||
maybeKey, | ||
isStaticChildren, | ||
source, | ||
self, | ||
trackActualOwner | ||
? Error("react-stack-top-frame") | ||
: unknownOwnerDebugStack, | ||
trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask | ||
); | ||
}; | ||
})(); | ||
} |
/** | ||
* @license React | ||
* react-jsx-dev-runtime.production.min.js | ||
* react-jsx-dev-runtime.production.js | ||
* | ||
@@ -11,10 +11,5 @@ * Copyright (c) Meta Platforms, Inc. and affiliates. | ||
'use strict'; | ||
// ATTENTION | ||
const REACT_FRAGMENT_TYPE = Symbol.for('react.fragment'); | ||
const jsxDEV = undefined; | ||
"use strict"; | ||
var REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"); | ||
exports.Fragment = REACT_FRAGMENT_TYPE; | ||
exports.jsxDEV = jsxDEV; | ||
exports.jsxDEV = void 0; |
/** | ||
* @license React | ||
* react-jsx-dev-runtime.profiling.min.js | ||
* react-jsx-dev-runtime.profiling.js | ||
* | ||
@@ -11,10 +11,5 @@ * Copyright (c) Meta Platforms, Inc. and affiliates. | ||
'use strict'; | ||
// ATTENTION | ||
const REACT_FRAGMENT_TYPE = Symbol.for('react.fragment'); | ||
const jsxDEV = undefined; | ||
"use strict"; | ||
var REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"); | ||
exports.Fragment = REACT_FRAGMENT_TYPE; | ||
exports.jsxDEV = jsxDEV; | ||
exports.jsxDEV = void 0; |
@@ -11,1288 +11,351 @@ /** | ||
'use strict'; | ||
if (process.env.NODE_ENV !== "production") { | ||
(function() { | ||
'use strict'; | ||
var React = require('react'); | ||
// ATTENTION | ||
// When adding new symbols to this file, | ||
// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols' | ||
// 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'); // TODO: Delete with enableRenderableContext | ||
var REACT_CONSUMER_TYPE = Symbol.for('react.consumer'); | ||
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; | ||
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; | ||
} | ||
return null; | ||
} | ||
var ReactSharedInternals = React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; | ||
function error(format) { | ||
{ | ||
{ | ||
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { | ||
args[_key2 - 1] = arguments[_key2]; | ||
"use strict"; | ||
"production" !== process.env.NODE_ENV && | ||
(function () { | ||
function getComponentNameFromType(type) { | ||
if (null == type) return null; | ||
if ("function" === typeof type) | ||
return type.$$typeof === REACT_CLIENT_REFERENCE | ||
? null | ||
: type.displayName || type.name || null; | ||
if ("string" === typeof type) return type; | ||
switch (type) { | ||
case REACT_FRAGMENT_TYPE: | ||
return "Fragment"; | ||
case REACT_PROFILER_TYPE: | ||
return "Profiler"; | ||
case REACT_STRICT_MODE_TYPE: | ||
return "StrictMode"; | ||
case REACT_SUSPENSE_TYPE: | ||
return "Suspense"; | ||
case REACT_SUSPENSE_LIST_TYPE: | ||
return "SuspenseList"; | ||
case REACT_ACTIVITY_TYPE: | ||
return "Activity"; | ||
case REACT_VIEW_TRANSITION_TYPE: | ||
return "ViewTransition"; | ||
} | ||
printWarning('error', format, args); | ||
} | ||
} | ||
} | ||
function printWarning(level, format, args) { | ||
// When changing this logic, you might want to also | ||
// update consoleWithStackDev.www.js as well. | ||
{ | ||
var stack = ReactSharedInternals.getStackAddendum(); | ||
if (stack !== '') { | ||
format += '%s'; | ||
args = args.concat([stack]); | ||
} // eslint-disable-next-line react-internal/safe-string-coercion | ||
var argsWithFormat = args.map(function (item) { | ||
return String(item); | ||
}); // Careful: RN currently depends on this prefix | ||
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 | ||
Function.prototype.apply.call(console[level], console, argsWithFormat); | ||
} | ||
} | ||
// ----------------------------------------------------------------------------- | ||
var enableScopeAPI = false; // Experimental Create Event Handle API. | ||
var enableTransitionTracing = false; // No known bugs, but needs performance testing | ||
var enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber | ||
// as a normal prop instead of stripping it from the props object. | ||
// Passes `ref` as a normal prop instead of stripping it from the props object | ||
// during element creation. | ||
var enableRefAsProp = true; | ||
var enableRenderableContext = true; // ----------------------------------------------------------------------------- | ||
// stuff. Intended to enable React core members to more easily debug scheduling | ||
// issues in DEV builds. | ||
var enableDebugTracing = false; | ||
function getWrappedName(outerType, innerType, wrapperName) { | ||
var displayName = outerType.displayName; | ||
if (displayName) { | ||
return displayName; | ||
} | ||
var functionName = innerType.displayName || innerType.name || ''; | ||
return functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName; | ||
} // Keep in sync with react-reconciler/getComponentNameFromFiber | ||
function getContextName(type) { | ||
return type.displayName || 'Context'; | ||
} | ||
var REACT_CLIENT_REFERENCE$2 = Symbol.for('react.client.reference'); // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead. | ||
function getComponentNameFromType(type) { | ||
if (type == null) { | ||
// Host root, text node or just invalid type. | ||
return null; | ||
} | ||
if (typeof type === 'function') { | ||
if (type.$$typeof === REACT_CLIENT_REFERENCE$2) { | ||
// TODO: Create a convention for naming client references with debug info. | ||
if ("object" === typeof type) | ||
switch ( | ||
("number" === typeof type.tag && | ||
console.error( | ||
"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue." | ||
), | ||
type.$$typeof) | ||
) { | ||
case REACT_PORTAL_TYPE: | ||
return "Portal"; | ||
case REACT_CONTEXT_TYPE: | ||
return type.displayName || "Context"; | ||
case REACT_CONSUMER_TYPE: | ||
return (type._context.displayName || "Context") + ".Consumer"; | ||
case REACT_FORWARD_REF_TYPE: | ||
var innerType = type.render; | ||
type = type.displayName; | ||
type || | ||
((type = innerType.displayName || innerType.name || ""), | ||
(type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef")); | ||
return type; | ||
case REACT_MEMO_TYPE: | ||
return ( | ||
(innerType = type.displayName || null), | ||
null !== innerType | ||
? innerType | ||
: getComponentNameFromType(type.type) || "Memo" | ||
); | ||
case REACT_LAZY_TYPE: | ||
innerType = type._payload; | ||
type = type._init; | ||
try { | ||
return getComponentNameFromType(type(innerType)); | ||
} catch (x) {} | ||
} | ||
return null; | ||
} | ||
return type.displayName || type.name || null; | ||
} | ||
if (typeof type === 'string') { | ||
return type; | ||
} | ||
switch (type) { | ||
case REACT_FRAGMENT_TYPE: | ||
return 'Fragment'; | ||
case REACT_PORTAL_TYPE: | ||
return 'Portal'; | ||
case REACT_PROFILER_TYPE: | ||
return 'Profiler'; | ||
case REACT_STRICT_MODE_TYPE: | ||
return 'StrictMode'; | ||
case REACT_SUSPENSE_TYPE: | ||
return 'Suspense'; | ||
case REACT_SUSPENSE_LIST_TYPE: | ||
return 'SuspenseList'; | ||
} | ||
if (typeof type === 'object') { | ||
{ | ||
if (typeof type.tag === 'number') { | ||
error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.'); | ||
} | ||
function testStringCoercion(value) { | ||
return "" + value; | ||
} | ||
switch (type.$$typeof) { | ||
case REACT_PROVIDER_TYPE: | ||
{ | ||
return null; | ||
} | ||
case REACT_CONTEXT_TYPE: | ||
var context = type; | ||
{ | ||
return getContextName(context) + '.Provider'; | ||
} | ||
case REACT_CONSUMER_TYPE: | ||
{ | ||
var consumer = type; | ||
return getContextName(consumer._context) + '.Consumer'; | ||
} | ||
case REACT_FORWARD_REF_TYPE: | ||
return getWrappedName(type, type.render, 'ForwardRef'); | ||
case REACT_MEMO_TYPE: | ||
var outerName = type.displayName || null; | ||
if (outerName !== null) { | ||
return outerName; | ||
} | ||
return getComponentNameFromType(type.type) || 'Memo'; | ||
case REACT_LAZY_TYPE: | ||
{ | ||
var lazyComponent = type; | ||
var payload = lazyComponent._payload; | ||
var init = lazyComponent._init; | ||
try { | ||
return getComponentNameFromType(init(payload)); | ||
} catch (x) { | ||
return null; | ||
} | ||
} | ||
} | ||
} | ||
return null; | ||
} | ||
// $FlowFixMe[method-unbinding] | ||
var hasOwnProperty = Object.prototype.hasOwnProperty; | ||
var assign = Object.assign; | ||
/* | ||
* The `'' + value` pattern (used 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[incompatible-return] 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'; // $FlowFixMe[incompatible-return] | ||
return type; | ||
} | ||
} // $FlowFixMe[incompatible-return] 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 using it here.', typeName(value)); | ||
return testStringCoercion(value); // throw (to help callers find troubleshooting comments) | ||
} | ||
} | ||
} | ||
var REACT_CLIENT_REFERENCE$1 = Symbol.for('react.client.reference'); | ||
function isValidElementType(type) { | ||
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). | ||
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 || enableTransitionTracing ) { | ||
return true; | ||
} | ||
if (typeof type === 'object' && type !== null) { | ||
if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || !enableRenderableContext || type.$$typeof === REACT_CONSUMER_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_CLIENT_REFERENCE$1 || type.getModuleId !== undefined) { | ||
return true; | ||
} | ||
} | ||
return false; | ||
} | ||
var isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare | ||
function isArray(a) { | ||
return isArrayImpl(a); | ||
} | ||
// 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[cannot-write] 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[cannot-write] 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.'); | ||
} | ||
} | ||
} | ||
var prefix; | ||
function describeBuiltInComponentFrame(name) { | ||
{ | ||
if (prefix === undefined) { | ||
// Extract the VM specific prefix used by each line. | ||
function checkKeyStringCoercion(value) { | ||
try { | ||
throw Error(); | ||
} catch (x) { | ||
var match = x.stack.trim().match(/\n( *(at )?)/); | ||
prefix = match && match[1] || ''; | ||
testStringCoercion(value); | ||
var JSCompiler_inline_result = !1; | ||
} catch (e) { | ||
JSCompiler_inline_result = !0; | ||
} | ||
} // We use the prefix to ensure our stacks line up with native stack frames. | ||
return '\n' + prefix + name; | ||
} | ||
} | ||
var reentry = false; | ||
var componentFrameCache; | ||
{ | ||
var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; | ||
componentFrameCache = new PossiblyWeakMap(); | ||
} | ||
/** | ||
* Leverages native browser/VM stack frames to get proper details (e.g. | ||
* filename, line + col number) for a single component in a component stack. We | ||
* do this by: | ||
* (1) throwing and catching an error in the function - this will be our | ||
* control error. | ||
* (2) calling the component which will eventually throw an error that we'll | ||
* catch - this will be our sample error. | ||
* (3) diffing the control and sample error stacks to find the stack frame | ||
* which represents our component. | ||
*/ | ||
function describeNativeComponentFrame(fn, construct) { | ||
// If something asked for a stack inside a fake render, it should get ignored. | ||
if (!fn || reentry) { | ||
return ''; | ||
} | ||
{ | ||
var frame = componentFrameCache.get(fn); | ||
if (frame !== undefined) { | ||
return frame; | ||
if (JSCompiler_inline_result) { | ||
JSCompiler_inline_result = console; | ||
var JSCompiler_temp_const = JSCompiler_inline_result.error; | ||
var JSCompiler_inline_result$jscomp$0 = | ||
("function" === typeof Symbol && | ||
Symbol.toStringTag && | ||
value[Symbol.toStringTag]) || | ||
value.constructor.name || | ||
"Object"; | ||
JSCompiler_temp_const.call( | ||
JSCompiler_inline_result, | ||
"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", | ||
JSCompiler_inline_result$jscomp$0 | ||
); | ||
return testStringCoercion(value); | ||
} | ||
} | ||
} | ||
reentry = true; | ||
var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe[incompatible-type] It does accept undefined. | ||
Error.prepareStackTrace = undefined; | ||
var previousDispatcher = null; | ||
{ | ||
previousDispatcher = ReactSharedInternals.H; // Set the dispatcher in DEV because this might be call in the render function | ||
// for warnings. | ||
ReactSharedInternals.H = null; | ||
disableLogs(); | ||
} | ||
/** | ||
* Finding a common stack frame between sample and control errors can be | ||
* tricky given the different types and levels of stack trace truncation from | ||
* different JS VMs. So instead we'll attempt to control what that common | ||
* frame should be through this object method: | ||
* Having both the sample and control errors be in the function under the | ||
* `DescribeNativeComponentFrameRoot` property, + setting the `name` and | ||
* `displayName` properties of the function ensures that a stack | ||
* frame exists that has the method name `DescribeNativeComponentFrameRoot` in | ||
* it for both control and sample stacks. | ||
*/ | ||
var RunInRootFrame = { | ||
DetermineComponentFrameRoot: function () { | ||
var control; | ||
function getTaskName(type) { | ||
if (type === REACT_FRAGMENT_TYPE) return "<>"; | ||
if ( | ||
"object" === typeof type && | ||
null !== type && | ||
type.$$typeof === REACT_LAZY_TYPE | ||
) | ||
return "<...>"; | ||
try { | ||
// This should throw. | ||
if (construct) { | ||
// Something should be setting the props in the constructor. | ||
var Fake = function () { | ||
throw Error(); | ||
}; // $FlowFixMe[prop-missing] | ||
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; | ||
} // $FlowFixMe[prop-missing] found when upgrading Flow | ||
fn.call(Fake.prototype); | ||
} | ||
} else { | ||
try { | ||
throw Error(); | ||
} catch (x) { | ||
control = x; | ||
} // TODO(luna): This will currently only throw if the function component | ||
// tries to access React/ReactDOM/props. We should probably make this throw | ||
// in simple components too | ||
var maybePromise = fn(); // If the function component returns a promise, it's likely an async | ||
// component, which we don't yet support. Attach a noop catch handler to | ||
// silence the error. | ||
// TODO: Implement component stacks for async client components? | ||
if (maybePromise && typeof maybePromise.catch === 'function') { | ||
maybePromise.catch(function () {}); | ||
} | ||
} | ||
} catch (sample) { | ||
// This is inlined manually because closure doesn't do it for us. | ||
if (sample && control && typeof sample.stack === 'string') { | ||
return [sample.stack, control.stack]; | ||
} | ||
var name = getComponentNameFromType(type); | ||
return name ? "<" + name + ">" : "<...>"; | ||
} catch (x) { | ||
return "<...>"; | ||
} | ||
return [null, null]; | ||
} | ||
}; // $FlowFixMe[prop-missing] | ||
RunInRootFrame.DetermineComponentFrameRoot.displayName = 'DetermineComponentFrameRoot'; | ||
var namePropDescriptor = Object.getOwnPropertyDescriptor(RunInRootFrame.DetermineComponentFrameRoot, 'name'); // Before ES6, the `name` property was not configurable. | ||
if (namePropDescriptor && namePropDescriptor.configurable) { | ||
// V8 utilizes a function's `name` property when generating a stack trace. | ||
Object.defineProperty(RunInRootFrame.DetermineComponentFrameRoot, // Configurable properties can be updated even if its writable descriptor | ||
// is set to `false`. | ||
// $FlowFixMe[cannot-write] | ||
'name', { | ||
value: 'DetermineComponentFrameRoot' | ||
}); | ||
} | ||
try { | ||
var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(), | ||
sampleStack = _RunInRootFrame$Deter[0], | ||
controlStack = _RunInRootFrame$Deter[1]; | ||
if (sampleStack && controlStack) { | ||
// 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 = sampleStack.split('\n'); | ||
var controlLines = controlStack.split('\n'); | ||
var s = 0; | ||
var c = 0; | ||
while (s < sampleLines.length && !sampleLines[s].includes('DetermineComponentFrameRoot')) { | ||
s++; | ||
} | ||
while (c < controlLines.length && !controlLines[c].includes('DetermineComponentFrameRoot')) { | ||
c++; | ||
} // We couldn't find our intentionally injected common root frame, attempt | ||
// to find another common root frame by search from the bottom of the | ||
// control stack... | ||
if (s === sampleLines.length || c === controlLines.length) { | ||
s = sampleLines.length - 1; | ||
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. | ||
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); | ||
} | ||
if (true) { | ||
if (typeof fn === 'function') { | ||
componentFrameCache.set(fn, _frame); | ||
} | ||
} // Return the line we found. | ||
return _frame; | ||
} | ||
} while (s >= 1 && c >= 0); | ||
} | ||
break; | ||
} | ||
} | ||
function getOwner() { | ||
var dispatcher = ReactSharedInternals.A; | ||
return null === dispatcher ? null : dispatcher.getOwner(); | ||
} | ||
} finally { | ||
reentry = false; | ||
{ | ||
ReactSharedInternals.H = previousDispatcher; | ||
reenableLogs(); | ||
function UnknownOwner() { | ||
return Error("react-stack-top-frame"); | ||
} | ||
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) { | ||
{ | ||
return describeNativeComponentFrame(fn, false); | ||
} | ||
} | ||
function shouldConstruct(Component) { | ||
var prototype = Component.prototype; | ||
return !!(prototype && prototype.isReactComponent); | ||
} | ||
function describeUnknownElementTypeFrameInDEV(type) { | ||
if (type == null) { | ||
return ''; | ||
} | ||
if (typeof type === 'function') { | ||
{ | ||
return describeNativeComponentFrame(type, shouldConstruct(type)); | ||
} | ||
} | ||
if (typeof type === 'string') { | ||
return describeBuiltInComponentFrame(type); | ||
} | ||
switch (type) { | ||
case REACT_SUSPENSE_TYPE: | ||
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); | ||
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)); | ||
} catch (x) {} | ||
} | ||
} | ||
} | ||
return ''; | ||
} | ||
var REACT_CLIENT_REFERENCE = Symbol.for('react.client.reference'); | ||
var specialPropKeyWarningShown; | ||
var didWarnAboutElementRef; | ||
{ | ||
didWarnAboutElementRef = {}; | ||
} | ||
function hasValidRef(config) { | ||
{ | ||
if (hasOwnProperty.call(config, 'ref')) { | ||
var getter = Object.getOwnPropertyDescriptor(config, 'ref').get; | ||
if (getter && getter.isReactWarning) { | ||
return false; | ||
function hasValidKey(config) { | ||
if (hasOwnProperty.call(config, "key")) { | ||
var getter = Object.getOwnPropertyDescriptor(config, "key").get; | ||
if (getter && getter.isReactWarning) return !1; | ||
} | ||
return void 0 !== config.key; | ||
} | ||
} | ||
return config.ref !== undefined; | ||
} | ||
function hasValidKey(config) { | ||
{ | ||
if (hasOwnProperty.call(config, 'key')) { | ||
var getter = Object.getOwnPropertyDescriptor(config, 'key').get; | ||
if (getter && getter.isReactWarning) { | ||
return false; | ||
function defineKeyPropWarningGetter(props, displayName) { | ||
function warnAboutAccessingKey() { | ||
specialPropKeyWarningShown || | ||
((specialPropKeyWarningShown = !0), | ||
console.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://react.dev/link/special-props)", | ||
displayName | ||
)); | ||
} | ||
warnAboutAccessingKey.isReactWarning = !0; | ||
Object.defineProperty(props, "key", { | ||
get: warnAboutAccessingKey, | ||
configurable: !0 | ||
}); | ||
} | ||
} | ||
return config.key !== undefined; | ||
} | ||
function defineKeyPropWarningGetter(props, displayName) { | ||
{ | ||
var warnAboutAccessingKey = function () { | ||
if (!specialPropKeyWarningShown) { | ||
specialPropKeyWarningShown = true; | ||
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://react.dev/link/special-props)', displayName); | ||
} | ||
}; | ||
warnAboutAccessingKey.isReactWarning = true; | ||
Object.defineProperty(props, 'key', { | ||
get: warnAboutAccessingKey, | ||
configurable: true | ||
}); | ||
} | ||
} | ||
function elementRefGetterWithDeprecationWarning() { | ||
{ | ||
var componentName = getComponentNameFromType(this.type); | ||
if (!didWarnAboutElementRef[componentName]) { | ||
didWarnAboutElementRef[componentName] = true; | ||
error('Accessing element.ref was removed in React 19. ref is now a ' + 'regular prop. It will be removed from the JSX Element ' + 'type in a future release.'); | ||
} // An undefined `element.ref` is coerced to `null` for | ||
// backwards compatibility. | ||
var refProp = this.props.ref; | ||
return refProp !== undefined ? refProp : null; | ||
} | ||
} | ||
/** | ||
* 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 | ||
*/ | ||
function ReactElement(type, key, _ref, self, source, owner, props) { | ||
var ref; | ||
{ | ||
// When enableRefAsProp is on, ignore whatever was passed as the ref | ||
// argument and treat `props.ref` as the source of truth. The only thing we | ||
// use this for is `element.ref`, which will log a deprecation warning on | ||
// access. In the next release, we can remove `element.ref` as well as the | ||
// `ref` argument. | ||
var refProp = props.ref; // An undefined `element.ref` is coerced to `null` for | ||
// backwards compatibility. | ||
ref = refProp !== undefined ? refProp : null; | ||
} | ||
var element; | ||
{ | ||
// In dev, make `ref` a non-enumerable property with a warning. It's non- | ||
// enumerable so that test matchers and serializers don't access it and | ||
// trigger the warning. | ||
// | ||
// `ref` will be removed from the element completely in a future release. | ||
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, | ||
props: props, | ||
// Record the component responsible for creating this element. | ||
_owner: owner | ||
}; | ||
if (ref !== null) { | ||
Object.defineProperty(element, 'ref', { | ||
enumerable: false, | ||
get: elementRefGetterWithDeprecationWarning | ||
function elementRefGetterWithDeprecationWarning() { | ||
var componentName = getComponentNameFromType(this.type); | ||
didWarnAboutElementRef[componentName] || | ||
((didWarnAboutElementRef[componentName] = !0), | ||
console.error( | ||
"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release." | ||
)); | ||
componentName = this.props.ref; | ||
return void 0 !== componentName ? componentName : null; | ||
} | ||
function ReactElement( | ||
type, | ||
key, | ||
self, | ||
source, | ||
owner, | ||
props, | ||
debugStack, | ||
debugTask | ||
) { | ||
self = props.ref; | ||
type = { | ||
$$typeof: REACT_ELEMENT_TYPE, | ||
type: type, | ||
key: key, | ||
props: props, | ||
_owner: owner | ||
}; | ||
null !== (void 0 !== self ? self : null) | ||
? Object.defineProperty(type, "ref", { | ||
enumerable: !1, | ||
get: elementRefGetterWithDeprecationWarning | ||
}) | ||
: Object.defineProperty(type, "ref", { enumerable: !1, value: null }); | ||
type._store = {}; | ||
Object.defineProperty(type._store, "validated", { | ||
configurable: !1, | ||
enumerable: !1, | ||
writable: !0, | ||
value: 0 | ||
}); | ||
} else { | ||
// Don't warn on access if a ref is not given. This reduces false | ||
// positives in cases where a test serializer uses | ||
// getOwnPropertyDescriptors to compare objects, like Jest does, which is | ||
// a problem because it bypasses non-enumerability. | ||
// | ||
// So unfortunately this will trigger a false positive warning in Jest | ||
// when the diff is printed: | ||
// | ||
// expect(<div ref={ref} />).toEqual(<span ref={ref} />); | ||
// | ||
// A bit sketchy, but this is what we've done for the `props.key` and | ||
// `props.ref` accessors for years, which implies it will be good enough | ||
// for `element.ref`, too. Let's see if anyone complains. | ||
Object.defineProperty(element, 'ref', { | ||
enumerable: false, | ||
Object.defineProperty(type, "_debugInfo", { | ||
configurable: !1, | ||
enumerable: !1, | ||
writable: !0, | ||
value: null | ||
}); | ||
Object.defineProperty(type, "_debugStack", { | ||
configurable: !1, | ||
enumerable: !1, | ||
writable: !0, | ||
value: debugStack | ||
}); | ||
Object.defineProperty(type, "_debugTask", { | ||
configurable: !1, | ||
enumerable: !1, | ||
writable: !0, | ||
value: debugTask | ||
}); | ||
Object.freeze && (Object.freeze(type.props), Object.freeze(type)); | ||
return type; | ||
} | ||
} | ||
{ | ||
// 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 | ||
}); // debugInfo contains Server Component debug information. | ||
Object.defineProperty(element, '_debugInfo', { | ||
configurable: false, | ||
enumerable: false, | ||
writable: true, | ||
value: null | ||
}); | ||
if (Object.freeze) { | ||
Object.freeze(element.props); | ||
Object.freeze(element); | ||
} | ||
} | ||
return element; | ||
} | ||
// support `jsx` and `jsxs` when running in development. This supports the case | ||
// where a third-party dependency ships code that was compiled for production; | ||
// we want to still provide warnings in development. | ||
// | ||
// So these functions are the _dev_ implementations of the _production_ | ||
// API signatures. | ||
// | ||
// Since these functions are dev-only, it's ok to add an indirection here. They | ||
// only exist to provide different versions of `isStaticChildren`. (We shouldn't | ||
// use this pattern for the prod versions, though, because it will add an call | ||
// frame.) | ||
function jsxProdSignatureRunningInDevWithDynamicChildren(type, config, maybeKey, source, self) { | ||
{ | ||
var isStaticChildren = false; | ||
return jsxDEV(type, config, maybeKey, isStaticChildren, source, self); | ||
} | ||
} | ||
function jsxProdSignatureRunningInDevWithStaticChildren(type, config, maybeKey, source, self) { | ||
{ | ||
var isStaticChildren = true; | ||
return jsxDEV(type, config, maybeKey, isStaticChildren, source, self); | ||
} | ||
} | ||
var didWarnAboutKeySpread = {}; | ||
/** | ||
* https://github.com/reactjs/rfcs/pull/107 | ||
* @param {*} type | ||
* @param {object} props | ||
* @param {string} key | ||
*/ | ||
function jsxDEV(type, config, maybeKey, isStaticChildren, source, self) { | ||
{ | ||
if (!isValidElementType(type)) { | ||
// This is an invalid element 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. | ||
var info = ''; | ||
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."; | ||
} | ||
var typeString; | ||
if (type === null) { | ||
typeString = 'null'; | ||
} else if (isArray(type)) { | ||
typeString = 'array'; | ||
} else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) { | ||
typeString = "<" + (getComponentNameFromType(type.type) || 'Unknown') + " />"; | ||
info = ' Did you accidentally export a JSX literal instead of a component?'; | ||
} else { | ||
typeString = typeof type; | ||
} | ||
error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info); | ||
} else { | ||
// This is a valid element type. | ||
// 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.) | ||
function jsxDEVImpl( | ||
type, | ||
config, | ||
maybeKey, | ||
isStaticChildren, | ||
source, | ||
self, | ||
debugStack, | ||
debugTask | ||
) { | ||
var children = config.children; | ||
if (children !== undefined) { | ||
if (isStaticChildren) { | ||
if (isArray(children)) { | ||
for (var i = 0; i < children.length; i++) { | ||
validateChildKeys(children[i], type); | ||
} | ||
if (Object.freeze) { | ||
Object.freeze(children); | ||
} | ||
} else { | ||
error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.'); | ||
} | ||
} else { | ||
validateChildKeys(children, type); | ||
} | ||
if (void 0 !== children) | ||
if (isStaticChildren) | ||
if (isArrayImpl(children)) { | ||
for ( | ||
isStaticChildren = 0; | ||
isStaticChildren < children.length; | ||
isStaticChildren++ | ||
) | ||
validateChildKeys(children[isStaticChildren]); | ||
Object.freeze && Object.freeze(children); | ||
} else | ||
console.error( | ||
"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead." | ||
); | ||
else validateChildKeys(children); | ||
if (hasOwnProperty.call(config, "key")) { | ||
children = getComponentNameFromType(type); | ||
var keys = Object.keys(config).filter(function (k) { | ||
return "key" !== k; | ||
}); | ||
isStaticChildren = | ||
0 < keys.length | ||
? "{key: someKey, " + keys.join(": ..., ") + ": ...}" | ||
: "{key: someKey}"; | ||
didWarnAboutKeySpread[children + isStaticChildren] || | ||
((keys = | ||
0 < keys.length ? "{" + keys.join(": ..., ") + ": ...}" : "{}"), | ||
console.error( | ||
'A props object containing a "key" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />', | ||
isStaticChildren, | ||
children, | ||
keys, | ||
children | ||
), | ||
(didWarnAboutKeySpread[children + isStaticChildren] = !0)); | ||
} | ||
} // Warn about key spread regardless of whether the type is valid. | ||
if (hasOwnProperty.call(config, 'key')) { | ||
var componentName = getComponentNameFromType(type); | ||
var keys = Object.keys(config).filter(function (k) { | ||
return k !== 'key'; | ||
}); | ||
var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}'; | ||
if (!didWarnAboutKeySpread[componentName + beforeExample]) { | ||
var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}'; | ||
error('A props object containing a "key" prop is being spread into JSX:\n' + ' let props = %s;\n' + ' <%s {...props} />\n' + 'React keys must be passed directly to JSX without using spread:\n' + ' let props = %s;\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName); | ||
didWarnAboutKeySpread[componentName + beforeExample] = true; | ||
} | ||
children = null; | ||
void 0 !== maybeKey && | ||
(checkKeyStringCoercion(maybeKey), (children = "" + maybeKey)); | ||
hasValidKey(config) && | ||
(checkKeyStringCoercion(config.key), (children = "" + config.key)); | ||
if ("key" in config) { | ||
maybeKey = {}; | ||
for (var propName in config) | ||
"key" !== propName && (maybeKey[propName] = config[propName]); | ||
} else maybeKey = config; | ||
children && | ||
defineKeyPropWarningGetter( | ||
maybeKey, | ||
"function" === typeof type | ||
? type.displayName || type.name || "Unknown" | ||
: type | ||
); | ||
return ReactElement( | ||
type, | ||
children, | ||
self, | ||
source, | ||
getOwner(), | ||
maybeKey, | ||
debugStack, | ||
debugTask | ||
); | ||
} | ||
var key = null; | ||
var ref = null; // Currently, key can be spread in as a prop. This causes a potential | ||
// issue if key is also explicitly declared (ie. <div {...props} key="Hi" /> | ||
// or <div key="Hi" {...props} /> ). We want to deprecate key spread, | ||
// but as an intermediary step, we will use jsxDEV for everything except | ||
// <div {...props} key="Hi" />, because we aren't currently able to tell if | ||
// key is explicitly declared to be undefined or not. | ||
if (maybeKey !== undefined) { | ||
{ | ||
checkKeyStringCoercion(maybeKey); | ||
} | ||
key = '' + maybeKey; | ||
function validateChildKeys(node) { | ||
"object" === typeof node && | ||
null !== node && | ||
node.$$typeof === REACT_ELEMENT_TYPE && | ||
node._store && | ||
(node._store.validated = 1); | ||
} | ||
if (hasValidKey(config)) { | ||
{ | ||
checkKeyStringCoercion(config.key); | ||
var React = require("react"), | ||
REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), | ||
REACT_PORTAL_TYPE = Symbol.for("react.portal"), | ||
REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), | ||
REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), | ||
REACT_PROFILER_TYPE = Symbol.for("react.profiler"), | ||
REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), | ||
REACT_CONTEXT_TYPE = Symbol.for("react.context"), | ||
REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), | ||
REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), | ||
REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), | ||
REACT_MEMO_TYPE = Symbol.for("react.memo"), | ||
REACT_LAZY_TYPE = Symbol.for("react.lazy"), | ||
REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), | ||
REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"), | ||
REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), | ||
ReactSharedInternals = | ||
React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, | ||
hasOwnProperty = Object.prototype.hasOwnProperty, | ||
isArrayImpl = Array.isArray, | ||
createTask = console.createTask | ||
? console.createTask | ||
: function () { | ||
return null; | ||
}; | ||
React = { | ||
react_stack_bottom_frame: function (callStackForError) { | ||
return callStackForError(); | ||
} | ||
key = '' + config.key; | ||
} | ||
if (hasValidRef(config)) ; | ||
var props; | ||
if (!('key' in config)) { | ||
// If key was not spread in, we can reuse the original props object. This | ||
// only works for `jsx`, not `createElement`, because `jsx` is a compiler | ||
// target and the compiler always passes a new object. For `createElement`, | ||
// we can't assume a new object is passed every time because it can be | ||
// called manually. | ||
// | ||
// Spreading key is a warning in dev. In a future release, we will not | ||
// remove a spread key from the props object. (But we'll still warn.) We'll | ||
// always pass the object straight through. | ||
props = config; | ||
} else { | ||
// We need to remove reserved props (key, prop, ref). Create a fresh props | ||
// object and copy over all the non-reserved props. We don't use `delete` | ||
// because in V8 it will deopt the object to dictionary mode. | ||
props = {}; | ||
for (var propName in config) { | ||
// Skip over reserved prop names | ||
if (propName !== 'key' && (enableRefAsProp )) { | ||
{ | ||
props[propName] = config[propName]; | ||
} | ||
} | ||
} | ||
} | ||
if (key || !enableRefAsProp ) { | ||
var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type; | ||
if (key) { | ||
defineKeyPropWarningGetter(props, displayName); | ||
} | ||
} | ||
var element = ReactElement(type, key, ref, self, source, ReactSharedInternals.owner, props); | ||
if (type === REACT_FRAGMENT_TYPE) { | ||
validateFragmentProps(element); | ||
} | ||
return element; | ||
} | ||
} | ||
function getDeclarationErrorAddendum() { | ||
{ | ||
if (ReactSharedInternals.owner) { | ||
var name = getComponentNameFromType(ReactSharedInternals.owner.type); | ||
if (name) { | ||
return '\n\nCheck the render method of `' + name + '`.'; | ||
} | ||
} | ||
return ''; | ||
} | ||
} | ||
/** | ||
* 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' || !node) { | ||
return; | ||
} | ||
if (node.$$typeof === REACT_CLIENT_REFERENCE) ; else if (isArray(node)) { | ||
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 { | ||
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); | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
/** | ||
* 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 | ||
*/ | ||
function isValidElement(object) { | ||
return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; | ||
} | ||
var ownerHasKeyUseWarning = {}; | ||
/** | ||
* 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 != null && element._owner !== ReactSharedInternals.owner) { | ||
var ownerName = null; | ||
if (typeof element._owner.tag === 'number') { | ||
ownerName = getComponentNameFromType(element._owner.type); | ||
} else if (typeof element._owner.name === 'string') { | ||
ownerName = element._owner.name; | ||
} // Give the component that originally created this child. | ||
childOwner = " It was passed a child from " + ownerName + "."; | ||
} | ||
setCurrentlyValidatingElement(element); | ||
error('Each child in a list should have a unique "key" prop.' + '%s%s See https://react.dev/link/warning-keys for more information.', currentComponentErrorInfo, childOwner); | ||
setCurrentlyValidatingElement(null); | ||
} | ||
} | ||
function setCurrentlyValidatingElement(element) { | ||
{ | ||
if (element) { | ||
var stack = describeUnknownElementTypeFrameInDEV(element.type); | ||
ReactSharedInternals.setExtraStackFrame(stack); | ||
} else { | ||
ReactSharedInternals.setExtraStackFrame(null); | ||
} | ||
} | ||
} | ||
function getCurrentComponentErrorInfo(parentType) { | ||
{ | ||
var info = getDeclarationErrorAddendum(); | ||
if (!info) { | ||
var parentName = getComponentNameFromType(parentType); | ||
if (parentName) { | ||
info = "\n\nCheck the top-level render call using <" + parentName + ">."; | ||
} | ||
} | ||
return info; | ||
} | ||
} | ||
/** | ||
* Given a fragment, validate that it can only be provided with fragment props | ||
* @param {ReactElement} fragment | ||
*/ | ||
function validateFragmentProps(fragment) { | ||
// TODO: Move this to render phase instead of at element creation. | ||
{ | ||
var keys = Object.keys(fragment.props); | ||
for (var i = 0; i < keys.length; i++) { | ||
var key = keys[i]; | ||
if (key !== 'children' && key !== 'key') { | ||
setCurrentlyValidatingElement(fragment); | ||
error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key); | ||
setCurrentlyValidatingElement(null); | ||
break; | ||
} | ||
} | ||
} | ||
} | ||
var jsx = jsxProdSignatureRunningInDevWithDynamicChildren ; // we may want to special case jsxs internally to take advantage of static children. | ||
// for now we can ship identical prod functions | ||
var jsxs = jsxProdSignatureRunningInDevWithStaticChildren ; | ||
exports.Fragment = REACT_FRAGMENT_TYPE; | ||
exports.jsx = jsx; | ||
exports.jsxs = jsxs; | ||
}; | ||
var specialPropKeyWarningShown; | ||
var didWarnAboutElementRef = {}; | ||
var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind( | ||
React, | ||
UnknownOwner | ||
)(); | ||
var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner)); | ||
var didWarnAboutKeySpread = {}; | ||
exports.Fragment = REACT_FRAGMENT_TYPE; | ||
exports.jsx = function (type, config, maybeKey, source, self) { | ||
var trackActualOwner = | ||
1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++; | ||
return jsxDEVImpl( | ||
type, | ||
config, | ||
maybeKey, | ||
!1, | ||
source, | ||
self, | ||
trackActualOwner | ||
? Error("react-stack-top-frame") | ||
: unknownOwnerDebugStack, | ||
trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask | ||
); | ||
}; | ||
exports.jsxs = function (type, config, maybeKey, source, self) { | ||
var trackActualOwner = | ||
1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++; | ||
return jsxDEVImpl( | ||
type, | ||
config, | ||
maybeKey, | ||
!0, | ||
source, | ||
self, | ||
trackActualOwner | ||
? Error("react-stack-top-frame") | ||
: unknownOwnerDebugStack, | ||
trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask | ||
); | ||
}; | ||
})(); | ||
} |
/** | ||
* @license React | ||
* react-jsx-runtime.production.min.js | ||
* react-jsx-runtime.production.js | ||
* | ||
@@ -11,146 +11,25 @@ * Copyright (c) Meta Platforms, Inc. and affiliates. | ||
'use strict'; | ||
var React = require('react'); | ||
// ATTENTION | ||
// When adding new symbols to this file, | ||
// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols' | ||
// The Symbol used to tag the ReactElement-like types. | ||
const REACT_ELEMENT_TYPE = Symbol.for('react.element'); | ||
const REACT_FRAGMENT_TYPE = Symbol.for('react.fragment'); | ||
// ----------------------------------------------------------------------------- | ||
// as a normal prop instead of stripping it from the props object. | ||
// Passes `ref` as a normal prop instead of stripping it from the props object | ||
// during element creation. | ||
const enableRefAsProp = true; | ||
const ReactSharedInternals = React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; | ||
function hasValidKey(config) { | ||
return config.key !== undefined; | ||
"use strict"; | ||
var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), | ||
REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"); | ||
function jsxProd(type, config, maybeKey) { | ||
var key = null; | ||
void 0 !== maybeKey && (key = "" + maybeKey); | ||
void 0 !== config.key && (key = "" + config.key); | ||
if ("key" in config) { | ||
maybeKey = {}; | ||
for (var propName in config) | ||
"key" !== propName && (maybeKey[propName] = config[propName]); | ||
} else maybeKey = config; | ||
config = maybeKey.ref; | ||
return { | ||
$$typeof: REACT_ELEMENT_TYPE, | ||
type: type, | ||
key: key, | ||
ref: void 0 !== config ? config : null, | ||
props: maybeKey | ||
}; | ||
} | ||
/** | ||
* 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 | ||
*/ | ||
function ReactElement(type, key, _ref, self, source, owner, props) { | ||
let ref; | ||
{ | ||
// When enableRefAsProp is on, ignore whatever was passed as the ref | ||
// argument and treat `props.ref` as the source of truth. The only thing we | ||
// use this for is `element.ref`, which will log a deprecation warning on | ||
// access. In the next release, we can remove `element.ref` as well as the | ||
// `ref` argument. | ||
const refProp = props.ref; // An undefined `element.ref` is coerced to `null` for | ||
// backwards compatibility. | ||
ref = refProp !== undefined ? refProp : null; | ||
} | ||
let element; | ||
{ | ||
// In prod, `ref` is a regular property and _owner doesn't exist. | ||
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, | ||
key, | ||
ref, | ||
props | ||
}; | ||
} | ||
return element; | ||
} | ||
/** | ||
* https://github.com/reactjs/rfcs/pull/107 | ||
* @param {*} type | ||
* @param {object} props | ||
* @param {string} key | ||
*/ | ||
function jsxProd(type, config, maybeKey) { | ||
let key = null; | ||
let ref = null; // Currently, key can be spread in as a prop. This causes a potential | ||
// issue if key is also explicitly declared (ie. <div {...props} key="Hi" /> | ||
// or <div key="Hi" {...props} /> ). We want to deprecate key spread, | ||
// but as an intermediary step, we will use jsxDEV for everything except | ||
// <div {...props} key="Hi" />, because we aren't currently able to tell if | ||
// key is explicitly declared to be undefined or not. | ||
if (maybeKey !== undefined) { | ||
key = '' + maybeKey; | ||
} | ||
if (hasValidKey(config)) { | ||
key = '' + config.key; | ||
} | ||
let props; | ||
if (!('key' in config)) { | ||
// If key was not spread in, we can reuse the original props object. This | ||
// only works for `jsx`, not `createElement`, because `jsx` is a compiler | ||
// target and the compiler always passes a new object. For `createElement`, | ||
// we can't assume a new object is passed every time because it can be | ||
// called manually. | ||
// | ||
// Spreading key is a warning in dev. In a future release, we will not | ||
// remove a spread key from the props object. (But we'll still warn.) We'll | ||
// always pass the object straight through. | ||
props = config; | ||
} else { | ||
// We need to remove reserved props (key, prop, ref). Create a fresh props | ||
// object and copy over all the non-reserved props. We don't use `delete` | ||
// because in V8 it will deopt the object to dictionary mode. | ||
props = {}; | ||
for (const propName in config) { | ||
// Skip over reserved prop names | ||
if (propName !== 'key' && (enableRefAsProp )) { | ||
{ | ||
props[propName] = config[propName]; | ||
} | ||
} | ||
} | ||
} | ||
return ReactElement(type, key, ref, undefined, undefined, ReactSharedInternals.owner, props); | ||
} // While `jsxDEV` should never be called when running in production, we do | ||
const jsx = jsxProd; // we may want to special case jsxs internally to take advantage of static children. | ||
// for now we can ship identical prod functions | ||
const jsxs = jsxProd; | ||
exports.Fragment = REACT_FRAGMENT_TYPE; | ||
exports.jsx = jsx; | ||
exports.jsxs = jsxs; | ||
exports.jsx = jsxProd; | ||
exports.jsxs = jsxProd; |
/** | ||
* @license React | ||
* react-jsx-runtime.profiling.min.js | ||
* react-jsx-runtime.profiling.js | ||
* | ||
@@ -11,146 +11,25 @@ * Copyright (c) Meta Platforms, Inc. and affiliates. | ||
'use strict'; | ||
var React = require('react'); | ||
// ATTENTION | ||
// When adding new symbols to this file, | ||
// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols' | ||
// The Symbol used to tag the ReactElement-like types. | ||
const REACT_ELEMENT_TYPE = Symbol.for('react.element'); | ||
const REACT_FRAGMENT_TYPE = Symbol.for('react.fragment'); | ||
// ----------------------------------------------------------------------------- | ||
// as a normal prop instead of stripping it from the props object. | ||
// Passes `ref` as a normal prop instead of stripping it from the props object | ||
// during element creation. | ||
const enableRefAsProp = true; | ||
const ReactSharedInternals = React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; | ||
function hasValidKey(config) { | ||
return config.key !== undefined; | ||
"use strict"; | ||
var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), | ||
REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"); | ||
function jsxProd(type, config, maybeKey) { | ||
var key = null; | ||
void 0 !== maybeKey && (key = "" + maybeKey); | ||
void 0 !== config.key && (key = "" + config.key); | ||
if ("key" in config) { | ||
maybeKey = {}; | ||
for (var propName in config) | ||
"key" !== propName && (maybeKey[propName] = config[propName]); | ||
} else maybeKey = config; | ||
config = maybeKey.ref; | ||
return { | ||
$$typeof: REACT_ELEMENT_TYPE, | ||
type: type, | ||
key: key, | ||
ref: void 0 !== config ? config : null, | ||
props: maybeKey | ||
}; | ||
} | ||
/** | ||
* 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 | ||
*/ | ||
function ReactElement(type, key, _ref, self, source, owner, props) { | ||
let ref; | ||
{ | ||
// When enableRefAsProp is on, ignore whatever was passed as the ref | ||
// argument and treat `props.ref` as the source of truth. The only thing we | ||
// use this for is `element.ref`, which will log a deprecation warning on | ||
// access. In the next release, we can remove `element.ref` as well as the | ||
// `ref` argument. | ||
const refProp = props.ref; // An undefined `element.ref` is coerced to `null` for | ||
// backwards compatibility. | ||
ref = refProp !== undefined ? refProp : null; | ||
} | ||
let element; | ||
{ | ||
// In prod, `ref` is a regular property and _owner doesn't exist. | ||
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, | ||
key, | ||
ref, | ||
props | ||
}; | ||
} | ||
return element; | ||
} | ||
/** | ||
* https://github.com/reactjs/rfcs/pull/107 | ||
* @param {*} type | ||
* @param {object} props | ||
* @param {string} key | ||
*/ | ||
function jsxProd(type, config, maybeKey) { | ||
let key = null; | ||
let ref = null; // Currently, key can be spread in as a prop. This causes a potential | ||
// issue if key is also explicitly declared (ie. <div {...props} key="Hi" /> | ||
// or <div key="Hi" {...props} /> ). We want to deprecate key spread, | ||
// but as an intermediary step, we will use jsxDEV for everything except | ||
// <div {...props} key="Hi" />, because we aren't currently able to tell if | ||
// key is explicitly declared to be undefined or not. | ||
if (maybeKey !== undefined) { | ||
key = '' + maybeKey; | ||
} | ||
if (hasValidKey(config)) { | ||
key = '' + config.key; | ||
} | ||
let props; | ||
if (!('key' in config)) { | ||
// If key was not spread in, we can reuse the original props object. This | ||
// only works for `jsx`, not `createElement`, because `jsx` is a compiler | ||
// target and the compiler always passes a new object. For `createElement`, | ||
// we can't assume a new object is passed every time because it can be | ||
// called manually. | ||
// | ||
// Spreading key is a warning in dev. In a future release, we will not | ||
// remove a spread key from the props object. (But we'll still warn.) We'll | ||
// always pass the object straight through. | ||
props = config; | ||
} else { | ||
// We need to remove reserved props (key, prop, ref). Create a fresh props | ||
// object and copy over all the non-reserved props. We don't use `delete` | ||
// because in V8 it will deopt the object to dictionary mode. | ||
props = {}; | ||
for (const propName in config) { | ||
// Skip over reserved prop names | ||
if (propName !== 'key' && (enableRefAsProp )) { | ||
{ | ||
props[propName] = config[propName]; | ||
} | ||
} | ||
} | ||
} | ||
return ReactElement(type, key, ref, undefined, undefined, ReactSharedInternals.owner, props); | ||
} // While `jsxDEV` should never be called when running in production, we do | ||
const jsx = jsxProd; // we may want to special case jsxs internally to take advantage of static children. | ||
// for now we can ship identical prod functions | ||
const jsxs = jsxProd; | ||
exports.Fragment = REACT_FRAGMENT_TYPE; | ||
exports.jsx = jsx; | ||
exports.jsxs = jsxs; | ||
exports.jsx = jsxProd; | ||
exports.jsxs = jsxProd; |
@@ -11,1295 +11,378 @@ /** | ||
'use strict'; | ||
if (process.env.NODE_ENV !== "production") { | ||
(function() { | ||
'use strict'; | ||
var React = require('react'); | ||
// ATTENTION | ||
// When adding new symbols to this file, | ||
// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols' | ||
// 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'); // TODO: Delete with enableRenderableContext | ||
var REACT_CONSUMER_TYPE = Symbol.for('react.consumer'); | ||
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; | ||
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; | ||
} | ||
return null; | ||
} | ||
var ReactSharedInternalsServer = // $FlowFixMe: It's defined in the one we resolve to. | ||
React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; | ||
if (!ReactSharedInternalsServer) { | ||
throw new Error('The "react" package in this environment is not configured correctly. ' + 'The "react-server" condition must be enabled in any environment that ' + 'runs React Server Components.'); | ||
} | ||
function error(format) { | ||
{ | ||
{ | ||
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { | ||
args[_key2 - 1] = arguments[_key2]; | ||
"use strict"; | ||
"production" !== process.env.NODE_ENV && | ||
(function () { | ||
function getComponentNameFromType(type) { | ||
if (null == type) return null; | ||
if ("function" === typeof type) | ||
return type.$$typeof === REACT_CLIENT_REFERENCE | ||
? null | ||
: type.displayName || type.name || null; | ||
if ("string" === typeof type) return type; | ||
switch (type) { | ||
case REACT_FRAGMENT_TYPE: | ||
return "Fragment"; | ||
case REACT_PROFILER_TYPE: | ||
return "Profiler"; | ||
case REACT_STRICT_MODE_TYPE: | ||
return "StrictMode"; | ||
case REACT_SUSPENSE_TYPE: | ||
return "Suspense"; | ||
case REACT_SUSPENSE_LIST_TYPE: | ||
return "SuspenseList"; | ||
case REACT_ACTIVITY_TYPE: | ||
return "Activity"; | ||
case REACT_VIEW_TRANSITION_TYPE: | ||
return "ViewTransition"; | ||
} | ||
printWarning('error', format, args); | ||
} | ||
} | ||
} | ||
function printWarning(level, format, args) { | ||
// When changing this logic, you might want to also | ||
// update consoleWithStackDev.www.js as well. | ||
{ | ||
var stack = ReactSharedInternalsServer.getStackAddendum(); | ||
if (stack !== '') { | ||
format += '%s'; | ||
args = args.concat([stack]); | ||
} // eslint-disable-next-line react-internal/safe-string-coercion | ||
var argsWithFormat = args.map(function (item) { | ||
return String(item); | ||
}); // Careful: RN currently depends on this prefix | ||
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 | ||
Function.prototype.apply.call(console[level], console, argsWithFormat); | ||
} | ||
} | ||
// ----------------------------------------------------------------------------- | ||
var enableScopeAPI = false; // Experimental Create Event Handle API. | ||
var enableTransitionTracing = false; // No known bugs, but needs performance testing | ||
var enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber | ||
// as a normal prop instead of stripping it from the props object. | ||
// Passes `ref` as a normal prop instead of stripping it from the props object | ||
// during element creation. | ||
var enableRefAsProp = true; | ||
var enableRenderableContext = true; // ----------------------------------------------------------------------------- | ||
// stuff. Intended to enable React core members to more easily debug scheduling | ||
// issues in DEV builds. | ||
var enableDebugTracing = false; | ||
function getWrappedName(outerType, innerType, wrapperName) { | ||
var displayName = outerType.displayName; | ||
if (displayName) { | ||
return displayName; | ||
} | ||
var functionName = innerType.displayName || innerType.name || ''; | ||
return functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName; | ||
} // Keep in sync with react-reconciler/getComponentNameFromFiber | ||
function getContextName(type) { | ||
return type.displayName || 'Context'; | ||
} | ||
var REACT_CLIENT_REFERENCE$2 = Symbol.for('react.client.reference'); // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead. | ||
function getComponentNameFromType(type) { | ||
if (type == null) { | ||
// Host root, text node or just invalid type. | ||
return null; | ||
} | ||
if (typeof type === 'function') { | ||
if (type.$$typeof === REACT_CLIENT_REFERENCE$2) { | ||
// TODO: Create a convention for naming client references with debug info. | ||
if ("object" === typeof type) | ||
switch ( | ||
("number" === typeof type.tag && | ||
console.error( | ||
"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue." | ||
), | ||
type.$$typeof) | ||
) { | ||
case REACT_PORTAL_TYPE: | ||
return "Portal"; | ||
case REACT_CONTEXT_TYPE: | ||
return type.displayName || "Context"; | ||
case REACT_CONSUMER_TYPE: | ||
return (type._context.displayName || "Context") + ".Consumer"; | ||
case REACT_FORWARD_REF_TYPE: | ||
var innerType = type.render; | ||
type = type.displayName; | ||
type || | ||
((type = innerType.displayName || innerType.name || ""), | ||
(type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef")); | ||
return type; | ||
case REACT_MEMO_TYPE: | ||
return ( | ||
(innerType = type.displayName || null), | ||
null !== innerType | ||
? innerType | ||
: getComponentNameFromType(type.type) || "Memo" | ||
); | ||
case REACT_LAZY_TYPE: | ||
innerType = type._payload; | ||
type = type._init; | ||
try { | ||
return getComponentNameFromType(type(innerType)); | ||
} catch (x) {} | ||
} | ||
return null; | ||
} | ||
return type.displayName || type.name || null; | ||
} | ||
if (typeof type === 'string') { | ||
return type; | ||
} | ||
switch (type) { | ||
case REACT_FRAGMENT_TYPE: | ||
return 'Fragment'; | ||
case REACT_PORTAL_TYPE: | ||
return 'Portal'; | ||
case REACT_PROFILER_TYPE: | ||
return 'Profiler'; | ||
case REACT_STRICT_MODE_TYPE: | ||
return 'StrictMode'; | ||
case REACT_SUSPENSE_TYPE: | ||
return 'Suspense'; | ||
case REACT_SUSPENSE_LIST_TYPE: | ||
return 'SuspenseList'; | ||
} | ||
if (typeof type === 'object') { | ||
{ | ||
if (typeof type.tag === 'number') { | ||
error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.'); | ||
} | ||
function testStringCoercion(value) { | ||
return "" + value; | ||
} | ||
switch (type.$$typeof) { | ||
case REACT_PROVIDER_TYPE: | ||
{ | ||
return null; | ||
} | ||
case REACT_CONTEXT_TYPE: | ||
var context = type; | ||
{ | ||
return getContextName(context) + '.Provider'; | ||
} | ||
case REACT_CONSUMER_TYPE: | ||
{ | ||
var consumer = type; | ||
return getContextName(consumer._context) + '.Consumer'; | ||
} | ||
case REACT_FORWARD_REF_TYPE: | ||
return getWrappedName(type, type.render, 'ForwardRef'); | ||
case REACT_MEMO_TYPE: | ||
var outerName = type.displayName || null; | ||
if (outerName !== null) { | ||
return outerName; | ||
} | ||
return getComponentNameFromType(type.type) || 'Memo'; | ||
case REACT_LAZY_TYPE: | ||
{ | ||
var lazyComponent = type; | ||
var payload = lazyComponent._payload; | ||
var init = lazyComponent._init; | ||
try { | ||
return getComponentNameFromType(init(payload)); | ||
} catch (x) { | ||
return null; | ||
} | ||
} | ||
} | ||
} | ||
return null; | ||
} | ||
// $FlowFixMe[method-unbinding] | ||
var hasOwnProperty = Object.prototype.hasOwnProperty; | ||
var assign = Object.assign; | ||
/* | ||
* The `'' + value` pattern (used 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[incompatible-return] 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'; // $FlowFixMe[incompatible-return] | ||
return type; | ||
} | ||
} // $FlowFixMe[incompatible-return] 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 using it here.', typeName(value)); | ||
return testStringCoercion(value); // throw (to help callers find troubleshooting comments) | ||
} | ||
} | ||
} | ||
var REACT_CLIENT_REFERENCE$1 = Symbol.for('react.client.reference'); | ||
function isValidElementType(type) { | ||
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). | ||
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 || enableTransitionTracing ) { | ||
return true; | ||
} | ||
if (typeof type === 'object' && type !== null) { | ||
if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || !enableRenderableContext || type.$$typeof === REACT_CONSUMER_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_CLIENT_REFERENCE$1 || type.getModuleId !== undefined) { | ||
return true; | ||
} | ||
} | ||
return false; | ||
} | ||
var isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare | ||
function isArray(a) { | ||
return isArrayImpl(a); | ||
} | ||
// 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[cannot-write] 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[cannot-write] 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.'); | ||
} | ||
} | ||
} | ||
var prefix; | ||
function describeBuiltInComponentFrame(name) { | ||
{ | ||
if (prefix === undefined) { | ||
// Extract the VM specific prefix used by each line. | ||
function checkKeyStringCoercion(value) { | ||
try { | ||
throw Error(); | ||
} catch (x) { | ||
var match = x.stack.trim().match(/\n( *(at )?)/); | ||
prefix = match && match[1] || ''; | ||
testStringCoercion(value); | ||
var JSCompiler_inline_result = !1; | ||
} catch (e) { | ||
JSCompiler_inline_result = !0; | ||
} | ||
} // We use the prefix to ensure our stacks line up with native stack frames. | ||
return '\n' + prefix + name; | ||
} | ||
} | ||
var reentry = false; | ||
var componentFrameCache; | ||
{ | ||
var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; | ||
componentFrameCache = new PossiblyWeakMap(); | ||
} | ||
/** | ||
* Leverages native browser/VM stack frames to get proper details (e.g. | ||
* filename, line + col number) for a single component in a component stack. We | ||
* do this by: | ||
* (1) throwing and catching an error in the function - this will be our | ||
* control error. | ||
* (2) calling the component which will eventually throw an error that we'll | ||
* catch - this will be our sample error. | ||
* (3) diffing the control and sample error stacks to find the stack frame | ||
* which represents our component. | ||
*/ | ||
function describeNativeComponentFrame(fn, construct) { | ||
// If something asked for a stack inside a fake render, it should get ignored. | ||
if (!fn || reentry) { | ||
return ''; | ||
} | ||
{ | ||
var frame = componentFrameCache.get(fn); | ||
if (frame !== undefined) { | ||
return frame; | ||
if (JSCompiler_inline_result) { | ||
JSCompiler_inline_result = console; | ||
var JSCompiler_temp_const = JSCompiler_inline_result.error; | ||
var JSCompiler_inline_result$jscomp$0 = | ||
("function" === typeof Symbol && | ||
Symbol.toStringTag && | ||
value[Symbol.toStringTag]) || | ||
value.constructor.name || | ||
"Object"; | ||
JSCompiler_temp_const.call( | ||
JSCompiler_inline_result, | ||
"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", | ||
JSCompiler_inline_result$jscomp$0 | ||
); | ||
return testStringCoercion(value); | ||
} | ||
} | ||
} | ||
reentry = true; | ||
var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe[incompatible-type] It does accept undefined. | ||
Error.prepareStackTrace = undefined; | ||
var previousDispatcher = null; | ||
{ | ||
previousDispatcher = ReactSharedInternalsServer.H; // Set the dispatcher in DEV because this might be call in the render function | ||
// for warnings. | ||
ReactSharedInternalsServer.H = null; | ||
disableLogs(); | ||
} | ||
/** | ||
* Finding a common stack frame between sample and control errors can be | ||
* tricky given the different types and levels of stack trace truncation from | ||
* different JS VMs. So instead we'll attempt to control what that common | ||
* frame should be through this object method: | ||
* Having both the sample and control errors be in the function under the | ||
* `DescribeNativeComponentFrameRoot` property, + setting the `name` and | ||
* `displayName` properties of the function ensures that a stack | ||
* frame exists that has the method name `DescribeNativeComponentFrameRoot` in | ||
* it for both control and sample stacks. | ||
*/ | ||
var RunInRootFrame = { | ||
DetermineComponentFrameRoot: function () { | ||
var control; | ||
function getTaskName(type) { | ||
if (type === REACT_FRAGMENT_TYPE) return "<>"; | ||
if ( | ||
"object" === typeof type && | ||
null !== type && | ||
type.$$typeof === REACT_LAZY_TYPE | ||
) | ||
return "<...>"; | ||
try { | ||
// This should throw. | ||
if (construct) { | ||
// Something should be setting the props in the constructor. | ||
var Fake = function () { | ||
throw Error(); | ||
}; // $FlowFixMe[prop-missing] | ||
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; | ||
} // $FlowFixMe[prop-missing] found when upgrading Flow | ||
fn.call(Fake.prototype); | ||
} | ||
} else { | ||
try { | ||
throw Error(); | ||
} catch (x) { | ||
control = x; | ||
} // TODO(luna): This will currently only throw if the function component | ||
// tries to access React/ReactDOM/props. We should probably make this throw | ||
// in simple components too | ||
var maybePromise = fn(); // If the function component returns a promise, it's likely an async | ||
// component, which we don't yet support. Attach a noop catch handler to | ||
// silence the error. | ||
// TODO: Implement component stacks for async client components? | ||
if (maybePromise && typeof maybePromise.catch === 'function') { | ||
maybePromise.catch(function () {}); | ||
} | ||
} | ||
} catch (sample) { | ||
// This is inlined manually because closure doesn't do it for us. | ||
if (sample && control && typeof sample.stack === 'string') { | ||
return [sample.stack, control.stack]; | ||
} | ||
var name = getComponentNameFromType(type); | ||
return name ? "<" + name + ">" : "<...>"; | ||
} catch (x) { | ||
return "<...>"; | ||
} | ||
return [null, null]; | ||
} | ||
}; // $FlowFixMe[prop-missing] | ||
RunInRootFrame.DetermineComponentFrameRoot.displayName = 'DetermineComponentFrameRoot'; | ||
var namePropDescriptor = Object.getOwnPropertyDescriptor(RunInRootFrame.DetermineComponentFrameRoot, 'name'); // Before ES6, the `name` property was not configurable. | ||
if (namePropDescriptor && namePropDescriptor.configurable) { | ||
// V8 utilizes a function's `name` property when generating a stack trace. | ||
Object.defineProperty(RunInRootFrame.DetermineComponentFrameRoot, // Configurable properties can be updated even if its writable descriptor | ||
// is set to `false`. | ||
// $FlowFixMe[cannot-write] | ||
'name', { | ||
value: 'DetermineComponentFrameRoot' | ||
}); | ||
} | ||
try { | ||
var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(), | ||
sampleStack = _RunInRootFrame$Deter[0], | ||
controlStack = _RunInRootFrame$Deter[1]; | ||
if (sampleStack && controlStack) { | ||
// 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 = sampleStack.split('\n'); | ||
var controlLines = controlStack.split('\n'); | ||
var s = 0; | ||
var c = 0; | ||
while (s < sampleLines.length && !sampleLines[s].includes('DetermineComponentFrameRoot')) { | ||
s++; | ||
} | ||
while (c < controlLines.length && !controlLines[c].includes('DetermineComponentFrameRoot')) { | ||
c++; | ||
} // We couldn't find our intentionally injected common root frame, attempt | ||
// to find another common root frame by search from the bottom of the | ||
// control stack... | ||
if (s === sampleLines.length || c === controlLines.length) { | ||
s = sampleLines.length - 1; | ||
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. | ||
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); | ||
} | ||
if (true) { | ||
if (typeof fn === 'function') { | ||
componentFrameCache.set(fn, _frame); | ||
} | ||
} // Return the line we found. | ||
return _frame; | ||
} | ||
} while (s >= 1 && c >= 0); | ||
} | ||
break; | ||
} | ||
} | ||
function getOwner() { | ||
var dispatcher = ReactSharedInternalsServer.A; | ||
return null === dispatcher ? null : dispatcher.getOwner(); | ||
} | ||
} finally { | ||
reentry = false; | ||
{ | ||
ReactSharedInternalsServer.H = previousDispatcher; | ||
reenableLogs(); | ||
function UnknownOwner() { | ||
return Error("react-stack-top-frame"); | ||
} | ||
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) { | ||
{ | ||
return describeNativeComponentFrame(fn, false); | ||
} | ||
} | ||
function shouldConstruct(Component) { | ||
var prototype = Component.prototype; | ||
return !!(prototype && prototype.isReactComponent); | ||
} | ||
function describeUnknownElementTypeFrameInDEV(type) { | ||
if (type == null) { | ||
return ''; | ||
} | ||
if (typeof type === 'function') { | ||
{ | ||
return describeNativeComponentFrame(type, shouldConstruct(type)); | ||
} | ||
} | ||
if (typeof type === 'string') { | ||
return describeBuiltInComponentFrame(type); | ||
} | ||
switch (type) { | ||
case REACT_SUSPENSE_TYPE: | ||
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); | ||
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)); | ||
} catch (x) {} | ||
} | ||
} | ||
} | ||
return ''; | ||
} | ||
var REACT_CLIENT_REFERENCE = Symbol.for('react.client.reference'); | ||
var specialPropKeyWarningShown; | ||
var didWarnAboutElementRef; | ||
{ | ||
didWarnAboutElementRef = {}; | ||
} | ||
function hasValidRef(config) { | ||
{ | ||
if (hasOwnProperty.call(config, 'ref')) { | ||
var getter = Object.getOwnPropertyDescriptor(config, 'ref').get; | ||
if (getter && getter.isReactWarning) { | ||
return false; | ||
function hasValidKey(config) { | ||
if (hasOwnProperty.call(config, "key")) { | ||
var getter = Object.getOwnPropertyDescriptor(config, "key").get; | ||
if (getter && getter.isReactWarning) return !1; | ||
} | ||
return void 0 !== config.key; | ||
} | ||
} | ||
return config.ref !== undefined; | ||
} | ||
function hasValidKey(config) { | ||
{ | ||
if (hasOwnProperty.call(config, 'key')) { | ||
var getter = Object.getOwnPropertyDescriptor(config, 'key').get; | ||
if (getter && getter.isReactWarning) { | ||
return false; | ||
function defineKeyPropWarningGetter(props, displayName) { | ||
function warnAboutAccessingKey() { | ||
specialPropKeyWarningShown || | ||
((specialPropKeyWarningShown = !0), | ||
console.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://react.dev/link/special-props)", | ||
displayName | ||
)); | ||
} | ||
warnAboutAccessingKey.isReactWarning = !0; | ||
Object.defineProperty(props, "key", { | ||
get: warnAboutAccessingKey, | ||
configurable: !0 | ||
}); | ||
} | ||
} | ||
return config.key !== undefined; | ||
} | ||
function defineKeyPropWarningGetter(props, displayName) { | ||
{ | ||
var warnAboutAccessingKey = function () { | ||
if (!specialPropKeyWarningShown) { | ||
specialPropKeyWarningShown = true; | ||
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://react.dev/link/special-props)', displayName); | ||
} | ||
}; | ||
warnAboutAccessingKey.isReactWarning = true; | ||
Object.defineProperty(props, 'key', { | ||
get: warnAboutAccessingKey, | ||
configurable: true | ||
}); | ||
} | ||
} | ||
function elementRefGetterWithDeprecationWarning() { | ||
{ | ||
var componentName = getComponentNameFromType(this.type); | ||
if (!didWarnAboutElementRef[componentName]) { | ||
didWarnAboutElementRef[componentName] = true; | ||
error('Accessing element.ref was removed in React 19. ref is now a ' + 'regular prop. It will be removed from the JSX Element ' + 'type in a future release.'); | ||
} // An undefined `element.ref` is coerced to `null` for | ||
// backwards compatibility. | ||
var refProp = this.props.ref; | ||
return refProp !== undefined ? refProp : null; | ||
} | ||
} | ||
/** | ||
* 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 | ||
*/ | ||
function ReactElement(type, key, _ref, self, source, owner, props) { | ||
var ref; | ||
{ | ||
// When enableRefAsProp is on, ignore whatever was passed as the ref | ||
// argument and treat `props.ref` as the source of truth. The only thing we | ||
// use this for is `element.ref`, which will log a deprecation warning on | ||
// access. In the next release, we can remove `element.ref` as well as the | ||
// `ref` argument. | ||
var refProp = props.ref; // An undefined `element.ref` is coerced to `null` for | ||
// backwards compatibility. | ||
ref = refProp !== undefined ? refProp : null; | ||
} | ||
var element; | ||
{ | ||
// In dev, make `ref` a non-enumerable property with a warning. It's non- | ||
// enumerable so that test matchers and serializers don't access it and | ||
// trigger the warning. | ||
// | ||
// `ref` will be removed from the element completely in a future release. | ||
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, | ||
props: props, | ||
// Record the component responsible for creating this element. | ||
_owner: owner | ||
}; | ||
if (ref !== null) { | ||
Object.defineProperty(element, 'ref', { | ||
enumerable: false, | ||
get: elementRefGetterWithDeprecationWarning | ||
function elementRefGetterWithDeprecationWarning() { | ||
var componentName = getComponentNameFromType(this.type); | ||
didWarnAboutElementRef[componentName] || | ||
((didWarnAboutElementRef[componentName] = !0), | ||
console.error( | ||
"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release." | ||
)); | ||
componentName = this.props.ref; | ||
return void 0 !== componentName ? componentName : null; | ||
} | ||
function ReactElement( | ||
type, | ||
key, | ||
self, | ||
source, | ||
owner, | ||
props, | ||
debugStack, | ||
debugTask | ||
) { | ||
self = props.ref; | ||
type = { | ||
$$typeof: REACT_ELEMENT_TYPE, | ||
type: type, | ||
key: key, | ||
props: props, | ||
_owner: owner | ||
}; | ||
null !== (void 0 !== self ? self : null) | ||
? Object.defineProperty(type, "ref", { | ||
enumerable: !1, | ||
get: elementRefGetterWithDeprecationWarning | ||
}) | ||
: Object.defineProperty(type, "ref", { enumerable: !1, value: null }); | ||
type._store = {}; | ||
Object.defineProperty(type._store, "validated", { | ||
configurable: !1, | ||
enumerable: !1, | ||
writable: !0, | ||
value: 0 | ||
}); | ||
} else { | ||
// Don't warn on access if a ref is not given. This reduces false | ||
// positives in cases where a test serializer uses | ||
// getOwnPropertyDescriptors to compare objects, like Jest does, which is | ||
// a problem because it bypasses non-enumerability. | ||
// | ||
// So unfortunately this will trigger a false positive warning in Jest | ||
// when the diff is printed: | ||
// | ||
// expect(<div ref={ref} />).toEqual(<span ref={ref} />); | ||
// | ||
// A bit sketchy, but this is what we've done for the `props.key` and | ||
// `props.ref` accessors for years, which implies it will be good enough | ||
// for `element.ref`, too. Let's see if anyone complains. | ||
Object.defineProperty(element, 'ref', { | ||
enumerable: false, | ||
Object.defineProperty(type, "_debugInfo", { | ||
configurable: !1, | ||
enumerable: !1, | ||
writable: !0, | ||
value: null | ||
}); | ||
Object.defineProperty(type, "_debugStack", { | ||
configurable: !1, | ||
enumerable: !1, | ||
writable: !0, | ||
value: debugStack | ||
}); | ||
Object.defineProperty(type, "_debugTask", { | ||
configurable: !1, | ||
enumerable: !1, | ||
writable: !0, | ||
value: debugTask | ||
}); | ||
Object.freeze && (Object.freeze(type.props), Object.freeze(type)); | ||
return type; | ||
} | ||
} | ||
{ | ||
// 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 | ||
}); // debugInfo contains Server Component debug information. | ||
Object.defineProperty(element, '_debugInfo', { | ||
configurable: false, | ||
enumerable: false, | ||
writable: true, | ||
value: null | ||
}); | ||
if (Object.freeze) { | ||
Object.freeze(element.props); | ||
Object.freeze(element); | ||
} | ||
} | ||
return element; | ||
} | ||
// support `jsx` and `jsxs` when running in development. This supports the case | ||
// where a third-party dependency ships code that was compiled for production; | ||
// we want to still provide warnings in development. | ||
// | ||
// So these functions are the _dev_ implementations of the _production_ | ||
// API signatures. | ||
// | ||
// Since these functions are dev-only, it's ok to add an indirection here. They | ||
// only exist to provide different versions of `isStaticChildren`. (We shouldn't | ||
// use this pattern for the prod versions, though, because it will add an call | ||
// frame.) | ||
function jsxProdSignatureRunningInDevWithDynamicChildren(type, config, maybeKey, source, self) { | ||
{ | ||
var isStaticChildren = false; | ||
return jsxDEV$1(type, config, maybeKey, isStaticChildren, source, self); | ||
} | ||
} | ||
function jsxProdSignatureRunningInDevWithStaticChildren(type, config, maybeKey, source, self) { | ||
{ | ||
var isStaticChildren = true; | ||
return jsxDEV$1(type, config, maybeKey, isStaticChildren, source, self); | ||
} | ||
} | ||
var didWarnAboutKeySpread = {}; | ||
/** | ||
* https://github.com/reactjs/rfcs/pull/107 | ||
* @param {*} type | ||
* @param {object} props | ||
* @param {string} key | ||
*/ | ||
function jsxDEV$1(type, config, maybeKey, isStaticChildren, source, self) { | ||
{ | ||
if (!isValidElementType(type)) { | ||
// This is an invalid element 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. | ||
var info = ''; | ||
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."; | ||
} | ||
var typeString; | ||
if (type === null) { | ||
typeString = 'null'; | ||
} else if (isArray(type)) { | ||
typeString = 'array'; | ||
} else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) { | ||
typeString = "<" + (getComponentNameFromType(type.type) || 'Unknown') + " />"; | ||
info = ' Did you accidentally export a JSX literal instead of a component?'; | ||
} else { | ||
typeString = typeof type; | ||
} | ||
error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info); | ||
} else { | ||
// This is a valid element type. | ||
// 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.) | ||
function jsxDEVImpl( | ||
type, | ||
config, | ||
maybeKey, | ||
isStaticChildren, | ||
source, | ||
self, | ||
debugStack, | ||
debugTask | ||
) { | ||
var children = config.children; | ||
if (children !== undefined) { | ||
if (isStaticChildren) { | ||
if (isArray(children)) { | ||
for (var i = 0; i < children.length; i++) { | ||
validateChildKeys(children[i], type); | ||
} | ||
if (Object.freeze) { | ||
Object.freeze(children); | ||
} | ||
} else { | ||
error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.'); | ||
} | ||
} else { | ||
validateChildKeys(children, type); | ||
} | ||
if (void 0 !== children) | ||
if (isStaticChildren) | ||
if (isArrayImpl(children)) { | ||
for ( | ||
isStaticChildren = 0; | ||
isStaticChildren < children.length; | ||
isStaticChildren++ | ||
) | ||
validateChildKeys(children[isStaticChildren]); | ||
Object.freeze && Object.freeze(children); | ||
} else | ||
console.error( | ||
"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead." | ||
); | ||
else validateChildKeys(children); | ||
if (hasOwnProperty.call(config, "key")) { | ||
children = getComponentNameFromType(type); | ||
var keys = Object.keys(config).filter(function (k) { | ||
return "key" !== k; | ||
}); | ||
isStaticChildren = | ||
0 < keys.length | ||
? "{key: someKey, " + keys.join(": ..., ") + ": ...}" | ||
: "{key: someKey}"; | ||
didWarnAboutKeySpread[children + isStaticChildren] || | ||
((keys = | ||
0 < keys.length ? "{" + keys.join(": ..., ") + ": ...}" : "{}"), | ||
console.error( | ||
'A props object containing a "key" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />', | ||
isStaticChildren, | ||
children, | ||
keys, | ||
children | ||
), | ||
(didWarnAboutKeySpread[children + isStaticChildren] = !0)); | ||
} | ||
} // Warn about key spread regardless of whether the type is valid. | ||
if (hasOwnProperty.call(config, 'key')) { | ||
var componentName = getComponentNameFromType(type); | ||
var keys = Object.keys(config).filter(function (k) { | ||
return k !== 'key'; | ||
}); | ||
var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}'; | ||
if (!didWarnAboutKeySpread[componentName + beforeExample]) { | ||
var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}'; | ||
error('A props object containing a "key" prop is being spread into JSX:\n' + ' let props = %s;\n' + ' <%s {...props} />\n' + 'React keys must be passed directly to JSX without using spread:\n' + ' let props = %s;\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName); | ||
didWarnAboutKeySpread[componentName + beforeExample] = true; | ||
} | ||
children = null; | ||
void 0 !== maybeKey && | ||
(checkKeyStringCoercion(maybeKey), (children = "" + maybeKey)); | ||
hasValidKey(config) && | ||
(checkKeyStringCoercion(config.key), (children = "" + config.key)); | ||
if ("key" in config) { | ||
maybeKey = {}; | ||
for (var propName in config) | ||
"key" !== propName && (maybeKey[propName] = config[propName]); | ||
} else maybeKey = config; | ||
children && | ||
defineKeyPropWarningGetter( | ||
maybeKey, | ||
"function" === typeof type | ||
? type.displayName || type.name || "Unknown" | ||
: type | ||
); | ||
return ReactElement( | ||
type, | ||
children, | ||
self, | ||
source, | ||
getOwner(), | ||
maybeKey, | ||
debugStack, | ||
debugTask | ||
); | ||
} | ||
var key = null; | ||
var ref = null; // Currently, key can be spread in as a prop. This causes a potential | ||
// issue if key is also explicitly declared (ie. <div {...props} key="Hi" /> | ||
// or <div key="Hi" {...props} /> ). We want to deprecate key spread, | ||
// but as an intermediary step, we will use jsxDEV for everything except | ||
// <div {...props} key="Hi" />, because we aren't currently able to tell if | ||
// key is explicitly declared to be undefined or not. | ||
if (maybeKey !== undefined) { | ||
{ | ||
checkKeyStringCoercion(maybeKey); | ||
} | ||
key = '' + maybeKey; | ||
function validateChildKeys(node) { | ||
"object" === typeof node && | ||
null !== node && | ||
node.$$typeof === REACT_ELEMENT_TYPE && | ||
node._store && | ||
(node._store.validated = 1); | ||
} | ||
if (hasValidKey(config)) { | ||
{ | ||
checkKeyStringCoercion(config.key); | ||
var React = require("react"), | ||
REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), | ||
REACT_PORTAL_TYPE = Symbol.for("react.portal"), | ||
REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), | ||
REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), | ||
REACT_PROFILER_TYPE = Symbol.for("react.profiler"), | ||
REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), | ||
REACT_CONTEXT_TYPE = Symbol.for("react.context"), | ||
REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), | ||
REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), | ||
REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), | ||
REACT_MEMO_TYPE = Symbol.for("react.memo"), | ||
REACT_LAZY_TYPE = Symbol.for("react.lazy"), | ||
REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), | ||
REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"), | ||
REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), | ||
ReactSharedInternalsServer = | ||
React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; | ||
if (!ReactSharedInternalsServer) | ||
throw Error( | ||
'The "react" package in this environment is not configured correctly. The "react-server" condition must be enabled in any environment that runs React Server Components.' | ||
); | ||
var hasOwnProperty = Object.prototype.hasOwnProperty, | ||
isArrayImpl = Array.isArray, | ||
createTask = console.createTask | ||
? console.createTask | ||
: function () { | ||
return null; | ||
}; | ||
React = { | ||
react_stack_bottom_frame: function (callStackForError) { | ||
return callStackForError(); | ||
} | ||
key = '' + config.key; | ||
} | ||
if (hasValidRef(config)) ; | ||
var props; | ||
if (!('key' in config)) { | ||
// If key was not spread in, we can reuse the original props object. This | ||
// only works for `jsx`, not `createElement`, because `jsx` is a compiler | ||
// target and the compiler always passes a new object. For `createElement`, | ||
// we can't assume a new object is passed every time because it can be | ||
// called manually. | ||
// | ||
// Spreading key is a warning in dev. In a future release, we will not | ||
// remove a spread key from the props object. (But we'll still warn.) We'll | ||
// always pass the object straight through. | ||
props = config; | ||
} else { | ||
// We need to remove reserved props (key, prop, ref). Create a fresh props | ||
// object and copy over all the non-reserved props. We don't use `delete` | ||
// because in V8 it will deopt the object to dictionary mode. | ||
props = {}; | ||
for (var propName in config) { | ||
// Skip over reserved prop names | ||
if (propName !== 'key' && (enableRefAsProp )) { | ||
{ | ||
props[propName] = config[propName]; | ||
} | ||
} | ||
} | ||
} | ||
if (key || !enableRefAsProp ) { | ||
var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type; | ||
if (key) { | ||
defineKeyPropWarningGetter(props, displayName); | ||
} | ||
} | ||
var element = ReactElement(type, key, ref, self, source, ReactSharedInternalsServer.owner, props); | ||
if (type === REACT_FRAGMENT_TYPE) { | ||
validateFragmentProps(element); | ||
} | ||
return element; | ||
} | ||
} | ||
function getDeclarationErrorAddendum() { | ||
{ | ||
if (ReactSharedInternalsServer.owner) { | ||
var name = getComponentNameFromType(ReactSharedInternalsServer.owner.type); | ||
if (name) { | ||
return '\n\nCheck the render method of `' + name + '`.'; | ||
} | ||
} | ||
return ''; | ||
} | ||
} | ||
/** | ||
* 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' || !node) { | ||
return; | ||
} | ||
if (node.$$typeof === REACT_CLIENT_REFERENCE) ; else if (isArray(node)) { | ||
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 { | ||
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); | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
/** | ||
* 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 | ||
*/ | ||
function isValidElement(object) { | ||
return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; | ||
} | ||
var ownerHasKeyUseWarning = {}; | ||
/** | ||
* 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 != null && element._owner !== ReactSharedInternalsServer.owner) { | ||
var ownerName = null; | ||
if (typeof element._owner.tag === 'number') { | ||
ownerName = getComponentNameFromType(element._owner.type); | ||
} else if (typeof element._owner.name === 'string') { | ||
ownerName = element._owner.name; | ||
} // Give the component that originally created this child. | ||
childOwner = " It was passed a child from " + ownerName + "."; | ||
} | ||
setCurrentlyValidatingElement(element); | ||
error('Each child in a list should have a unique "key" prop.' + '%s%s See https://react.dev/link/warning-keys for more information.', currentComponentErrorInfo, childOwner); | ||
setCurrentlyValidatingElement(null); | ||
} | ||
} | ||
function setCurrentlyValidatingElement(element) { | ||
{ | ||
if (element) { | ||
var stack = describeUnknownElementTypeFrameInDEV(element.type); | ||
ReactSharedInternalsServer.setExtraStackFrame(stack); | ||
} else { | ||
ReactSharedInternalsServer.setExtraStackFrame(null); | ||
} | ||
} | ||
} | ||
function getCurrentComponentErrorInfo(parentType) { | ||
{ | ||
var info = getDeclarationErrorAddendum(); | ||
if (!info) { | ||
var parentName = getComponentNameFromType(parentType); | ||
if (parentName) { | ||
info = "\n\nCheck the top-level render call using <" + parentName + ">."; | ||
} | ||
} | ||
return info; | ||
} | ||
} | ||
/** | ||
* Given a fragment, validate that it can only be provided with fragment props | ||
* @param {ReactElement} fragment | ||
*/ | ||
function validateFragmentProps(fragment) { | ||
// TODO: Move this to render phase instead of at element creation. | ||
{ | ||
var keys = Object.keys(fragment.props); | ||
for (var i = 0; i < keys.length; i++) { | ||
var key = keys[i]; | ||
if (key !== 'children' && key !== 'key') { | ||
setCurrentlyValidatingElement(fragment); | ||
error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key); | ||
setCurrentlyValidatingElement(null); | ||
break; | ||
} | ||
} | ||
} | ||
} | ||
var jsx = jsxProdSignatureRunningInDevWithDynamicChildren ; // we may want to special case jsxs internally to take advantage of static children. | ||
// for now we can ship identical prod functions | ||
var jsxs = jsxProdSignatureRunningInDevWithStaticChildren ; | ||
var jsxDEV = jsxDEV$1 ; | ||
exports.Fragment = REACT_FRAGMENT_TYPE; | ||
exports.jsx = jsx; | ||
exports.jsxDEV = jsxDEV; | ||
exports.jsxs = jsxs; | ||
}; | ||
var specialPropKeyWarningShown; | ||
var didWarnAboutElementRef = {}; | ||
var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind( | ||
React, | ||
UnknownOwner | ||
)(); | ||
var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner)); | ||
var didWarnAboutKeySpread = {}; | ||
exports.Fragment = REACT_FRAGMENT_TYPE; | ||
exports.jsx = function (type, config, maybeKey, source, self) { | ||
var trackActualOwner = | ||
1e4 > ReactSharedInternalsServer.recentlyCreatedOwnerStacks++; | ||
return jsxDEVImpl( | ||
type, | ||
config, | ||
maybeKey, | ||
!1, | ||
source, | ||
self, | ||
trackActualOwner | ||
? Error("react-stack-top-frame") | ||
: unknownOwnerDebugStack, | ||
trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask | ||
); | ||
}; | ||
exports.jsxDEV = function ( | ||
type, | ||
config, | ||
maybeKey, | ||
isStaticChildren, | ||
source, | ||
self | ||
) { | ||
var trackActualOwner = | ||
1e4 > ReactSharedInternalsServer.recentlyCreatedOwnerStacks++; | ||
return jsxDEVImpl( | ||
type, | ||
config, | ||
maybeKey, | ||
isStaticChildren, | ||
source, | ||
self, | ||
trackActualOwner | ||
? Error("react-stack-top-frame") | ||
: unknownOwnerDebugStack, | ||
trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask | ||
); | ||
}; | ||
exports.jsxs = function (type, config, maybeKey, source, self) { | ||
var trackActualOwner = | ||
1e4 > ReactSharedInternalsServer.recentlyCreatedOwnerStacks++; | ||
return jsxDEVImpl( | ||
type, | ||
config, | ||
maybeKey, | ||
!0, | ||
source, | ||
self, | ||
trackActualOwner | ||
? Error("react-stack-top-frame") | ||
: unknownOwnerDebugStack, | ||
trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask | ||
); | ||
}; | ||
})(); | ||
} |
/** | ||
* @license React | ||
* react-jsx-runtime.react-server.production.min.js | ||
* react-jsx-runtime.react-server.production.js | ||
* | ||
@@ -11,153 +11,31 @@ * Copyright (c) Meta Platforms, Inc. and affiliates. | ||
'use strict'; | ||
var React = require('react'); | ||
// ATTENTION | ||
// When adding new symbols to this file, | ||
// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols' | ||
// The Symbol used to tag the ReactElement-like types. | ||
const REACT_ELEMENT_TYPE = Symbol.for('react.element'); | ||
const REACT_FRAGMENT_TYPE = Symbol.for('react.fragment'); | ||
// ----------------------------------------------------------------------------- | ||
// as a normal prop instead of stripping it from the props object. | ||
// Passes `ref` as a normal prop instead of stripping it from the props object | ||
// during element creation. | ||
const enableRefAsProp = true; | ||
const ReactSharedInternalsServer = // $FlowFixMe: It's defined in the one we resolve to. | ||
React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; | ||
if (!ReactSharedInternalsServer) { | ||
throw new Error('The "react" package in this environment is not configured correctly. ' + 'The "react-server" condition must be enabled in any environment that ' + 'runs React Server Components.'); | ||
"use strict"; | ||
var React = require("react"), | ||
REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), | ||
REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"); | ||
if (!React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE) | ||
throw Error( | ||
'The "react" package in this environment is not configured correctly. The "react-server" condition must be enabled in any environment that runs React Server Components.' | ||
); | ||
function jsxProd(type, config, maybeKey) { | ||
var key = null; | ||
void 0 !== maybeKey && (key = "" + maybeKey); | ||
void 0 !== config.key && (key = "" + config.key); | ||
if ("key" in config) { | ||
maybeKey = {}; | ||
for (var propName in config) | ||
"key" !== propName && (maybeKey[propName] = config[propName]); | ||
} else maybeKey = config; | ||
config = maybeKey.ref; | ||
return { | ||
$$typeof: REACT_ELEMENT_TYPE, | ||
type: type, | ||
key: key, | ||
ref: void 0 !== config ? config : null, | ||
props: maybeKey | ||
}; | ||
} | ||
function hasValidKey(config) { | ||
return config.key !== undefined; | ||
} | ||
/** | ||
* 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 | ||
*/ | ||
function ReactElement(type, key, _ref, self, source, owner, props) { | ||
let ref; | ||
{ | ||
// When enableRefAsProp is on, ignore whatever was passed as the ref | ||
// argument and treat `props.ref` as the source of truth. The only thing we | ||
// use this for is `element.ref`, which will log a deprecation warning on | ||
// access. In the next release, we can remove `element.ref` as well as the | ||
// `ref` argument. | ||
const refProp = props.ref; // An undefined `element.ref` is coerced to `null` for | ||
// backwards compatibility. | ||
ref = refProp !== undefined ? refProp : null; | ||
} | ||
let element; | ||
{ | ||
// In prod, `ref` is a regular property and _owner doesn't exist. | ||
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, | ||
key, | ||
ref, | ||
props | ||
}; | ||
} | ||
return element; | ||
} | ||
/** | ||
* https://github.com/reactjs/rfcs/pull/107 | ||
* @param {*} type | ||
* @param {object} props | ||
* @param {string} key | ||
*/ | ||
function jsxProd(type, config, maybeKey) { | ||
let key = null; | ||
let ref = null; // Currently, key can be spread in as a prop. This causes a potential | ||
// issue if key is also explicitly declared (ie. <div {...props} key="Hi" /> | ||
// or <div key="Hi" {...props} /> ). We want to deprecate key spread, | ||
// but as an intermediary step, we will use jsxDEV for everything except | ||
// <div {...props} key="Hi" />, because we aren't currently able to tell if | ||
// key is explicitly declared to be undefined or not. | ||
if (maybeKey !== undefined) { | ||
key = '' + maybeKey; | ||
} | ||
if (hasValidKey(config)) { | ||
key = '' + config.key; | ||
} | ||
let props; | ||
if (!('key' in config)) { | ||
// If key was not spread in, we can reuse the original props object. This | ||
// only works for `jsx`, not `createElement`, because `jsx` is a compiler | ||
// target and the compiler always passes a new object. For `createElement`, | ||
// we can't assume a new object is passed every time because it can be | ||
// called manually. | ||
// | ||
// Spreading key is a warning in dev. In a future release, we will not | ||
// remove a spread key from the props object. (But we'll still warn.) We'll | ||
// always pass the object straight through. | ||
props = config; | ||
} else { | ||
// We need to remove reserved props (key, prop, ref). Create a fresh props | ||
// object and copy over all the non-reserved props. We don't use `delete` | ||
// because in V8 it will deopt the object to dictionary mode. | ||
props = {}; | ||
for (const propName in config) { | ||
// Skip over reserved prop names | ||
if (propName !== 'key' && (enableRefAsProp )) { | ||
{ | ||
props[propName] = config[propName]; | ||
} | ||
} | ||
} | ||
} | ||
return ReactElement(type, key, ref, undefined, undefined, ReactSharedInternalsServer.owner, props); | ||
} // While `jsxDEV` should never be called when running in production, we do | ||
const jsx = jsxProd; // we may want to special case jsxs internally to take advantage of static children. | ||
// for now we can ship identical prod functions | ||
const jsxs = jsxProd; | ||
const jsxDEV = undefined; | ||
exports.Fragment = REACT_FRAGMENT_TYPE; | ||
exports.jsx = jsx; | ||
exports.jsxDEV = jsxDEV; | ||
exports.jsxs = jsxs; | ||
exports.jsx = jsxProd; | ||
exports.jsxDEV = void 0; | ||
exports.jsxs = jsxProd; |
/** | ||
* @license React | ||
* react.production.min.js | ||
* react.production.js | ||
* | ||
@@ -11,694 +11,261 @@ * Copyright (c) Meta Platforms, Inc. and affiliates. | ||
'use strict'; | ||
var ReactVersion = '19.0.0-experimental-96c584661-20240412'; | ||
// ATTENTION | ||
// When adding new symbols to this file, | ||
// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols' | ||
// The Symbol used to tag the ReactElement-like types. | ||
const REACT_ELEMENT_TYPE = Symbol.for('react.element'); | ||
const REACT_PORTAL_TYPE = Symbol.for('react.portal'); | ||
const REACT_FRAGMENT_TYPE = Symbol.for('react.fragment'); | ||
const REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode'); | ||
const REACT_PROFILER_TYPE = Symbol.for('react.profiler'); | ||
const REACT_CONSUMER_TYPE = Symbol.for('react.consumer'); | ||
const REACT_CONTEXT_TYPE = Symbol.for('react.context'); | ||
const REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref'); | ||
const REACT_SUSPENSE_TYPE = Symbol.for('react.suspense'); | ||
const REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list'); | ||
const REACT_MEMO_TYPE = Symbol.for('react.memo'); | ||
const REACT_LAZY_TYPE = Symbol.for('react.lazy'); | ||
const REACT_DEBUG_TRACING_MODE_TYPE = Symbol.for('react.debug_trace_mode'); | ||
const REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen'); | ||
const REACT_POSTPONE_TYPE = Symbol.for('react.postpone'); | ||
const MAYBE_ITERATOR_SYMBOL = Symbol.iterator; | ||
const FAUX_ITERATOR_SYMBOL = '@@iterator'; | ||
"use strict"; | ||
var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), | ||
REACT_PORTAL_TYPE = Symbol.for("react.portal"), | ||
REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), | ||
REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), | ||
REACT_PROFILER_TYPE = Symbol.for("react.profiler"), | ||
REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), | ||
REACT_CONTEXT_TYPE = Symbol.for("react.context"), | ||
REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), | ||
REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), | ||
REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), | ||
REACT_MEMO_TYPE = Symbol.for("react.memo"), | ||
REACT_LAZY_TYPE = Symbol.for("react.lazy"), | ||
REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), | ||
REACT_POSTPONE_TYPE = Symbol.for("react.postpone"), | ||
REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"), | ||
MAYBE_ITERATOR_SYMBOL = Symbol.iterator; | ||
function getIteratorFn(maybeIterable) { | ||
if (maybeIterable === null || typeof maybeIterable !== 'object') { | ||
return null; | ||
} | ||
const maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]; | ||
if (typeof maybeIterator === 'function') { | ||
return maybeIterator; | ||
} | ||
return null; | ||
if (null === maybeIterable || "object" !== typeof maybeIterable) return null; | ||
maybeIterable = | ||
(MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) || | ||
maybeIterable["@@iterator"]; | ||
return "function" === typeof maybeIterable ? maybeIterable : null; | ||
} | ||
/** | ||
* This is the abstract API for an update queue. | ||
*/ | ||
const 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; | ||
var ReactNoopUpdateQueue = { | ||
isMounted: function () { | ||
return !1; | ||
}, | ||
enqueueForceUpdate: function () {}, | ||
enqueueReplaceState: function () {}, | ||
enqueueSetState: function () {} | ||
}, | ||
/** | ||
* 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) { | ||
}, | ||
/** | ||
* 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) { | ||
}, | ||
/** | ||
* 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) { | ||
} | ||
}; | ||
const assign = Object.assign; | ||
const emptyObject = {}; | ||
/** | ||
* Base class helpers for the updating state of a component. | ||
*/ | ||
assign = Object.assign, | ||
emptyObject = {}; | ||
function Component(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; // We initialize the default updater but the real one gets injected by the | ||
// renderer. | ||
this.context = context; | ||
this.refs = emptyObject; | ||
this.updater = updater || ReactNoopUpdateQueue; | ||
} | ||
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 | ||
*/ | ||
Component.prototype.setState = function (partialState, callback) { | ||
if (typeof partialState !== 'object' && typeof partialState !== 'function' && partialState != null) { | ||
throw new Error('takes an object of state variables to update or a ' + 'function which returns an object of state variables.'); | ||
} | ||
this.updater.enqueueSetState(this, partialState, callback, 'setState'); | ||
if ( | ||
"object" !== typeof partialState && | ||
"function" !== typeof partialState && | ||
null != partialState | ||
) | ||
throw Error( | ||
"takes an object of state variables to update or a function which returns an object of state variables." | ||
); | ||
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 | ||
*/ | ||
Component.prototype.forceUpdate = function (callback) { | ||
this.updater.enqueueForceUpdate(this, callback, 'forceUpdate'); | ||
this.updater.enqueueForceUpdate(this, callback, "forceUpdate"); | ||
}; | ||
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.context = context; | ||
this.refs = emptyObject; | ||
this.updater = updater || ReactNoopUpdateQueue; | ||
} | ||
const pureComponentPrototype = PureComponent.prototype = new ComponentDummy(); | ||
pureComponentPrototype.constructor = PureComponent; // Avoid an extra prototype jump for these methods. | ||
var pureComponentPrototype = (PureComponent.prototype = new ComponentDummy()); | ||
pureComponentPrototype.constructor = PureComponent; | ||
assign(pureComponentPrototype, Component.prototype); | ||
pureComponentPrototype.isPureReactComponent = true; | ||
// an immutable object with a single mutable value | ||
function createRef() { | ||
const refObject = { | ||
current: null | ||
pureComponentPrototype.isPureReactComponent = !0; | ||
var isArrayImpl = Array.isArray; | ||
function noop() {} | ||
var ReactSharedInternals = { H: null, A: null, T: null, S: null, G: null }, | ||
hasOwnProperty = Object.prototype.hasOwnProperty; | ||
function ReactElement(type, key, self, source, owner, props) { | ||
self = props.ref; | ||
return { | ||
$$typeof: REACT_ELEMENT_TYPE, | ||
type: type, | ||
key: key, | ||
ref: void 0 !== self ? self : null, | ||
props: props | ||
}; | ||
return refObject; | ||
} | ||
const isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare | ||
function isArray(a) { | ||
return isArrayImpl(a); | ||
} | ||
// ----------------------------------------------------------------------------- | ||
// as a normal prop instead of stripping it from the props object. | ||
// Passes `ref` as a normal prop instead of stripping it from the props object | ||
// during element creation. | ||
const enableRefAsProp = true; | ||
const ReactSharedInternals = { | ||
H: null, | ||
C: null, | ||
T: null | ||
}; | ||
// $FlowFixMe[method-unbinding] | ||
const hasOwnProperty = Object.prototype.hasOwnProperty; | ||
function hasValidRef(config) { | ||
return config.ref !== undefined; | ||
} | ||
function hasValidKey(config) { | ||
return config.key !== undefined; | ||
} | ||
/** | ||
* 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 | ||
*/ | ||
function ReactElement(type, key, _ref, self, source, owner, props) { | ||
let ref; | ||
{ | ||
// When enableRefAsProp is on, ignore whatever was passed as the ref | ||
// argument and treat `props.ref` as the source of truth. The only thing we | ||
// use this for is `element.ref`, which will log a deprecation warning on | ||
// access. In the next release, we can remove `element.ref` as well as the | ||
// `ref` argument. | ||
const refProp = props.ref; // An undefined `element.ref` is coerced to `null` for | ||
// backwards compatibility. | ||
ref = refProp !== undefined ? refProp : null; | ||
} | ||
let element; | ||
{ | ||
// In prod, `ref` is a regular property and _owner doesn't exist. | ||
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, | ||
key, | ||
ref, | ||
props | ||
}; | ||
} | ||
return element; | ||
} | ||
/** | ||
* Create and return a new ReactElement of the given type. | ||
* See https://reactjs.org/docs/react-api.html#createelement | ||
*/ | ||
function createElement(type, config, children) { | ||
let propName; // Reserved names are extracted | ||
const props = {}; | ||
let key = null; | ||
let ref = null; | ||
if (config != null) { | ||
if (hasValidKey(config)) { | ||
key = '' + config.key; | ||
} // Remaining properties are added to a new props object | ||
for (propName in config) { | ||
if (hasOwnProperty.call(config, propName) && // Skip over reserved prop names | ||
propName !== 'key' && (enableRefAsProp ) && // Even though we don't use these anymore in the runtime, we don't want | ||
// them to appear as props, so in createElement we filter them out. | ||
// We don't have to do this in the jsx() runtime because the jsx() | ||
// transform never passed these as props; it used separate arguments. | ||
propName !== '__self' && propName !== '__source') { | ||
{ | ||
props[propName] = config[propName]; | ||
} | ||
} | ||
} | ||
} // Children can be more than one argument, and those are transferred onto | ||
// the newly allocated props object. | ||
const childrenLength = arguments.length - 2; | ||
if (childrenLength === 1) { | ||
props.children = children; | ||
} else if (childrenLength > 1) { | ||
const childArray = Array(childrenLength); | ||
for (let i = 0; i < childrenLength; i++) { | ||
childArray[i] = arguments[i + 2]; | ||
} | ||
props.children = childArray; | ||
} // Resolve default props | ||
if (type && type.defaultProps) { | ||
const defaultProps = type.defaultProps; | ||
for (propName in defaultProps) { | ||
if (props[propName] === undefined) { | ||
props[propName] = defaultProps[propName]; | ||
} | ||
} | ||
} | ||
const element = ReactElement(type, key, ref, undefined, undefined, ReactSharedInternals.owner, props); | ||
return element; | ||
} | ||
function cloneAndReplaceKey(oldElement, newKey) { | ||
return ReactElement(oldElement.type, newKey, // When enableRefAsProp is on, this argument is ignored. This check only | ||
// exists to avoid the `ref` access warning. | ||
null , undefined, undefined, undefined , oldElement.props); | ||
return ReactElement( | ||
oldElement.type, | ||
newKey, | ||
void 0, | ||
void 0, | ||
void 0, | ||
oldElement.props | ||
); | ||
} | ||
/** | ||
* Clone and return a new ReactElement using element as the starting point. | ||
* See https://reactjs.org/docs/react-api.html#cloneelement | ||
*/ | ||
function cloneElement(element, config, children) { | ||
if (element === null || element === undefined) { | ||
throw new Error("The argument must be a React element, but you passed " + element + "."); | ||
} | ||
let propName; // Original props are copied | ||
const props = assign({}, element.props); // Reserved names are extracted | ||
let key = element.key; | ||
let ref = null ; // Owner will be preserved, unless ref is overridden | ||
let owner = undefined ; | ||
if (config != null) { | ||
if (hasValidRef(config)) { | ||
owner = ReactSharedInternals.owner; | ||
} | ||
if (hasValidKey(config)) { | ||
key = '' + config.key; | ||
} // Remaining properties override existing props | ||
for (propName in config) { | ||
if (hasOwnProperty.call(config, propName) && // Skip over reserved prop names | ||
propName !== 'key' && (enableRefAsProp ) && // ...and maybe these, too, though we currently rely on them for | ||
// warnings and debug information in dev. Need to decide if we're OK | ||
// with dropping them. In the jsx() runtime it's not an issue because | ||
// the data gets passed as separate arguments instead of props, but | ||
// it would be nice to stop relying on them entirely so we can drop | ||
// them from the internal Fiber field. | ||
propName !== '__self' && propName !== '__source' && // Undefined `ref` is ignored by cloneElement. We treat it the same as | ||
// if the property were missing. This is mostly for | ||
// backwards compatibility. | ||
!(propName === 'ref' && config.ref === undefined)) { | ||
{ | ||
{ | ||
props[propName] = config[propName]; | ||
} | ||
} | ||
} | ||
} | ||
} // Children can be more than one argument, and those are transferred onto | ||
// the newly allocated props object. | ||
const childrenLength = arguments.length - 2; | ||
if (childrenLength === 1) { | ||
props.children = children; | ||
} else if (childrenLength > 1) { | ||
const childArray = Array(childrenLength); | ||
for (let i = 0; i < childrenLength; i++) { | ||
childArray[i] = arguments[i + 2]; | ||
} | ||
props.children = childArray; | ||
} | ||
const clonedElement = ReactElement(element.type, key, ref, undefined, undefined, owner, props); | ||
return clonedElement; | ||
} | ||
/** | ||
* 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 | ||
*/ | ||
function isValidElement(object) { | ||
return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; | ||
return ( | ||
"object" === typeof object && | ||
null !== object && | ||
object.$$typeof === REACT_ELEMENT_TYPE | ||
); | ||
} | ||
const SEPARATOR = '.'; | ||
const 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. | ||
*/ | ||
function escape(key) { | ||
const escapeRegex = /[=:]/g; | ||
const escaperLookup = { | ||
'=': '=0', | ||
':': '=2' | ||
}; | ||
const escapedString = key.replace(escapeRegex, function (match) { | ||
return escaperLookup[match]; | ||
}); | ||
return '$' + escapedString; | ||
var escaperLookup = { "=": "=0", ":": "=2" }; | ||
return ( | ||
"$" + | ||
key.replace(/[=:]/g, function (match) { | ||
return escaperLookup[match]; | ||
}) | ||
); | ||
} | ||
const userProvidedKeyEscapeRegex = /\/+/g; | ||
function escapeUserProvidedKey(text) { | ||
return text.replace(userProvidedKeyEscapeRegex, '$&/'); | ||
} | ||
/** | ||
* 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} | ||
*/ | ||
var userProvidedKeyEscapeRegex = /\/+/g; | ||
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) { | ||
return escape('' + element.key); | ||
} // Implicit key determined by the index in the set | ||
return index.toString(36); | ||
return "object" === typeof element && null !== element && null != element.key | ||
? escape("" + element.key) | ||
: index.toString(36); | ||
} | ||
function noop$1() {} | ||
function resolveThenable(thenable) { | ||
switch (thenable.status) { | ||
case 'fulfilled': | ||
{ | ||
const fulfilledValue = thenable.value; | ||
return fulfilledValue; | ||
} | ||
case 'rejected': | ||
{ | ||
const rejectedError = thenable.reason; | ||
throw rejectedError; | ||
} | ||
case "fulfilled": | ||
return thenable.value; | ||
case "rejected": | ||
throw thenable.reason; | ||
default: | ||
{ | ||
if (typeof thenable.status === 'string') { | ||
// Only instrument the thenable if the status if not defined. If | ||
// it's defined, but an unknown value, assume it's been instrumented by | ||
// some custom userspace implementation. We treat it as "pending". | ||
// Attach a dummy listener, to ensure that any lazy initialization can | ||
// happen. Flight lazily parses JSON when the value is actually awaited. | ||
thenable.then(noop$1, noop$1); | ||
} else { | ||
// This is an uncached thenable that we haven't seen before. | ||
// TODO: Detect infinite ping loops caused by uncached promises. | ||
const pendingThenable = thenable; | ||
pendingThenable.status = 'pending'; | ||
pendingThenable.then(fulfilledValue => { | ||
if (thenable.status === 'pending') { | ||
const fulfilledThenable = thenable; | ||
fulfilledThenable.status = 'fulfilled'; | ||
fulfilledThenable.value = fulfilledValue; | ||
} | ||
}, error => { | ||
if (thenable.status === 'pending') { | ||
const rejectedThenable = thenable; | ||
rejectedThenable.status = 'rejected'; | ||
rejectedThenable.reason = error; | ||
} | ||
}); | ||
} // Check one more time in case the thenable resolved synchronously. | ||
switch (thenable.status) { | ||
case 'fulfilled': | ||
{ | ||
const fulfilledThenable = thenable; | ||
return fulfilledThenable.value; | ||
} | ||
case 'rejected': | ||
{ | ||
const rejectedThenable = thenable; | ||
const rejectedError = rejectedThenable.reason; | ||
throw rejectedError; | ||
} | ||
} | ||
switch ( | ||
("string" === typeof thenable.status | ||
? thenable.then(noop, noop) | ||
: ((thenable.status = "pending"), | ||
thenable.then( | ||
function (fulfilledValue) { | ||
"pending" === thenable.status && | ||
((thenable.status = "fulfilled"), | ||
(thenable.value = fulfilledValue)); | ||
}, | ||
function (error) { | ||
"pending" === thenable.status && | ||
((thenable.status = "rejected"), (thenable.reason = error)); | ||
} | ||
)), | ||
thenable.status) | ||
) { | ||
case "fulfilled": | ||
return thenable.value; | ||
case "rejected": | ||
throw thenable.reason; | ||
} | ||
} | ||
throw thenable; | ||
} | ||
function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) { | ||
const type = typeof children; | ||
if (type === 'undefined' || type === 'boolean') { | ||
// All of the above are perceived as null. | ||
children = null; | ||
} | ||
let invokeCallback = false; | ||
if (children === null) { | ||
invokeCallback = true; | ||
} else { | ||
var type = typeof children; | ||
if ("undefined" === type || "boolean" === type) children = null; | ||
var invokeCallback = !1; | ||
if (null === children) invokeCallback = !0; | ||
else | ||
switch (type) { | ||
case 'bigint': | ||
case 'string': | ||
case 'number': | ||
invokeCallback = true; | ||
case "bigint": | ||
case "string": | ||
case "number": | ||
invokeCallback = !0; | ||
break; | ||
case 'object': | ||
case "object": | ||
switch (children.$$typeof) { | ||
case REACT_ELEMENT_TYPE: | ||
case REACT_PORTAL_TYPE: | ||
invokeCallback = true; | ||
invokeCallback = !0; | ||
break; | ||
case REACT_LAZY_TYPE: | ||
const payload = children._payload; | ||
const init = children._init; | ||
return mapIntoArray(init(payload), array, escapedPrefix, nameSoFar, callback); | ||
return ( | ||
(invokeCallback = children._init), | ||
mapIntoArray( | ||
invokeCallback(children._payload), | ||
array, | ||
escapedPrefix, | ||
nameSoFar, | ||
callback | ||
) | ||
); | ||
} | ||
} | ||
} | ||
if (invokeCallback) | ||
return ( | ||
(callback = callback(children)), | ||
(invokeCallback = | ||
"" === nameSoFar ? "." + getElementKey(children, 0) : nameSoFar), | ||
isArrayImpl(callback) | ||
? ((escapedPrefix = ""), | ||
null != invokeCallback && | ||
(escapedPrefix = | ||
invokeCallback.replace(userProvidedKeyEscapeRegex, "$&/") + "/"), | ||
mapIntoArray(callback, array, escapedPrefix, "", function (c) { | ||
return c; | ||
})) | ||
: null != callback && | ||
(isValidElement(callback) && | ||
(callback = cloneAndReplaceKey( | ||
callback, | ||
escapedPrefix + | ||
(null == callback.key || | ||
(children && children.key === callback.key) | ||
? "" | ||
: ("" + callback.key).replace( | ||
userProvidedKeyEscapeRegex, | ||
"$&/" | ||
) + "/") + | ||
invokeCallback | ||
)), | ||
array.push(callback)), | ||
1 | ||
); | ||
invokeCallback = 0; | ||
var nextNamePrefix = "" === nameSoFar ? "." : nameSoFar + ":"; | ||
if (isArrayImpl(children)) | ||
for (var i = 0; i < children.length; i++) | ||
(nameSoFar = children[i]), | ||
(type = nextNamePrefix + getElementKey(nameSoFar, i)), | ||
(invokeCallback += mapIntoArray( | ||
nameSoFar, | ||
array, | ||
escapedPrefix, | ||
type, | ||
callback | ||
)); | ||
else if (((i = getIteratorFn(children)), "function" === typeof i)) | ||
for ( | ||
children = i.call(children), i = 0; | ||
!(nameSoFar = children.next()).done; | ||
if (invokeCallback) { | ||
const child = children; | ||
let 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: | ||
const childKey = nameSoFar === '' ? SEPARATOR + getElementKey(child, 0) : nameSoFar; | ||
if (isArray(mappedChild)) { | ||
let escapedChildKey = ''; | ||
if (childKey != null) { | ||
escapedChildKey = escapeUserProvidedKey(childKey) + '/'; | ||
} | ||
mapIntoArray(mappedChild, array, escapedChildKey, '', c => c); | ||
} else if (mappedChild != null) { | ||
if (isValidElement(mappedChild)) { | ||
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[incompatible-type] Flow incorrectly thinks React.Portal doesn't have a key | ||
mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey( // $FlowFixMe[unsafe-addition] | ||
'' + mappedChild.key // eslint-disable-line react-internal/safe-string-coercion | ||
) + '/' : '') + childKey); | ||
} | ||
array.push(mappedChild); | ||
} | ||
return 1; | ||
) | ||
(nameSoFar = nameSoFar.value), | ||
(type = nextNamePrefix + getElementKey(nameSoFar, i++)), | ||
(invokeCallback += mapIntoArray( | ||
nameSoFar, | ||
array, | ||
escapedPrefix, | ||
type, | ||
callback | ||
)); | ||
else if ("object" === type) { | ||
if ("function" === typeof children.then) | ||
return mapIntoArray( | ||
resolveThenable(children), | ||
array, | ||
escapedPrefix, | ||
nameSoFar, | ||
callback | ||
); | ||
array = String(children); | ||
throw Error( | ||
"Objects are not valid as a React child (found: " + | ||
("[object Object]" === array | ||
? "object with keys {" + Object.keys(children).join(", ") + "}" | ||
: array) + | ||
"). If you meant to render a collection of children, use an array instead." | ||
); | ||
} | ||
let child; | ||
let nextName; | ||
let subtreeCount = 0; // Count of children found in the current subtree. | ||
const nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR; | ||
if (isArray(children)) { | ||
for (let i = 0; i < children.length; i++) { | ||
child = children[i]; | ||
nextName = nextNamePrefix + getElementKey(child, i); | ||
subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback); | ||
} | ||
} else { | ||
const iteratorFn = getIteratorFn(children); | ||
if (typeof iteratorFn === 'function') { | ||
const iterableChildren = children; | ||
const iterator = iteratorFn.call(iterableChildren); | ||
let step; | ||
let ii = 0; // $FlowFixMe[incompatible-use] `iteratorFn` might return null according to typing. | ||
while (!(step = iterator.next()).done) { | ||
child = step.value; | ||
nextName = nextNamePrefix + getElementKey(child, ii++); | ||
subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback); | ||
} | ||
} else if (type === 'object') { | ||
if (typeof children.then === 'function') { | ||
return mapIntoArray(resolveThenable(children), array, escapedPrefix, nameSoFar, callback); | ||
} // eslint-disable-next-line react-internal/safe-string-coercion | ||
const 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.'); | ||
} | ||
} | ||
return subtreeCount; | ||
return invokeCallback; | ||
} | ||
/** | ||
* Maps children that are typically specified as `props.children`. | ||
* | ||
* See https://reactjs.org/docs/react-api.html#reactchildrenmap | ||
* | ||
* The provided mapFunction(child, index) will be called for each | ||
* 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) { | ||
// $FlowFixMe limitation refining abstract types in Flow | ||
return children; | ||
} | ||
const result = []; | ||
let count = 0; | ||
mapIntoArray(children, result, '', '', function (child) { | ||
if (null == children) return children; | ||
var result = [], | ||
count = 0; | ||
mapIntoArray(children, result, "", "", function (child) { | ||
return func.call(context, child, count++); | ||
@@ -708,493 +275,120 @@ }); | ||
} | ||
/** | ||
* 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) { | ||
let n = 0; | ||
mapChildren(children, () => { | ||
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, // $FlowFixMe[missing-this-annot] | ||
function () { | ||
forEachFunc.apply(this, arguments); // Don't return anything. | ||
}, forEachContext); | ||
} | ||
/** | ||
* 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) { | ||
return mapChildren(children, child => child) || []; | ||
} | ||
/** | ||
* 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)) { | ||
throw new Error('React.Children.only expected to receive a single React element child.'); | ||
} | ||
return children; | ||
} | ||
function createContext(defaultValue) { | ||
// TODO: Second argument used to be an optional `calculateChangedBits` | ||
// function. Warn to reserve for future use? | ||
const 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, | ||
Consumer: null | ||
}; | ||
{ | ||
context.Provider = context; | ||
context.Consumer = { | ||
$$typeof: REACT_CONSUMER_TYPE, | ||
_context: context | ||
}; | ||
} | ||
return context; | ||
} | ||
const Uninitialized = -1; | ||
const Pending = 0; | ||
const Resolved = 1; | ||
const Rejected = 2; | ||
function lazyInitializer(payload) { | ||
if (payload._status === Uninitialized) { | ||
const ctor = payload._result; | ||
const thenable = ctor(); // Transition to the next state. | ||
// 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. | ||
thenable.then(moduleObject => { | ||
if (payload._status === Pending || payload._status === Uninitialized) { | ||
// Transition to the next state. | ||
const resolved = payload; | ||
resolved._status = Resolved; | ||
resolved._result = moduleObject; | ||
if (-1 === payload._status) { | ||
var ctor = payload._result; | ||
ctor = ctor(); | ||
ctor.then( | ||
function (moduleObject) { | ||
if (0 === payload._status || -1 === payload._status) | ||
(payload._status = 1), (payload._result = moduleObject); | ||
}, | ||
function (error) { | ||
if (0 === payload._status || -1 === payload._status) | ||
(payload._status = 2), (payload._result = error); | ||
} | ||
}, error => { | ||
if (payload._status === Pending || payload._status === Uninitialized) { | ||
// Transition to the next state. | ||
const rejected = payload; | ||
rejected._status = Rejected; | ||
rejected._result = error; | ||
} | ||
}); | ||
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. | ||
const pending = payload; | ||
pending._status = Pending; | ||
pending._result = thenable; | ||
} | ||
); | ||
-1 === payload._status && ((payload._status = 0), (payload._result = ctor)); | ||
} | ||
if (payload._status === Resolved) { | ||
const moduleObject = payload._result; | ||
return moduleObject.default; | ||
} else { | ||
throw payload._result; | ||
} | ||
if (1 === payload._status) return payload._result.default; | ||
throw payload._result; | ||
} | ||
function lazy(ctor) { | ||
const payload = { | ||
// We use these fields to store the result. | ||
_status: Uninitialized, | ||
_result: ctor | ||
}; | ||
const lazyType = { | ||
$$typeof: REACT_LAZY_TYPE, | ||
_payload: payload, | ||
_init: lazyInitializer | ||
}; | ||
return lazyType; | ||
function useOptimistic(passthrough, reducer) { | ||
return ReactSharedInternals.H.useOptimistic(passthrough, reducer); | ||
} | ||
function forwardRef(render) { | ||
const elementType = { | ||
$$typeof: REACT_FORWARD_REF_TYPE, | ||
render | ||
}; | ||
return elementType; | ||
} | ||
function memo(type, compare) { | ||
const elementType = { | ||
$$typeof: REACT_MEMO_TYPE, | ||
type, | ||
compare: compare === undefined ? null : compare | ||
}; | ||
return elementType; | ||
} | ||
const UNTERMINATED = 0; | ||
const TERMINATED = 1; | ||
const ERRORED = 2; | ||
function createCacheRoot() { | ||
return new WeakMap(); | ||
} | ||
function createCacheNode() { | ||
return { | ||
s: UNTERMINATED, | ||
// status, represents whether the cached computation returned a value or threw an error | ||
v: undefined, | ||
// value, either the cached result or an error, depending on s | ||
o: null, | ||
// object cache, a WeakMap where non-primitive arguments are stored | ||
p: null // primitive cache, a regular Map where primitive arguments are stored. | ||
}; | ||
} | ||
function cache$1(fn) { | ||
return function () { | ||
const dispatcher = ReactSharedInternals.C; | ||
if (!dispatcher) { | ||
// If there is no dispatcher, then we treat this as not being cached. | ||
// $FlowFixMe[incompatible-call]: We don't want to use rest arguments since we transpile the code. | ||
return fn.apply(null, arguments); | ||
} | ||
const fnMap = dispatcher.getCacheForType(createCacheRoot); | ||
const fnNode = fnMap.get(fn); | ||
let cacheNode; | ||
if (fnNode === undefined) { | ||
cacheNode = createCacheNode(); | ||
fnMap.set(fn, cacheNode); | ||
} else { | ||
cacheNode = fnNode; | ||
} | ||
for (let i = 0, l = arguments.length; i < l; i++) { | ||
const arg = arguments[i]; | ||
if (typeof arg === 'function' || typeof arg === 'object' && arg !== null) { | ||
// Objects go into a WeakMap | ||
let objectCache = cacheNode.o; | ||
if (objectCache === null) { | ||
cacheNode.o = objectCache = new WeakMap(); | ||
var reportGlobalError = | ||
"function" === typeof reportError | ||
? reportError | ||
: function (error) { | ||
if ( | ||
"object" === typeof window && | ||
"function" === typeof window.ErrorEvent | ||
) { | ||
var event = new window.ErrorEvent("error", { | ||
bubbles: !0, | ||
cancelable: !0, | ||
message: | ||
"object" === typeof error && | ||
null !== error && | ||
"string" === typeof error.message | ||
? String(error.message) | ||
: String(error), | ||
error: error | ||
}); | ||
if (!window.dispatchEvent(event)) return; | ||
} else if ( | ||
"object" === typeof process && | ||
"function" === typeof process.emit | ||
) { | ||
process.emit("uncaughtException", error); | ||
return; | ||
} | ||
const objectNode = objectCache.get(arg); | ||
if (objectNode === undefined) { | ||
cacheNode = createCacheNode(); | ||
objectCache.set(arg, cacheNode); | ||
} else { | ||
cacheNode = objectNode; | ||
} | ||
} else { | ||
// Primitives go into a regular Map | ||
let primitiveCache = cacheNode.p; | ||
if (primitiveCache === null) { | ||
cacheNode.p = primitiveCache = new Map(); | ||
} | ||
const primitiveNode = primitiveCache.get(arg); | ||
if (primitiveNode === undefined) { | ||
cacheNode = createCacheNode(); | ||
primitiveCache.set(arg, cacheNode); | ||
} else { | ||
cacheNode = primitiveNode; | ||
} | ||
} | ||
} | ||
if (cacheNode.s === TERMINATED) { | ||
return cacheNode.v; | ||
} | ||
if (cacheNode.s === ERRORED) { | ||
throw cacheNode.v; | ||
} | ||
try { | ||
// $FlowFixMe[incompatible-call]: We don't want to use rest arguments since we transpile the code. | ||
const result = fn.apply(null, arguments); | ||
const terminatedNode = cacheNode; | ||
terminatedNode.s = TERMINATED; | ||
terminatedNode.v = result; | ||
return result; | ||
} catch (error) { | ||
// We store the first error that's thrown and rethrow it. | ||
const erroredNode = cacheNode; | ||
erroredNode.s = ERRORED; | ||
erroredNode.v = error; | ||
throw error; | ||
} | ||
}; | ||
} | ||
const cache = cache$1; | ||
function postpone(reason) { | ||
// eslint-disable-next-line react-internal/prod-error-codes | ||
const postponeInstance = new Error(reason); | ||
postponeInstance.$$typeof = REACT_POSTPONE_TYPE; | ||
throw postponeInstance; | ||
} | ||
function resolveDispatcher() { | ||
const dispatcher = ReactSharedInternals.H; | ||
// intentionally don't throw our own error because this is in a hot path. | ||
// Also helps ensure this is inlined. | ||
return dispatcher; | ||
} | ||
function getCacheForType(resourceType) { | ||
const dispatcher = ReactSharedInternals.C; | ||
if (!dispatcher) { | ||
// If there is no dispatcher, then we treat this as not being cached. | ||
return resourceType(); | ||
console.error(error); | ||
}; | ||
function startTransition(scope) { | ||
var prevTransition = ReactSharedInternals.T, | ||
currentTransition = {}; | ||
currentTransition.types = | ||
null !== prevTransition ? prevTransition.types : null; | ||
currentTransition.gesture = null; | ||
ReactSharedInternals.T = currentTransition; | ||
try { | ||
var returnValue = scope(), | ||
onStartTransitionFinish = ReactSharedInternals.S; | ||
null !== onStartTransitionFinish && | ||
onStartTransitionFinish(currentTransition, returnValue); | ||
"object" === typeof returnValue && | ||
null !== returnValue && | ||
"function" === typeof returnValue.then && | ||
returnValue.then(noop, reportGlobalError); | ||
} catch (error) { | ||
reportGlobalError(error); | ||
} finally { | ||
null !== prevTransition && | ||
null !== currentTransition.types && | ||
(prevTransition.types = currentTransition.types), | ||
(ReactSharedInternals.T = prevTransition); | ||
} | ||
return dispatcher.getCacheForType(resourceType); | ||
} | ||
function useContext(Context) { | ||
const dispatcher = resolveDispatcher(); | ||
return dispatcher.useContext(Context); | ||
function addTransitionType(type) { | ||
var transition = ReactSharedInternals.T; | ||
if (null !== transition) { | ||
var transitionTypes = transition.types; | ||
null === transitionTypes | ||
? (transition.types = [type]) | ||
: -1 === transitionTypes.indexOf(type) && transitionTypes.push(type); | ||
} else startTransition(addTransitionType.bind(null, type)); | ||
} | ||
function useState(initialState) { | ||
const dispatcher = resolveDispatcher(); | ||
return dispatcher.useState(initialState); | ||
} | ||
function useReducer(reducer, initialArg, init) { | ||
const dispatcher = resolveDispatcher(); | ||
return dispatcher.useReducer(reducer, initialArg, init); | ||
} | ||
function useRef(initialValue) { | ||
const dispatcher = resolveDispatcher(); | ||
return dispatcher.useRef(initialValue); | ||
} | ||
function useEffect(create, deps) { | ||
const dispatcher = resolveDispatcher(); | ||
return dispatcher.useEffect(create, deps); | ||
} | ||
function useInsertionEffect(create, deps) { | ||
const dispatcher = resolveDispatcher(); | ||
return dispatcher.useInsertionEffect(create, deps); | ||
} | ||
function useLayoutEffect(create, deps) { | ||
const dispatcher = resolveDispatcher(); | ||
return dispatcher.useLayoutEffect(create, deps); | ||
} | ||
function useCallback(callback, deps) { | ||
const dispatcher = resolveDispatcher(); | ||
return dispatcher.useCallback(callback, deps); | ||
} | ||
function useMemo(create, deps) { | ||
const dispatcher = resolveDispatcher(); | ||
return dispatcher.useMemo(create, deps); | ||
} | ||
function useImperativeHandle(ref, create, deps) { | ||
const dispatcher = resolveDispatcher(); | ||
return dispatcher.useImperativeHandle(ref, create, deps); | ||
} | ||
function useDebugValue(value, formatterFn) { | ||
} | ||
function useTransition() { | ||
const dispatcher = resolveDispatcher(); | ||
return dispatcher.useTransition(); | ||
} | ||
function useDeferredValue(value, initialValue) { | ||
const dispatcher = resolveDispatcher(); | ||
return dispatcher.useDeferredValue(value, initialValue); | ||
} | ||
function useId() { | ||
const dispatcher = resolveDispatcher(); | ||
return dispatcher.useId(); | ||
} | ||
function useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) { | ||
const dispatcher = resolveDispatcher(); | ||
return dispatcher.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot); | ||
} | ||
function useCacheRefresh() { | ||
const dispatcher = resolveDispatcher(); // $FlowFixMe[not-a-function] This is unstable, thus optional | ||
return dispatcher.useCacheRefresh(); | ||
} | ||
function use(usable) { | ||
const dispatcher = resolveDispatcher(); | ||
return dispatcher.use(usable); | ||
} | ||
function useMemoCache(size) { | ||
const dispatcher = resolveDispatcher(); // $FlowFixMe[not-a-function] This is unstable, thus optional | ||
return dispatcher.useMemoCache(size); | ||
} | ||
function useEffectEvent(callback) { | ||
const dispatcher = resolveDispatcher(); // $FlowFixMe[not-a-function] This is unstable, thus optional | ||
return dispatcher.useEffectEvent(callback); | ||
} | ||
function useOptimistic(passthrough, reducer) { | ||
const dispatcher = resolveDispatcher(); // $FlowFixMe[not-a-function] This is unstable, thus optional | ||
return dispatcher.useOptimistic(passthrough, reducer); | ||
} | ||
function useActionState(action, initialState, permalink) { | ||
{ | ||
const dispatcher = resolveDispatcher(); // $FlowFixMe[not-a-function] This is unstable, thus optional | ||
return dispatcher.useActionState(action, initialState, permalink); | ||
} | ||
} | ||
const reportGlobalError = typeof reportError === 'function' ? // In modern browsers, reportError will dispatch an error event, | ||
// emulating an uncaught JavaScript error. | ||
reportError : error => { | ||
if (typeof window === 'object' && typeof window.ErrorEvent === 'function') { | ||
// Browser Polyfill | ||
const message = typeof error === 'object' && error !== null && typeof error.message === 'string' ? // eslint-disable-next-line react-internal/safe-string-coercion | ||
String(error.message) : // eslint-disable-next-line react-internal/safe-string-coercion | ||
String(error); | ||
const event = new window.ErrorEvent('error', { | ||
bubbles: true, | ||
cancelable: true, | ||
message: message, | ||
error: error | ||
exports.Children = { | ||
map: mapChildren, | ||
forEach: function (children, forEachFunc, forEachContext) { | ||
mapChildren( | ||
children, | ||
function () { | ||
forEachFunc.apply(this, arguments); | ||
}, | ||
forEachContext | ||
); | ||
}, | ||
count: function (children) { | ||
var n = 0; | ||
mapChildren(children, function () { | ||
n++; | ||
}); | ||
const shouldLog = window.dispatchEvent(event); | ||
if (!shouldLog) { | ||
return; | ||
} | ||
} else if (typeof process === 'object' && // $FlowFixMe[method-unbinding] | ||
typeof process.emit === 'function') { | ||
// Node Polyfill | ||
process.emit('uncaughtException', error); | ||
return; | ||
} // eslint-disable-next-line react-internal/no-production-logging | ||
console['error'](error); | ||
}; | ||
function startTransition(scope, options) { | ||
const prevTransition = ReactSharedInternals.T; // Each renderer registers a callback to receive the return value of | ||
// the scope function. This is used to implement async actions. | ||
const callbacks = new Set(); | ||
const transition = { | ||
_callbacks: callbacks | ||
}; | ||
ReactSharedInternals.T = transition; | ||
const currentTransition = ReactSharedInternals.T; | ||
{ | ||
try { | ||
const returnValue = scope(); | ||
if (typeof returnValue === 'object' && returnValue !== null && typeof returnValue.then === 'function') { | ||
callbacks.forEach(callback => callback(currentTransition, returnValue)); | ||
returnValue.then(noop, reportGlobalError); | ||
} | ||
} catch (error) { | ||
reportGlobalError(error); | ||
} finally { | ||
ReactSharedInternals.T = prevTransition; | ||
} | ||
return n; | ||
}, | ||
toArray: function (children) { | ||
return ( | ||
mapChildren(children, function (child) { | ||
return child; | ||
}) || [] | ||
); | ||
}, | ||
only: function (children) { | ||
if (!isValidElement(children)) | ||
throw Error( | ||
"React.Children.only expected to receive a single React element child." | ||
); | ||
return children; | ||
} | ||
} | ||
function noop() {} | ||
function act(callback) { | ||
{ | ||
throw new Error('act(...) is not supported in production builds of React.'); | ||
} | ||
} | ||
const Children = { | ||
map: mapChildren, | ||
forEach: forEachChildren, | ||
count: countChildren, | ||
toArray, | ||
only: onlyChild | ||
}; | ||
function experimental_useOptimistic(passthrough, reducer) { | ||
return useOptimistic(passthrough, reducer); | ||
} | ||
exports.Children = Children; | ||
exports.Component = Component; | ||
@@ -1206,41 +400,212 @@ exports.Fragment = REACT_FRAGMENT_TYPE; | ||
exports.Suspense = REACT_SUSPENSE_TYPE; | ||
exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = ReactSharedInternals; | ||
exports.act = act; | ||
exports.cache = cache; | ||
exports.cloneElement = cloneElement; | ||
exports.createContext = createContext; | ||
exports.createElement = createElement; | ||
exports.createRef = createRef; | ||
exports.experimental_useEffectEvent = useEffectEvent; | ||
exports.experimental_useOptimistic = experimental_useOptimistic; | ||
exports.forwardRef = forwardRef; | ||
exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = | ||
ReactSharedInternals; | ||
exports.__COMPILER_RUNTIME = { | ||
__proto__: null, | ||
c: function (size) { | ||
return ReactSharedInternals.H.useMemoCache(size); | ||
} | ||
}; | ||
exports.cache = function (fn) { | ||
return function () { | ||
return fn.apply(null, arguments); | ||
}; | ||
}; | ||
exports.cacheSignal = function () { | ||
return null; | ||
}; | ||
exports.cloneElement = function (element, config, children) { | ||
if (null === element || void 0 === element) | ||
throw Error( | ||
"The argument must be a React element, but you passed " + element + "." | ||
); | ||
var props = assign({}, element.props), | ||
key = element.key, | ||
owner = void 0; | ||
if (null != config) | ||
for (propName in (void 0 !== config.ref && (owner = void 0), | ||
void 0 !== config.key && (key = "" + config.key), | ||
config)) | ||
!hasOwnProperty.call(config, propName) || | ||
"key" === propName || | ||
"__self" === propName || | ||
"__source" === propName || | ||
("ref" === propName && void 0 === config.ref) || | ||
(props[propName] = config[propName]); | ||
var propName = arguments.length - 2; | ||
if (1 === propName) props.children = children; | ||
else if (1 < propName) { | ||
for (var childArray = Array(propName), i = 0; i < propName; i++) | ||
childArray[i] = arguments[i + 2]; | ||
props.children = childArray; | ||
} | ||
return ReactElement(element.type, key, void 0, void 0, owner, props); | ||
}; | ||
exports.createContext = function (defaultValue) { | ||
defaultValue = { | ||
$$typeof: REACT_CONTEXT_TYPE, | ||
_currentValue: defaultValue, | ||
_currentValue2: defaultValue, | ||
_threadCount: 0, | ||
Provider: null, | ||
Consumer: null | ||
}; | ||
defaultValue.Provider = defaultValue; | ||
defaultValue.Consumer = { | ||
$$typeof: REACT_CONSUMER_TYPE, | ||
_context: defaultValue | ||
}; | ||
return defaultValue; | ||
}; | ||
exports.createElement = function (type, config, children) { | ||
var propName, | ||
props = {}, | ||
key = null; | ||
if (null != config) | ||
for (propName in (void 0 !== config.key && (key = "" + config.key), config)) | ||
hasOwnProperty.call(config, propName) && | ||
"key" !== propName && | ||
"__self" !== propName && | ||
"__source" !== propName && | ||
(props[propName] = config[propName]); | ||
var childrenLength = arguments.length - 2; | ||
if (1 === childrenLength) props.children = children; | ||
else if (1 < childrenLength) { | ||
for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++) | ||
childArray[i] = arguments[i + 2]; | ||
props.children = childArray; | ||
} | ||
if (type && type.defaultProps) | ||
for (propName in ((childrenLength = type.defaultProps), childrenLength)) | ||
void 0 === props[propName] && | ||
(props[propName] = childrenLength[propName]); | ||
return ReactElement(type, key, void 0, void 0, null, props); | ||
}; | ||
exports.createRef = function () { | ||
return { current: null }; | ||
}; | ||
exports.experimental_useEffectEvent = function (callback) { | ||
return ReactSharedInternals.H.useEffectEvent(callback); | ||
}; | ||
exports.experimental_useOptimistic = function (passthrough, reducer) { | ||
return useOptimistic(passthrough, reducer); | ||
}; | ||
exports.forwardRef = function (render) { | ||
return { $$typeof: REACT_FORWARD_REF_TYPE, render: render }; | ||
}; | ||
exports.isValidElement = isValidElement; | ||
exports.lazy = lazy; | ||
exports.memo = memo; | ||
exports.lazy = function (ctor) { | ||
return { | ||
$$typeof: REACT_LAZY_TYPE, | ||
_payload: { _status: -1, _result: ctor }, | ||
_init: lazyInitializer | ||
}; | ||
}; | ||
exports.memo = function (type, compare) { | ||
return { | ||
$$typeof: REACT_MEMO_TYPE, | ||
type: type, | ||
compare: void 0 === compare ? null : compare | ||
}; | ||
}; | ||
exports.startTransition = startTransition; | ||
exports.unstable_Activity = REACT_OFFSCREEN_TYPE; | ||
exports.unstable_DebugTracingMode = REACT_DEBUG_TRACING_MODE_TYPE; | ||
exports.unstable_Activity = REACT_ACTIVITY_TYPE; | ||
exports.unstable_SuspenseList = REACT_SUSPENSE_LIST_TYPE; | ||
exports.unstable_getCacheForType = getCacheForType; | ||
exports.unstable_postpone = postpone; | ||
exports.unstable_useCacheRefresh = useCacheRefresh; | ||
exports.unstable_useMemoCache = useMemoCache; | ||
exports.use = use; | ||
exports.useActionState = useActionState; | ||
exports.useCallback = useCallback; | ||
exports.useContext = useContext; | ||
exports.useDebugValue = useDebugValue; | ||
exports.useDeferredValue = useDeferredValue; | ||
exports.useEffect = useEffect; | ||
exports.useId = useId; | ||
exports.useImperativeHandle = useImperativeHandle; | ||
exports.useInsertionEffect = useInsertionEffect; | ||
exports.useLayoutEffect = useLayoutEffect; | ||
exports.useMemo = useMemo; | ||
exports.unstable_ViewTransition = REACT_VIEW_TRANSITION_TYPE; | ||
exports.unstable_addTransitionType = addTransitionType; | ||
exports.unstable_getCacheForType = function (resourceType) { | ||
var dispatcher = ReactSharedInternals.A; | ||
return dispatcher ? dispatcher.getCacheForType(resourceType) : resourceType(); | ||
}; | ||
exports.unstable_postpone = function (reason) { | ||
reason = Error(reason); | ||
reason.$$typeof = REACT_POSTPONE_TYPE; | ||
throw reason; | ||
}; | ||
exports.unstable_startGestureTransition = function (provider, scope, options) { | ||
if (null == provider) | ||
throw Error( | ||
"A Timeline is required as the first argument to startGestureTransition." | ||
); | ||
var prevTransition = ReactSharedInternals.T, | ||
currentTransition = { types: null }; | ||
currentTransition.gesture = provider; | ||
ReactSharedInternals.T = currentTransition; | ||
try { | ||
scope(); | ||
var onStartGestureTransitionFinish = ReactSharedInternals.G; | ||
if (null !== onStartGestureTransitionFinish) | ||
return onStartGestureTransitionFinish( | ||
currentTransition, | ||
provider, | ||
options | ||
); | ||
} catch (error) { | ||
reportGlobalError(error); | ||
} finally { | ||
ReactSharedInternals.T = prevTransition; | ||
} | ||
return noop; | ||
}; | ||
exports.unstable_useCacheRefresh = function () { | ||
return ReactSharedInternals.H.useCacheRefresh(); | ||
}; | ||
exports.use = function (usable) { | ||
return ReactSharedInternals.H.use(usable); | ||
}; | ||
exports.useActionState = function (action, initialState, permalink) { | ||
return ReactSharedInternals.H.useActionState(action, initialState, permalink); | ||
}; | ||
exports.useCallback = function (callback, deps) { | ||
return ReactSharedInternals.H.useCallback(callback, deps); | ||
}; | ||
exports.useContext = function (Context) { | ||
return ReactSharedInternals.H.useContext(Context); | ||
}; | ||
exports.useDebugValue = function () {}; | ||
exports.useDeferredValue = function (value, initialValue) { | ||
return ReactSharedInternals.H.useDeferredValue(value, initialValue); | ||
}; | ||
exports.useEffect = function (create, deps) { | ||
return ReactSharedInternals.H.useEffect(create, deps); | ||
}; | ||
exports.useId = function () { | ||
return ReactSharedInternals.H.useId(); | ||
}; | ||
exports.useImperativeHandle = function (ref, create, deps) { | ||
return ReactSharedInternals.H.useImperativeHandle(ref, create, deps); | ||
}; | ||
exports.useInsertionEffect = function (create, deps) { | ||
return ReactSharedInternals.H.useInsertionEffect(create, deps); | ||
}; | ||
exports.useLayoutEffect = function (create, deps) { | ||
return ReactSharedInternals.H.useLayoutEffect(create, deps); | ||
}; | ||
exports.useMemo = function (create, deps) { | ||
return ReactSharedInternals.H.useMemo(create, deps); | ||
}; | ||
exports.useOptimistic = useOptimistic; | ||
exports.useReducer = useReducer; | ||
exports.useRef = useRef; | ||
exports.useState = useState; | ||
exports.useSyncExternalStore = useSyncExternalStore; | ||
exports.useTransition = useTransition; | ||
exports.version = ReactVersion; | ||
exports.useReducer = function (reducer, initialArg, init) { | ||
return ReactSharedInternals.H.useReducer(reducer, initialArg, init); | ||
}; | ||
exports.useRef = function (initialValue) { | ||
return ReactSharedInternals.H.useRef(initialValue); | ||
}; | ||
exports.useState = function (initialState) { | ||
return ReactSharedInternals.H.useState(initialState); | ||
}; | ||
exports.useSyncExternalStore = function ( | ||
subscribe, | ||
getSnapshot, | ||
getServerSnapshot | ||
) { | ||
return ReactSharedInternals.H.useSyncExternalStore( | ||
subscribe, | ||
getSnapshot, | ||
getServerSnapshot | ||
); | ||
}; | ||
exports.useTransition = function () { | ||
return ReactSharedInternals.H.useTransition(); | ||
}; | ||
exports.version = "19.2.0-experimental-96c61b7f-20250709"; |
/** | ||
* @license React | ||
* react.react-server.production.min.js | ||
* react.react-server.production.js | ||
* | ||
@@ -11,672 +11,244 @@ * Copyright (c) Meta Platforms, Inc. and affiliates. | ||
'use strict'; | ||
const assign = Object.assign; | ||
// ----------------------------------------------------------------------------- | ||
// as a normal prop instead of stripping it from the props object. | ||
// Passes `ref` as a normal prop instead of stripping it from the props object | ||
// during element creation. | ||
const enableRefAsProp = true; | ||
const TaintRegistryObjects$1 = new WeakMap(); | ||
const TaintRegistryValues$1 = new Map(); // Byte lengths of all binary values we've ever seen. We don't both refcounting this. | ||
// We expect to see only a few lengths here such as the length of token. | ||
const TaintRegistryByteLengths$1 = new Set(); // When a value is finalized, it means that it has been removed from any global caches. | ||
// No future requests can get a handle on it but any ongoing requests can still have | ||
// a handle on it. It's still tainted until that happens. | ||
const TaintRegistryPendingRequests$1 = new Set(); | ||
const ReactSharedInternals = { | ||
H: null, | ||
C: null | ||
}; | ||
{ | ||
ReactSharedInternals.TaintRegistryObjects = TaintRegistryObjects$1; | ||
ReactSharedInternals.TaintRegistryValues = TaintRegistryValues$1; | ||
ReactSharedInternals.TaintRegistryByteLengths = TaintRegistryByteLengths$1; | ||
ReactSharedInternals.TaintRegistryPendingRequests = TaintRegistryPendingRequests$1; | ||
} | ||
function createFetchCache() { | ||
return new Map(); | ||
} | ||
const simpleCacheKey = '["GET",[],null,"follow",null,null,null,null]'; // generateCacheKey(new Request('https://blank')); | ||
function generateCacheKey(request) { | ||
// We pick the fields that goes into the key used to dedupe requests. | ||
// We don't include the `cache` field, because we end up using whatever | ||
// caching resulted from the first request. | ||
// Notably we currently don't consider non-standard (or future) options. | ||
// This might not be safe. TODO: warn for non-standard extensions differing. | ||
// IF YOU CHANGE THIS UPDATE THE simpleCacheKey ABOVE. | ||
return JSON.stringify([request.method, Array.from(request.headers.entries()), request.mode, request.redirect, request.credentials, request.referrer, request.referrerPolicy, request.integrity]); | ||
} | ||
{ | ||
if (typeof fetch === 'function') { | ||
const originalFetch = fetch; | ||
const cachedFetch = function fetch(resource, options) { | ||
const dispatcher = ReactSharedInternals.C; | ||
if (!dispatcher) { | ||
// We're outside a cached scope. | ||
return originalFetch(resource, options); | ||
} | ||
if (options && options.signal) { | ||
// If we're passed a signal, then we assume that | ||
// someone else controls the lifetime of this object and opts out of | ||
// caching. It's effectively the opt-out mechanism. | ||
// Ideally we should be able to check this on the Request but | ||
// it always gets initialized with its own signal so we don't | ||
// know if it's supposed to override - unless we also override the | ||
// Request constructor. | ||
return originalFetch(resource, options); | ||
} // Normalize the Request | ||
let url; | ||
let cacheKey; | ||
if (typeof resource === 'string' && !options) { | ||
// Fast path. | ||
cacheKey = simpleCacheKey; | ||
url = resource; | ||
} else { | ||
// Normalize the request. | ||
// if resource is not a string or a URL (its an instance of Request) | ||
// then do not instantiate a new Request but instead | ||
// reuse the request as to not disturb the body in the event it's a ReadableStream. | ||
const request = typeof resource === 'string' || resource instanceof URL ? new Request(resource, options) : resource; | ||
if (request.method !== 'GET' && request.method !== 'HEAD' || // $FlowFixMe[prop-missing]: keepalive is real | ||
request.keepalive) { | ||
// We currently don't dedupe requests that might have side-effects. Those | ||
// have to be explicitly cached. We assume that the request doesn't have a | ||
// body if it's GET or HEAD. | ||
// keepalive gets treated the same as if you passed a custom cache signal. | ||
return originalFetch(resource, options); | ||
} | ||
cacheKey = generateCacheKey(request); | ||
url = request.url; | ||
} | ||
const cache = dispatcher.getCacheForType(createFetchCache); | ||
const cacheEntries = cache.get(url); | ||
let match; | ||
if (cacheEntries === undefined) { | ||
// We pass the original arguments here in case normalizing the Request | ||
// doesn't include all the options in this environment. | ||
match = originalFetch(resource, options); | ||
cache.set(url, [cacheKey, match]); | ||
} else { | ||
// We use an array as the inner data structure since it's lighter and | ||
// we typically only expect to see one or two entries here. | ||
for (let i = 0, l = cacheEntries.length; i < l; i += 2) { | ||
const key = cacheEntries[i]; | ||
const value = cacheEntries[i + 1]; | ||
if (key === cacheKey) { | ||
match = value; // I would've preferred a labelled break but lint says no. | ||
return match.then(response => response.clone()); | ||
} | ||
} | ||
match = originalFetch(resource, options); | ||
cacheEntries.push(cacheKey, match); | ||
} // We clone the response so that each time you call this you get a new read | ||
// of the body so that it can be read multiple times. | ||
return match.then(response => response.clone()); | ||
}; // We don't expect to see any extra properties on fetch but if there are any, | ||
// copy them over. Useful for extended fetch environments or mocks. | ||
assign(cachedFetch, originalFetch); | ||
try { | ||
// eslint-disable-next-line no-native-reassign | ||
fetch = cachedFetch; | ||
} catch (error1) { | ||
try { | ||
// In case assigning it globally fails, try globalThis instead just in case it exists. | ||
globalThis.fetch = cachedFetch; | ||
} catch (error2) { | ||
// Log even in production just to make sure this is seen if only prod is frozen. | ||
// eslint-disable-next-line react-internal/no-production-logging | ||
console.warn('React was unable to patch the fetch() function in this environment. ' + 'Suspensey APIs might not work correctly as a result.'); | ||
} | ||
} | ||
} | ||
} | ||
// Do not require this module directly! Use normal `invariant` calls with | ||
// template literal strings. The messages will be replaced with error codes | ||
// during build. | ||
"use strict"; | ||
var TaintRegistryObjects$1 = new WeakMap(), | ||
TaintRegistryValues$1 = new Map(), | ||
TaintRegistryByteLengths$1 = new Set(), | ||
TaintRegistryPendingRequests$1 = new Set(), | ||
ReactSharedInternals = { | ||
H: null, | ||
A: null, | ||
TaintRegistryObjects: TaintRegistryObjects$1, | ||
TaintRegistryValues: TaintRegistryValues$1, | ||
TaintRegistryByteLengths: TaintRegistryByteLengths$1, | ||
TaintRegistryPendingRequests: TaintRegistryPendingRequests$1 | ||
}; | ||
function formatProdErrorMessage(code) { | ||
let url = 'https://react.dev/errors/' + code; | ||
if (arguments.length > 1) { | ||
url += '?args[]=' + encodeURIComponent(arguments[1]); | ||
for (let i = 2; i < arguments.length; i++) { | ||
url += '&args[]=' + encodeURIComponent(arguments[i]); | ||
} | ||
var url = "https://react.dev/errors/" + code; | ||
if (1 < arguments.length) { | ||
url += "?args[]=" + encodeURIComponent(arguments[1]); | ||
for (var i = 2; i < arguments.length; i++) | ||
url += "&args[]=" + encodeURIComponent(arguments[i]); | ||
} | ||
return "Minified React error #" + code + "; visit " + url + " for the full message or " + 'use the non-minified dev environment for full errors and additional ' + 'helpful warnings.'; | ||
return ( | ||
"Minified React error #" + | ||
code + | ||
"; visit " + | ||
url + | ||
" for the full message or use the non-minified dev environment for full errors and additional helpful warnings." | ||
); | ||
} | ||
const isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare | ||
function isArray(a) { | ||
return isArrayImpl(a); | ||
} | ||
// ATTENTION | ||
// When adding new symbols to this file, | ||
// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols' | ||
// The Symbol used to tag the ReactElement-like types. | ||
const REACT_ELEMENT_TYPE = Symbol.for('react.element'); | ||
const REACT_PORTAL_TYPE = Symbol.for('react.portal'); | ||
const REACT_FRAGMENT_TYPE = Symbol.for('react.fragment'); | ||
const REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode'); | ||
const REACT_PROFILER_TYPE = Symbol.for('react.profiler'); | ||
const REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref'); | ||
const REACT_SUSPENSE_TYPE = Symbol.for('react.suspense'); | ||
const REACT_MEMO_TYPE = Symbol.for('react.memo'); | ||
const REACT_LAZY_TYPE = Symbol.for('react.lazy'); | ||
const REACT_DEBUG_TRACING_MODE_TYPE = Symbol.for('react.debug_trace_mode'); | ||
const REACT_POSTPONE_TYPE = Symbol.for('react.postpone'); | ||
const MAYBE_ITERATOR_SYMBOL = Symbol.iterator; | ||
const FAUX_ITERATOR_SYMBOL = '@@iterator'; | ||
var isArrayImpl = Array.isArray; | ||
function noop() {} | ||
var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), | ||
REACT_PORTAL_TYPE = Symbol.for("react.portal"), | ||
REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), | ||
REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), | ||
REACT_PROFILER_TYPE = Symbol.for("react.profiler"), | ||
REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), | ||
REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), | ||
REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), | ||
REACT_MEMO_TYPE = Symbol.for("react.memo"), | ||
REACT_LAZY_TYPE = Symbol.for("react.lazy"), | ||
REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), | ||
REACT_POSTPONE_TYPE = Symbol.for("react.postpone"), | ||
REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"), | ||
MAYBE_ITERATOR_SYMBOL = Symbol.iterator; | ||
function getIteratorFn(maybeIterable) { | ||
if (maybeIterable === null || typeof maybeIterable !== 'object') { | ||
return null; | ||
} | ||
const maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]; | ||
if (typeof maybeIterator === 'function') { | ||
return maybeIterator; | ||
} | ||
return null; | ||
if (null === maybeIterable || "object" !== typeof maybeIterable) return null; | ||
maybeIterable = | ||
(MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) || | ||
maybeIterable["@@iterator"]; | ||
return "function" === typeof maybeIterable ? maybeIterable : null; | ||
} | ||
// $FlowFixMe[method-unbinding] | ||
const hasOwnProperty = Object.prototype.hasOwnProperty; | ||
function hasValidRef(config) { | ||
return config.ref !== undefined; | ||
var hasOwnProperty = Object.prototype.hasOwnProperty, | ||
assign = Object.assign; | ||
function ReactElement(type, key, self, source, owner, props) { | ||
self = props.ref; | ||
return { | ||
$$typeof: REACT_ELEMENT_TYPE, | ||
type: type, | ||
key: key, | ||
ref: void 0 !== self ? self : null, | ||
props: props | ||
}; | ||
} | ||
function hasValidKey(config) { | ||
return config.key !== undefined; | ||
} | ||
/** | ||
* 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 | ||
*/ | ||
function ReactElement(type, key, _ref, self, source, owner, props) { | ||
let ref; | ||
{ | ||
// When enableRefAsProp is on, ignore whatever was passed as the ref | ||
// argument and treat `props.ref` as the source of truth. The only thing we | ||
// use this for is `element.ref`, which will log a deprecation warning on | ||
// access. In the next release, we can remove `element.ref` as well as the | ||
// `ref` argument. | ||
const refProp = props.ref; // An undefined `element.ref` is coerced to `null` for | ||
// backwards compatibility. | ||
ref = refProp !== undefined ? refProp : null; | ||
} | ||
let element; | ||
{ | ||
// In prod, `ref` is a regular property and _owner doesn't exist. | ||
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, | ||
key, | ||
ref, | ||
props | ||
}; | ||
} | ||
return element; | ||
} | ||
/** | ||
* Create and return a new ReactElement of the given type. | ||
* See https://reactjs.org/docs/react-api.html#createelement | ||
*/ | ||
function createElement(type, config, children) { | ||
let propName; // Reserved names are extracted | ||
const props = {}; | ||
let key = null; | ||
let ref = null; | ||
if (config != null) { | ||
if (hasValidKey(config)) { | ||
key = '' + config.key; | ||
} // Remaining properties are added to a new props object | ||
for (propName in config) { | ||
if (hasOwnProperty.call(config, propName) && // Skip over reserved prop names | ||
propName !== 'key' && (enableRefAsProp ) && // Even though we don't use these anymore in the runtime, we don't want | ||
// them to appear as props, so in createElement we filter them out. | ||
// We don't have to do this in the jsx() runtime because the jsx() | ||
// transform never passed these as props; it used separate arguments. | ||
propName !== '__self' && propName !== '__source') { | ||
{ | ||
props[propName] = config[propName]; | ||
} | ||
} | ||
} | ||
} // Children can be more than one argument, and those are transferred onto | ||
// the newly allocated props object. | ||
const childrenLength = arguments.length - 2; | ||
if (childrenLength === 1) { | ||
props.children = children; | ||
} else if (childrenLength > 1) { | ||
const childArray = Array(childrenLength); | ||
for (let i = 0; i < childrenLength; i++) { | ||
childArray[i] = arguments[i + 2]; | ||
} | ||
props.children = childArray; | ||
} // Resolve default props | ||
if (type && type.defaultProps) { | ||
const defaultProps = type.defaultProps; | ||
for (propName in defaultProps) { | ||
if (props[propName] === undefined) { | ||
props[propName] = defaultProps[propName]; | ||
} | ||
} | ||
} | ||
const element = ReactElement(type, key, ref, undefined, undefined, ReactSharedInternals.owner, props); | ||
return element; | ||
} | ||
function cloneAndReplaceKey(oldElement, newKey) { | ||
return ReactElement(oldElement.type, newKey, // When enableRefAsProp is on, this argument is ignored. This check only | ||
// exists to avoid the `ref` access warning. | ||
null , undefined, undefined, undefined , oldElement.props); | ||
return ReactElement( | ||
oldElement.type, | ||
newKey, | ||
void 0, | ||
void 0, | ||
void 0, | ||
oldElement.props | ||
); | ||
} | ||
/** | ||
* Clone and return a new ReactElement using element as the starting point. | ||
* See https://reactjs.org/docs/react-api.html#cloneelement | ||
*/ | ||
function cloneElement(element, config, children) { | ||
if (element === null || element === undefined) { | ||
throw Error(formatProdErrorMessage(267, element)); | ||
} | ||
let propName; // Original props are copied | ||
const props = assign({}, element.props); // Reserved names are extracted | ||
let key = element.key; | ||
let ref = null ; // Owner will be preserved, unless ref is overridden | ||
let owner = undefined ; | ||
if (config != null) { | ||
if (hasValidRef(config)) { | ||
owner = ReactSharedInternals.owner; | ||
} | ||
if (hasValidKey(config)) { | ||
key = '' + config.key; | ||
} // Remaining properties override existing props | ||
for (propName in config) { | ||
if (hasOwnProperty.call(config, propName) && // Skip over reserved prop names | ||
propName !== 'key' && (enableRefAsProp ) && // ...and maybe these, too, though we currently rely on them for | ||
// warnings and debug information in dev. Need to decide if we're OK | ||
// with dropping them. In the jsx() runtime it's not an issue because | ||
// the data gets passed as separate arguments instead of props, but | ||
// it would be nice to stop relying on them entirely so we can drop | ||
// them from the internal Fiber field. | ||
propName !== '__self' && propName !== '__source' && // Undefined `ref` is ignored by cloneElement. We treat it the same as | ||
// if the property were missing. This is mostly for | ||
// backwards compatibility. | ||
!(propName === 'ref' && config.ref === undefined)) { | ||
{ | ||
{ | ||
props[propName] = config[propName]; | ||
} | ||
} | ||
} | ||
} | ||
} // Children can be more than one argument, and those are transferred onto | ||
// the newly allocated props object. | ||
const childrenLength = arguments.length - 2; | ||
if (childrenLength === 1) { | ||
props.children = children; | ||
} else if (childrenLength > 1) { | ||
const childArray = Array(childrenLength); | ||
for (let i = 0; i < childrenLength; i++) { | ||
childArray[i] = arguments[i + 2]; | ||
} | ||
props.children = childArray; | ||
} | ||
const clonedElement = ReactElement(element.type, key, ref, undefined, undefined, owner, props); | ||
return clonedElement; | ||
} | ||
/** | ||
* 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 | ||
*/ | ||
function isValidElement(object) { | ||
return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; | ||
return ( | ||
"object" === typeof object && | ||
null !== object && | ||
object.$$typeof === REACT_ELEMENT_TYPE | ||
); | ||
} | ||
const SEPARATOR = '.'; | ||
const 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. | ||
*/ | ||
function escape(key) { | ||
const escapeRegex = /[=:]/g; | ||
const escaperLookup = { | ||
'=': '=0', | ||
':': '=2' | ||
}; | ||
const escapedString = key.replace(escapeRegex, function (match) { | ||
return escaperLookup[match]; | ||
}); | ||
return '$' + escapedString; | ||
var escaperLookup = { "=": "=0", ":": "=2" }; | ||
return ( | ||
"$" + | ||
key.replace(/[=:]/g, function (match) { | ||
return escaperLookup[match]; | ||
}) | ||
); | ||
} | ||
const userProvidedKeyEscapeRegex = /\/+/g; | ||
function escapeUserProvidedKey(text) { | ||
return text.replace(userProvidedKeyEscapeRegex, '$&/'); | ||
} | ||
/** | ||
* 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} | ||
*/ | ||
var userProvidedKeyEscapeRegex = /\/+/g; | ||
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) { | ||
return escape('' + element.key); | ||
} // Implicit key determined by the index in the set | ||
return index.toString(36); | ||
return "object" === typeof element && null !== element && null != element.key | ||
? escape("" + element.key) | ||
: index.toString(36); | ||
} | ||
function noop$1() {} | ||
function resolveThenable(thenable) { | ||
switch (thenable.status) { | ||
case 'fulfilled': | ||
{ | ||
const fulfilledValue = thenable.value; | ||
return fulfilledValue; | ||
} | ||
case 'rejected': | ||
{ | ||
const rejectedError = thenable.reason; | ||
throw rejectedError; | ||
} | ||
case "fulfilled": | ||
return thenable.value; | ||
case "rejected": | ||
throw thenable.reason; | ||
default: | ||
{ | ||
if (typeof thenable.status === 'string') { | ||
// Only instrument the thenable if the status if not defined. If | ||
// it's defined, but an unknown value, assume it's been instrumented by | ||
// some custom userspace implementation. We treat it as "pending". | ||
// Attach a dummy listener, to ensure that any lazy initialization can | ||
// happen. Flight lazily parses JSON when the value is actually awaited. | ||
thenable.then(noop$1, noop$1); | ||
} else { | ||
// This is an uncached thenable that we haven't seen before. | ||
// TODO: Detect infinite ping loops caused by uncached promises. | ||
const pendingThenable = thenable; | ||
pendingThenable.status = 'pending'; | ||
pendingThenable.then(fulfilledValue => { | ||
if (thenable.status === 'pending') { | ||
const fulfilledThenable = thenable; | ||
fulfilledThenable.status = 'fulfilled'; | ||
fulfilledThenable.value = fulfilledValue; | ||
} | ||
}, error => { | ||
if (thenable.status === 'pending') { | ||
const rejectedThenable = thenable; | ||
rejectedThenable.status = 'rejected'; | ||
rejectedThenable.reason = error; | ||
} | ||
}); | ||
} // Check one more time in case the thenable resolved synchronously. | ||
switch (thenable.status) { | ||
case 'fulfilled': | ||
{ | ||
const fulfilledThenable = thenable; | ||
return fulfilledThenable.value; | ||
} | ||
case 'rejected': | ||
{ | ||
const rejectedThenable = thenable; | ||
const rejectedError = rejectedThenable.reason; | ||
throw rejectedError; | ||
} | ||
} | ||
switch ( | ||
("string" === typeof thenable.status | ||
? thenable.then(noop, noop) | ||
: ((thenable.status = "pending"), | ||
thenable.then( | ||
function (fulfilledValue) { | ||
"pending" === thenable.status && | ||
((thenable.status = "fulfilled"), | ||
(thenable.value = fulfilledValue)); | ||
}, | ||
function (error) { | ||
"pending" === thenable.status && | ||
((thenable.status = "rejected"), (thenable.reason = error)); | ||
} | ||
)), | ||
thenable.status) | ||
) { | ||
case "fulfilled": | ||
return thenable.value; | ||
case "rejected": | ||
throw thenable.reason; | ||
} | ||
} | ||
throw thenable; | ||
} | ||
function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) { | ||
const type = typeof children; | ||
if (type === 'undefined' || type === 'boolean') { | ||
// All of the above are perceived as null. | ||
children = null; | ||
} | ||
let invokeCallback = false; | ||
if (children === null) { | ||
invokeCallback = true; | ||
} else { | ||
var type = typeof children; | ||
if ("undefined" === type || "boolean" === type) children = null; | ||
var invokeCallback = !1; | ||
if (null === children) invokeCallback = !0; | ||
else | ||
switch (type) { | ||
case 'bigint': | ||
case 'string': | ||
case 'number': | ||
invokeCallback = true; | ||
case "bigint": | ||
case "string": | ||
case "number": | ||
invokeCallback = !0; | ||
break; | ||
case 'object': | ||
case "object": | ||
switch (children.$$typeof) { | ||
case REACT_ELEMENT_TYPE: | ||
case REACT_PORTAL_TYPE: | ||
invokeCallback = true; | ||
invokeCallback = !0; | ||
break; | ||
case REACT_LAZY_TYPE: | ||
const payload = children._payload; | ||
const init = children._init; | ||
return mapIntoArray(init(payload), array, escapedPrefix, nameSoFar, callback); | ||
return ( | ||
(invokeCallback = children._init), | ||
mapIntoArray( | ||
invokeCallback(children._payload), | ||
array, | ||
escapedPrefix, | ||
nameSoFar, | ||
callback | ||
) | ||
); | ||
} | ||
} | ||
} | ||
if (invokeCallback) | ||
return ( | ||
(callback = callback(children)), | ||
(invokeCallback = | ||
"" === nameSoFar ? "." + getElementKey(children, 0) : nameSoFar), | ||
isArrayImpl(callback) | ||
? ((escapedPrefix = ""), | ||
null != invokeCallback && | ||
(escapedPrefix = | ||
invokeCallback.replace(userProvidedKeyEscapeRegex, "$&/") + "/"), | ||
mapIntoArray(callback, array, escapedPrefix, "", function (c) { | ||
return c; | ||
})) | ||
: null != callback && | ||
(isValidElement(callback) && | ||
(callback = cloneAndReplaceKey( | ||
callback, | ||
escapedPrefix + | ||
(null == callback.key || | ||
(children && children.key === callback.key) | ||
? "" | ||
: ("" + callback.key).replace( | ||
userProvidedKeyEscapeRegex, | ||
"$&/" | ||
) + "/") + | ||
invokeCallback | ||
)), | ||
array.push(callback)), | ||
1 | ||
); | ||
invokeCallback = 0; | ||
var nextNamePrefix = "" === nameSoFar ? "." : nameSoFar + ":"; | ||
if (isArrayImpl(children)) | ||
for (var i = 0; i < children.length; i++) | ||
(nameSoFar = children[i]), | ||
(type = nextNamePrefix + getElementKey(nameSoFar, i)), | ||
(invokeCallback += mapIntoArray( | ||
nameSoFar, | ||
array, | ||
escapedPrefix, | ||
type, | ||
callback | ||
)); | ||
else if (((i = getIteratorFn(children)), "function" === typeof i)) | ||
for ( | ||
children = i.call(children), i = 0; | ||
!(nameSoFar = children.next()).done; | ||
if (invokeCallback) { | ||
const child = children; | ||
let 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: | ||
const childKey = nameSoFar === '' ? SEPARATOR + getElementKey(child, 0) : nameSoFar; | ||
if (isArray(mappedChild)) { | ||
let escapedChildKey = ''; | ||
if (childKey != null) { | ||
escapedChildKey = escapeUserProvidedKey(childKey) + '/'; | ||
} | ||
mapIntoArray(mappedChild, array, escapedChildKey, '', c => c); | ||
} else if (mappedChild != null) { | ||
if (isValidElement(mappedChild)) { | ||
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[incompatible-type] Flow incorrectly thinks React.Portal doesn't have a key | ||
mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey( // $FlowFixMe[unsafe-addition] | ||
'' + mappedChild.key // eslint-disable-line react-internal/safe-string-coercion | ||
) + '/' : '') + childKey); | ||
} | ||
array.push(mappedChild); | ||
} | ||
return 1; | ||
) | ||
(nameSoFar = nameSoFar.value), | ||
(type = nextNamePrefix + getElementKey(nameSoFar, i++)), | ||
(invokeCallback += mapIntoArray( | ||
nameSoFar, | ||
array, | ||
escapedPrefix, | ||
type, | ||
callback | ||
)); | ||
else if ("object" === type) { | ||
if ("function" === typeof children.then) | ||
return mapIntoArray( | ||
resolveThenable(children), | ||
array, | ||
escapedPrefix, | ||
nameSoFar, | ||
callback | ||
); | ||
array = String(children); | ||
throw Error( | ||
formatProdErrorMessage( | ||
31, | ||
"[object Object]" === array | ||
? "object with keys {" + Object.keys(children).join(", ") + "}" | ||
: array | ||
) | ||
); | ||
} | ||
let child; | ||
let nextName; | ||
let subtreeCount = 0; // Count of children found in the current subtree. | ||
const nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR; | ||
if (isArray(children)) { | ||
for (let i = 0; i < children.length; i++) { | ||
child = children[i]; | ||
nextName = nextNamePrefix + getElementKey(child, i); | ||
subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback); | ||
} | ||
} else { | ||
const iteratorFn = getIteratorFn(children); | ||
if (typeof iteratorFn === 'function') { | ||
const iterableChildren = children; | ||
const iterator = iteratorFn.call(iterableChildren); | ||
let step; | ||
let ii = 0; // $FlowFixMe[incompatible-use] `iteratorFn` might return null according to typing. | ||
while (!(step = iterator.next()).done) { | ||
child = step.value; | ||
nextName = nextNamePrefix + getElementKey(child, ii++); | ||
subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback); | ||
} | ||
} else if (type === 'object') { | ||
if (typeof children.then === 'function') { | ||
return mapIntoArray(resolveThenable(children), array, escapedPrefix, nameSoFar, callback); | ||
} // eslint-disable-next-line react-internal/safe-string-coercion | ||
const childrenString = String(children); | ||
throw Error(formatProdErrorMessage(31, childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString)); | ||
} | ||
} | ||
return subtreeCount; | ||
return invokeCallback; | ||
} | ||
/** | ||
* Maps children that are typically specified as `props.children`. | ||
* | ||
* See https://reactjs.org/docs/react-api.html#reactchildrenmap | ||
* | ||
* The provided mapFunction(child, index) will be called for each | ||
* 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) { | ||
// $FlowFixMe limitation refining abstract types in Flow | ||
return children; | ||
} | ||
const result = []; | ||
let count = 0; | ||
mapIntoArray(children, result, '', '', function (child) { | ||
if (null == children) return children; | ||
var result = [], | ||
count = 0; | ||
mapIntoArray(children, result, "", "", function (child) { | ||
return func.call(context, child, count++); | ||
@@ -686,520 +258,320 @@ }); | ||
} | ||
/** | ||
* 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) { | ||
let n = 0; | ||
mapChildren(children, () => { | ||
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, // $FlowFixMe[missing-this-annot] | ||
function () { | ||
forEachFunc.apply(this, arguments); // Don't return anything. | ||
}, forEachContext); | ||
} | ||
/** | ||
* 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) { | ||
return mapChildren(children, child => child) || []; | ||
} | ||
/** | ||
* 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)) { | ||
throw Error(formatProdErrorMessage(143)); | ||
} | ||
return children; | ||
} | ||
// an immutable object with a single mutable value | ||
function createRef() { | ||
const refObject = { | ||
current: null | ||
}; | ||
return refObject; | ||
} | ||
function resolveDispatcher() { | ||
const dispatcher = ReactSharedInternals.H; | ||
// intentionally don't throw our own error because this is in a hot path. | ||
// Also helps ensure this is inlined. | ||
return dispatcher; | ||
} | ||
function getCacheForType(resourceType) { | ||
const dispatcher = ReactSharedInternals.C; | ||
if (!dispatcher) { | ||
// If there is no dispatcher, then we treat this as not being cached. | ||
return resourceType(); | ||
} | ||
return dispatcher.getCacheForType(resourceType); | ||
} | ||
function useCallback(callback, deps) { | ||
const dispatcher = resolveDispatcher(); | ||
return dispatcher.useCallback(callback, deps); | ||
} | ||
function useMemo(create, deps) { | ||
const dispatcher = resolveDispatcher(); | ||
return dispatcher.useMemo(create, deps); | ||
} | ||
function useDebugValue(value, formatterFn) { | ||
} | ||
function useId() { | ||
const dispatcher = resolveDispatcher(); | ||
return dispatcher.useId(); | ||
} | ||
function use(usable) { | ||
const dispatcher = resolveDispatcher(); | ||
return dispatcher.use(usable); | ||
} | ||
function useActionState(action, initialState, permalink) { | ||
{ | ||
const dispatcher = resolveDispatcher(); // $FlowFixMe[not-a-function] This is unstable, thus optional | ||
return dispatcher.useActionState(action, initialState, permalink); | ||
} | ||
} | ||
function forwardRef(render) { | ||
const elementType = { | ||
$$typeof: REACT_FORWARD_REF_TYPE, | ||
render | ||
}; | ||
return elementType; | ||
} | ||
const Uninitialized = -1; | ||
const Pending = 0; | ||
const Resolved = 1; | ||
const Rejected = 2; | ||
function lazyInitializer(payload) { | ||
if (payload._status === Uninitialized) { | ||
const ctor = payload._result; | ||
const thenable = ctor(); // Transition to the next state. | ||
// 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. | ||
thenable.then(moduleObject => { | ||
if (payload._status === Pending || payload._status === Uninitialized) { | ||
// Transition to the next state. | ||
const resolved = payload; | ||
resolved._status = Resolved; | ||
resolved._result = moduleObject; | ||
if (-1 === payload._status) { | ||
var ctor = payload._result; | ||
ctor = ctor(); | ||
ctor.then( | ||
function (moduleObject) { | ||
if (0 === payload._status || -1 === payload._status) | ||
(payload._status = 1), (payload._result = moduleObject); | ||
}, | ||
function (error) { | ||
if (0 === payload._status || -1 === payload._status) | ||
(payload._status = 2), (payload._result = error); | ||
} | ||
}, error => { | ||
if (payload._status === Pending || payload._status === Uninitialized) { | ||
// Transition to the next state. | ||
const rejected = payload; | ||
rejected._status = Rejected; | ||
rejected._result = error; | ||
} | ||
}); | ||
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. | ||
const pending = payload; | ||
pending._status = Pending; | ||
pending._result = thenable; | ||
} | ||
); | ||
-1 === payload._status && ((payload._status = 0), (payload._result = ctor)); | ||
} | ||
if (payload._status === Resolved) { | ||
const moduleObject = payload._result; | ||
return moduleObject.default; | ||
} else { | ||
throw payload._result; | ||
} | ||
if (1 === payload._status) return payload._result.default; | ||
throw payload._result; | ||
} | ||
function lazy(ctor) { | ||
const payload = { | ||
// We use these fields to store the result. | ||
_status: Uninitialized, | ||
_result: ctor | ||
}; | ||
const lazyType = { | ||
$$typeof: REACT_LAZY_TYPE, | ||
_payload: payload, | ||
_init: lazyInitializer | ||
}; | ||
return lazyType; | ||
} | ||
function memo(type, compare) { | ||
const elementType = { | ||
$$typeof: REACT_MEMO_TYPE, | ||
type, | ||
compare: compare === undefined ? null : compare | ||
}; | ||
return elementType; | ||
} | ||
const UNTERMINATED = 0; | ||
const TERMINATED = 1; | ||
const ERRORED = 2; | ||
function createCacheRoot() { | ||
return new WeakMap(); | ||
} | ||
function createCacheNode() { | ||
return { | ||
s: UNTERMINATED, | ||
// status, represents whether the cached computation returned a value or threw an error | ||
v: undefined, | ||
// value, either the cached result or an error, depending on s | ||
o: null, | ||
// object cache, a WeakMap where non-primitive arguments are stored | ||
p: null // primitive cache, a regular Map where primitive arguments are stored. | ||
}; | ||
return { s: 0, v: void 0, o: null, p: null }; | ||
} | ||
function cache(fn) { | ||
var reportGlobalError = | ||
"function" === typeof reportError | ||
? reportError | ||
: function (error) { | ||
if ( | ||
"object" === typeof window && | ||
"function" === typeof window.ErrorEvent | ||
) { | ||
var event = new window.ErrorEvent("error", { | ||
bubbles: !0, | ||
cancelable: !0, | ||
message: | ||
"object" === typeof error && | ||
null !== error && | ||
"string" === typeof error.message | ||
? String(error.message) | ||
: String(error), | ||
error: error | ||
}); | ||
if (!window.dispatchEvent(event)) return; | ||
} else if ( | ||
"object" === typeof process && | ||
"function" === typeof process.emit | ||
) { | ||
process.emit("uncaughtException", error); | ||
return; | ||
} | ||
console.error(error); | ||
}, | ||
getPrototypeOf = Object.getPrototypeOf, | ||
TaintRegistryObjects = ReactSharedInternals.TaintRegistryObjects, | ||
TaintRegistryValues = ReactSharedInternals.TaintRegistryValues, | ||
TaintRegistryByteLengths = ReactSharedInternals.TaintRegistryByteLengths, | ||
TaintRegistryPendingRequests = | ||
ReactSharedInternals.TaintRegistryPendingRequests, | ||
TypedArrayConstructor = getPrototypeOf(Uint32Array.prototype).constructor; | ||
function cleanup(entryValue) { | ||
var entry = TaintRegistryValues.get(entryValue); | ||
void 0 !== entry && | ||
(TaintRegistryPendingRequests.forEach(function (requestQueue) { | ||
requestQueue.push(entryValue); | ||
entry.count++; | ||
}), | ||
1 === entry.count ? TaintRegistryValues.delete(entryValue) : entry.count--); | ||
} | ||
var finalizationRegistry = | ||
"function" === typeof FinalizationRegistry | ||
? new FinalizationRegistry(cleanup) | ||
: null; | ||
exports.Children = { | ||
map: mapChildren, | ||
forEach: function (children, forEachFunc, forEachContext) { | ||
mapChildren( | ||
children, | ||
function () { | ||
forEachFunc.apply(this, arguments); | ||
}, | ||
forEachContext | ||
); | ||
}, | ||
count: function (children) { | ||
var n = 0; | ||
mapChildren(children, function () { | ||
n++; | ||
}); | ||
return n; | ||
}, | ||
toArray: function (children) { | ||
return ( | ||
mapChildren(children, function (child) { | ||
return child; | ||
}) || [] | ||
); | ||
}, | ||
only: function (children) { | ||
if (!isValidElement(children)) throw Error(formatProdErrorMessage(143)); | ||
return children; | ||
} | ||
}; | ||
exports.Fragment = REACT_FRAGMENT_TYPE; | ||
exports.Profiler = REACT_PROFILER_TYPE; | ||
exports.StrictMode = REACT_STRICT_MODE_TYPE; | ||
exports.Suspense = REACT_SUSPENSE_TYPE; | ||
exports.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = | ||
ReactSharedInternals; | ||
exports.cache = function (fn) { | ||
return function () { | ||
const dispatcher = ReactSharedInternals.C; | ||
if (!dispatcher) { | ||
// If there is no dispatcher, then we treat this as not being cached. | ||
// $FlowFixMe[incompatible-call]: We don't want to use rest arguments since we transpile the code. | ||
return fn.apply(null, arguments); | ||
var dispatcher = ReactSharedInternals.A; | ||
if (!dispatcher) return fn.apply(null, arguments); | ||
var fnMap = dispatcher.getCacheForType(createCacheRoot); | ||
dispatcher = fnMap.get(fn); | ||
void 0 === dispatcher && | ||
((dispatcher = createCacheNode()), fnMap.set(fn, dispatcher)); | ||
fnMap = 0; | ||
for (var l = arguments.length; fnMap < l; fnMap++) { | ||
var arg = arguments[fnMap]; | ||
if ( | ||
"function" === typeof arg || | ||
("object" === typeof arg && null !== arg) | ||
) { | ||
var objectCache = dispatcher.o; | ||
null === objectCache && (dispatcher.o = objectCache = new WeakMap()); | ||
dispatcher = objectCache.get(arg); | ||
void 0 === dispatcher && | ||
((dispatcher = createCacheNode()), objectCache.set(arg, dispatcher)); | ||
} else | ||
(objectCache = dispatcher.p), | ||
null === objectCache && (dispatcher.p = objectCache = new Map()), | ||
(dispatcher = objectCache.get(arg)), | ||
void 0 === dispatcher && | ||
((dispatcher = createCacheNode()), | ||
objectCache.set(arg, dispatcher)); | ||
} | ||
const fnMap = dispatcher.getCacheForType(createCacheRoot); | ||
const fnNode = fnMap.get(fn); | ||
let cacheNode; | ||
if (fnNode === undefined) { | ||
cacheNode = createCacheNode(); | ||
fnMap.set(fn, cacheNode); | ||
} else { | ||
cacheNode = fnNode; | ||
} | ||
for (let i = 0, l = arguments.length; i < l; i++) { | ||
const arg = arguments[i]; | ||
if (typeof arg === 'function' || typeof arg === 'object' && arg !== null) { | ||
// Objects go into a WeakMap | ||
let objectCache = cacheNode.o; | ||
if (objectCache === null) { | ||
cacheNode.o = objectCache = new WeakMap(); | ||
} | ||
const objectNode = objectCache.get(arg); | ||
if (objectNode === undefined) { | ||
cacheNode = createCacheNode(); | ||
objectCache.set(arg, cacheNode); | ||
} else { | ||
cacheNode = objectNode; | ||
} | ||
} else { | ||
// Primitives go into a regular Map | ||
let primitiveCache = cacheNode.p; | ||
if (primitiveCache === null) { | ||
cacheNode.p = primitiveCache = new Map(); | ||
} | ||
const primitiveNode = primitiveCache.get(arg); | ||
if (primitiveNode === undefined) { | ||
cacheNode = createCacheNode(); | ||
primitiveCache.set(arg, cacheNode); | ||
} else { | ||
cacheNode = primitiveNode; | ||
} | ||
} | ||
} | ||
if (cacheNode.s === TERMINATED) { | ||
return cacheNode.v; | ||
} | ||
if (cacheNode.s === ERRORED) { | ||
throw cacheNode.v; | ||
} | ||
if (1 === dispatcher.s) return dispatcher.v; | ||
if (2 === dispatcher.s) throw dispatcher.v; | ||
try { | ||
// $FlowFixMe[incompatible-call]: We don't want to use rest arguments since we transpile the code. | ||
const result = fn.apply(null, arguments); | ||
const terminatedNode = cacheNode; | ||
terminatedNode.s = TERMINATED; | ||
terminatedNode.v = result; | ||
return result; | ||
var result = fn.apply(null, arguments); | ||
fnMap = dispatcher; | ||
fnMap.s = 1; | ||
return (fnMap.v = result); | ||
} catch (error) { | ||
// We store the first error that's thrown and rethrow it. | ||
const erroredNode = cacheNode; | ||
erroredNode.s = ERRORED; | ||
erroredNode.v = error; | ||
throw error; | ||
throw ((result = dispatcher), (result.s = 2), (result.v = error), error); | ||
} | ||
}; | ||
} | ||
const reportGlobalError = typeof reportError === 'function' ? // In modern browsers, reportError will dispatch an error event, | ||
// emulating an uncaught JavaScript error. | ||
reportError : error => { | ||
if (typeof window === 'object' && typeof window.ErrorEvent === 'function') { | ||
// Browser Polyfill | ||
const message = typeof error === 'object' && error !== null && typeof error.message === 'string' ? // eslint-disable-next-line react-internal/safe-string-coercion | ||
String(error.message) : // eslint-disable-next-line react-internal/safe-string-coercion | ||
String(error); | ||
const event = new window.ErrorEvent('error', { | ||
bubbles: true, | ||
cancelable: true, | ||
message: message, | ||
error: error | ||
}); | ||
const shouldLog = window.dispatchEvent(event); | ||
if (!shouldLog) { | ||
return; | ||
} | ||
} else if (typeof process === 'object' && // $FlowFixMe[method-unbinding] | ||
typeof process.emit === 'function') { | ||
// Node Polyfill | ||
process.emit('uncaughtException', error); | ||
return; | ||
} // eslint-disable-next-line react-internal/no-production-logging | ||
console['error'](error); | ||
}; | ||
function startTransition(scope, options) { | ||
const prevTransition = ReactSharedInternals.T; // Each renderer registers a callback to receive the return value of | ||
// the scope function. This is used to implement async actions. | ||
const callbacks = new Set(); | ||
const transition = { | ||
_callbacks: callbacks | ||
}; | ||
ReactSharedInternals.T = transition; | ||
const currentTransition = ReactSharedInternals.T; | ||
{ | ||
try { | ||
const returnValue = scope(); | ||
if (typeof returnValue === 'object' && returnValue !== null && typeof returnValue.then === 'function') { | ||
callbacks.forEach(callback => callback(currentTransition, returnValue)); | ||
returnValue.then(noop, reportGlobalError); | ||
} | ||
} catch (error) { | ||
reportGlobalError(error); | ||
} finally { | ||
ReactSharedInternals.T = prevTransition; | ||
} | ||
exports.cacheSignal = function () { | ||
var dispatcher = ReactSharedInternals.A; | ||
return dispatcher ? dispatcher.cacheSignal() : null; | ||
}; | ||
exports.cloneElement = function (element, config, children) { | ||
if (null === element || void 0 === element) | ||
throw Error(formatProdErrorMessage(267, element)); | ||
var props = assign({}, element.props), | ||
key = element.key, | ||
owner = void 0; | ||
if (null != config) | ||
for (propName in (void 0 !== config.ref && (owner = void 0), | ||
void 0 !== config.key && (key = "" + config.key), | ||
config)) | ||
!hasOwnProperty.call(config, propName) || | ||
"key" === propName || | ||
"__self" === propName || | ||
"__source" === propName || | ||
("ref" === propName && void 0 === config.ref) || | ||
(props[propName] = config[propName]); | ||
var propName = arguments.length - 2; | ||
if (1 === propName) props.children = children; | ||
else if (1 < propName) { | ||
for (var childArray = Array(propName), i = 0; i < propName; i++) | ||
childArray[i] = arguments[i + 2]; | ||
props.children = childArray; | ||
} | ||
} | ||
function noop() {} | ||
function postpone(reason) { | ||
// eslint-disable-next-line react-internal/prod-error-codes | ||
const postponeInstance = new Error(reason); | ||
postponeInstance.$$typeof = REACT_POSTPONE_TYPE; | ||
throw postponeInstance; | ||
} | ||
var ReactVersion = '19.0.0-experimental-96c584661-20240412'; | ||
const getPrototypeOf = Object.getPrototypeOf; | ||
// Turns a TypedArray or ArrayBuffer into a string that can be used for comparison | ||
// in a Map to see if the bytes are the same. | ||
function binaryToComparableString(view) { | ||
return String.fromCharCode.apply(String, new Uint8Array(view.buffer, view.byteOffset, view.byteLength)); | ||
} | ||
const TaintRegistryObjects = ReactSharedInternals.TaintRegistryObjects, | ||
TaintRegistryValues = ReactSharedInternals.TaintRegistryValues, | ||
TaintRegistryByteLengths = ReactSharedInternals.TaintRegistryByteLengths, | ||
TaintRegistryPendingRequests = ReactSharedInternals.TaintRegistryPendingRequests; // This is the shared constructor of all typed arrays. | ||
const TypedArrayConstructor = getPrototypeOf(Uint32Array.prototype).constructor; | ||
const defaultMessage = 'A tainted value was attempted to be serialized to a Client Component or Action closure. ' + 'This would leak it to the client.'; | ||
function cleanup(entryValue) { | ||
const entry = TaintRegistryValues.get(entryValue); | ||
if (entry !== undefined) { | ||
TaintRegistryPendingRequests.forEach(function (requestQueue) { | ||
requestQueue.push(entryValue); | ||
entry.count++; | ||
}); | ||
if (entry.count === 1) { | ||
TaintRegistryValues.delete(entryValue); | ||
} else { | ||
entry.count--; | ||
} | ||
return ReactElement(element.type, key, void 0, void 0, owner, props); | ||
}; | ||
exports.createElement = function (type, config, children) { | ||
var propName, | ||
props = {}, | ||
key = null; | ||
if (null != config) | ||
for (propName in (void 0 !== config.key && (key = "" + config.key), config)) | ||
hasOwnProperty.call(config, propName) && | ||
"key" !== propName && | ||
"__self" !== propName && | ||
"__source" !== propName && | ||
(props[propName] = config[propName]); | ||
var childrenLength = arguments.length - 2; | ||
if (1 === childrenLength) props.children = children; | ||
else if (1 < childrenLength) { | ||
for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++) | ||
childArray[i] = arguments[i + 2]; | ||
props.children = childArray; | ||
} | ||
} // If FinalizationRegistry doesn't exist, we assume that objects life forever. | ||
// E.g. the whole VM is just the lifetime of a request. | ||
const finalizationRegistry = typeof FinalizationRegistry === 'function' ? new FinalizationRegistry(cleanup) : null; | ||
function taintUniqueValue(message, lifetime, value) { | ||
message = '' + (message || defaultMessage); | ||
if (lifetime === null || typeof lifetime !== 'object' && typeof lifetime !== 'function') { | ||
throw Error(formatProdErrorMessage(493)); | ||
} | ||
let entryValue; | ||
if (typeof value === 'string' || typeof value === 'bigint') { | ||
// Use as is. | ||
entryValue = value; | ||
} else if ((value instanceof TypedArrayConstructor || value instanceof DataView)) { | ||
// For now, we just convert binary data to a string so that we can just use the native | ||
// hashing in the Map implementation. It doesn't really matter what form the string | ||
// take as long as it's the same when we look it up. | ||
// We're not too worried about collisions since this should be a high entropy value. | ||
TaintRegistryByteLengths.add(value.byteLength); | ||
entryValue = binaryToComparableString(value); | ||
} else { | ||
const kind = value === null ? 'null' : typeof value; | ||
if (kind === 'object' || kind === 'function') { | ||
throw Error(formatProdErrorMessage(494)); | ||
} | ||
throw Error(formatProdErrorMessage(495, kind)); | ||
} | ||
const existingEntry = TaintRegistryValues.get(entryValue); | ||
if (existingEntry === undefined) { | ||
TaintRegistryValues.set(entryValue, { | ||
message, | ||
count: 1 | ||
}); | ||
} else { | ||
existingEntry.count++; | ||
} | ||
if (finalizationRegistry !== null) { | ||
finalizationRegistry.register(lifetime, entryValue); | ||
} | ||
} | ||
function taintObjectReference(message, object) { | ||
message = '' + (message || defaultMessage); | ||
if (typeof object === 'string' || typeof object === 'bigint') { | ||
if (type && type.defaultProps) | ||
for (propName in ((childrenLength = type.defaultProps), childrenLength)) | ||
void 0 === props[propName] && | ||
(props[propName] = childrenLength[propName]); | ||
return ReactElement(type, key, void 0, void 0, null, props); | ||
}; | ||
exports.createRef = function () { | ||
return { current: null }; | ||
}; | ||
exports.experimental_taintObjectReference = function (message, object) { | ||
message = | ||
"" + | ||
(message || | ||
"A tainted value was attempted to be serialized to a Client Component or Action closure. This would leak it to the client."); | ||
if ("string" === typeof object || "bigint" === typeof object) | ||
throw Error(formatProdErrorMessage(496)); | ||
} | ||
if (object === null || typeof object !== 'object' && typeof object !== 'function') { | ||
if ( | ||
null === object || | ||
("object" !== typeof object && "function" !== typeof object) | ||
) | ||
throw Error(formatProdErrorMessage(497)); | ||
} | ||
TaintRegistryObjects.set(object, message); | ||
} | ||
// Patch fetch | ||
const Children = { | ||
map: mapChildren, | ||
forEach: forEachChildren, | ||
count: countChildren, | ||
toArray, | ||
only: onlyChild | ||
}; // These are server-only | ||
exports.Children = Children; | ||
exports.Fragment = REACT_FRAGMENT_TYPE; | ||
exports.Profiler = REACT_PROFILER_TYPE; | ||
exports.StrictMode = REACT_STRICT_MODE_TYPE; | ||
exports.Suspense = REACT_SUSPENSE_TYPE; | ||
exports.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = ReactSharedInternals; | ||
exports.cache = cache; | ||
exports.cloneElement = cloneElement; | ||
exports.createElement = createElement; | ||
exports.createRef = createRef; | ||
exports.experimental_taintObjectReference = taintObjectReference; | ||
exports.experimental_taintUniqueValue = taintUniqueValue; | ||
exports.forwardRef = forwardRef; | ||
}; | ||
exports.experimental_taintUniqueValue = function (message, lifetime, value) { | ||
message = | ||
"" + | ||
(message || | ||
"A tainted value was attempted to be serialized to a Client Component or Action closure. This would leak it to the client."); | ||
if ( | ||
null === lifetime || | ||
("object" !== typeof lifetime && "function" !== typeof lifetime) | ||
) | ||
throw Error(formatProdErrorMessage(493)); | ||
if ("string" !== typeof value && "bigint" !== typeof value) | ||
if (value instanceof TypedArrayConstructor || value instanceof DataView) | ||
TaintRegistryByteLengths.add(value.byteLength), | ||
(value = String.fromCharCode.apply( | ||
String, | ||
new Uint8Array(value.buffer, value.byteOffset, value.byteLength) | ||
)); | ||
else { | ||
message = null === value ? "null" : typeof value; | ||
if ("object" === message || "function" === message) | ||
throw Error(formatProdErrorMessage(494)); | ||
throw Error(formatProdErrorMessage(495, message)); | ||
} | ||
var existingEntry = TaintRegistryValues.get(value); | ||
void 0 === existingEntry | ||
? TaintRegistryValues.set(value, { message: message, count: 1 }) | ||
: existingEntry.count++; | ||
null !== finalizationRegistry && | ||
finalizationRegistry.register(lifetime, value); | ||
}; | ||
exports.forwardRef = function (render) { | ||
return { $$typeof: REACT_FORWARD_REF_TYPE, render: render }; | ||
}; | ||
exports.isValidElement = isValidElement; | ||
exports.lazy = lazy; | ||
exports.memo = memo; | ||
exports.startTransition = startTransition; | ||
exports.unstable_DebugTracingMode = REACT_DEBUG_TRACING_MODE_TYPE; | ||
exports.unstable_SuspenseList = REACT_SUSPENSE_TYPE; | ||
exports.unstable_getCacheForType = getCacheForType; | ||
exports.unstable_postpone = postpone; | ||
exports.use = use; | ||
exports.useActionState = useActionState; | ||
exports.useCallback = useCallback; | ||
exports.useDebugValue = useDebugValue; | ||
exports.useId = useId; | ||
exports.useMemo = useMemo; | ||
exports.version = ReactVersion; | ||
exports.lazy = function (ctor) { | ||
return { | ||
$$typeof: REACT_LAZY_TYPE, | ||
_payload: { _status: -1, _result: ctor }, | ||
_init: lazyInitializer | ||
}; | ||
}; | ||
exports.memo = function (type, compare) { | ||
return { | ||
$$typeof: REACT_MEMO_TYPE, | ||
type: type, | ||
compare: void 0 === compare ? null : compare | ||
}; | ||
}; | ||
exports.startTransition = function (scope) { | ||
var prevTransition = ReactSharedInternals.T, | ||
currentTransition = {}; | ||
currentTransition.types = | ||
null !== prevTransition ? prevTransition.types : null; | ||
currentTransition.gesture = null; | ||
ReactSharedInternals.T = currentTransition; | ||
try { | ||
var returnValue = scope(), | ||
onStartTransitionFinish = ReactSharedInternals.S; | ||
null !== onStartTransitionFinish && | ||
onStartTransitionFinish(currentTransition, returnValue); | ||
"object" === typeof returnValue && | ||
null !== returnValue && | ||
"function" === typeof returnValue.then && | ||
returnValue.then(noop, reportGlobalError); | ||
} catch (error) { | ||
reportGlobalError(error); | ||
} finally { | ||
null !== prevTransition && | ||
null !== currentTransition.types && | ||
(prevTransition.types = currentTransition.types), | ||
(ReactSharedInternals.T = prevTransition); | ||
} | ||
}; | ||
exports.unstable_Activity = REACT_ACTIVITY_TYPE; | ||
exports.unstable_SuspenseList = REACT_SUSPENSE_LIST_TYPE; | ||
exports.unstable_ViewTransition = REACT_VIEW_TRANSITION_TYPE; | ||
exports.unstable_getCacheForType = function (resourceType) { | ||
var dispatcher = ReactSharedInternals.A; | ||
return dispatcher ? dispatcher.getCacheForType(resourceType) : resourceType(); | ||
}; | ||
exports.unstable_postpone = function (reason) { | ||
reason = Error(reason); | ||
reason.$$typeof = REACT_POSTPONE_TYPE; | ||
throw reason; | ||
}; | ||
exports.use = function (usable) { | ||
return ReactSharedInternals.H.use(usable); | ||
}; | ||
exports.useCallback = function (callback, deps) { | ||
return ReactSharedInternals.H.useCallback(callback, deps); | ||
}; | ||
exports.useDebugValue = function () {}; | ||
exports.useId = function () { | ||
return ReactSharedInternals.H.useId(); | ||
}; | ||
exports.useMemo = function (create, deps) { | ||
return ReactSharedInternals.H.useMemo(create, deps); | ||
}; | ||
exports.version = "19.2.0-experimental-96c61b7f-20250709"; |
'use strict'; | ||
if (process.env.NODE_ENV === 'production') { | ||
module.exports = require('./cjs/react.production.min.js'); | ||
module.exports = require('./cjs/react.production.js'); | ||
} else { | ||
module.exports = require('./cjs/react.development.js'); | ||
} |
'use strict'; | ||
if (process.env.NODE_ENV === 'production') { | ||
module.exports = require('./cjs/react-jsx-dev-runtime.production.min.js'); | ||
module.exports = require('./cjs/react-jsx-dev-runtime.production.js'); | ||
} else { | ||
module.exports = require('./cjs/react-jsx-dev-runtime.development.js'); | ||
} |
'use strict'; | ||
if (process.env.NODE_ENV === 'production') { | ||
module.exports = require('./cjs/react-jsx-runtime.production.min.js'); | ||
module.exports = require('./cjs/react-jsx-runtime.production.js'); | ||
} else { | ||
module.exports = require('./cjs/react-jsx-runtime.development.js'); | ||
} |
'use strict'; | ||
if (process.env.NODE_ENV === 'production') { | ||
module.exports = require('./cjs/react-jsx-runtime.react-server.production.min.js'); | ||
module.exports = require('./cjs/react-jsx-runtime.react-server.production.js'); | ||
} else { | ||
module.exports = require('./cjs/react-jsx-runtime.react-server.development.js'); | ||
} |
@@ -7,3 +7,3 @@ { | ||
], | ||
"version": "0.0.0-experimental-96c584661-20240412", | ||
"version": "0.0.0-experimental-96c61b7f-20250709", | ||
"homepage": "https://react.dev/", | ||
@@ -17,6 +17,7 @@ "bugs": "https://github.com/facebook/react/issues", | ||
"cjs/", | ||
"umd/", | ||
"compiler-runtime.js", | ||
"jsx-runtime.js", | ||
"jsx-runtime.react-server.js", | ||
"jsx-dev-runtime.js", | ||
"jsx-dev-runtime.react-server.js", | ||
"react.react-server.js" | ||
@@ -35,3 +36,10 @@ ], | ||
}, | ||
"./jsx-dev-runtime": "./jsx-dev-runtime.js" | ||
"./jsx-dev-runtime": { | ||
"react-server": "./jsx-dev-runtime.react-server.js", | ||
"default": "./jsx-dev-runtime.js" | ||
}, | ||
"./compiler-runtime": { | ||
"react-server": "./compiler-runtime.js", | ||
"default": "./compiler-runtime.js" | ||
} | ||
}, | ||
@@ -38,0 +46,0 @@ "repository": { |
'use strict'; | ||
if (process.env.NODE_ENV === 'production') { | ||
module.exports = require('./cjs/react.react-server.production.min.js'); | ||
module.exports = require('./cjs/react.react-server.production.js'); | ||
} else { | ||
module.exports = require('./cjs/react.react-server.development.js'); | ||
} |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
187282
-69.84%27
-27.03%5266
-60.65%13
44.44%