@reckona/mreact-compat 0.0.91 → 0.0.93
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/class-component.d.ts +22 -6
- package/dist/class-component.d.ts.map +1 -1
- package/dist/class-component.js +157 -51
- package/dist/class-component.js.map +1 -1
- package/dist/context.d.ts +19 -3
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +55 -6
- package/dist/context.js.map +1 -1
- package/dist/dom-children.d.ts +2 -0
- package/dist/dom-children.d.ts.map +1 -1
- package/dist/dom-children.js +103 -1
- package/dist/dom-children.js.map +1 -1
- package/dist/dom-host-rules.d.ts +10 -0
- package/dist/dom-host-rules.d.ts.map +1 -0
- package/dist/dom-host-rules.js +86 -0
- package/dist/dom-host-rules.js.map +1 -0
- package/dist/dom-props.d.ts +3 -2
- package/dist/dom-props.d.ts.map +1 -1
- package/dist/dom-props.js +229 -33
- package/dist/dom-props.js.map +1 -1
- package/dist/element.d.ts +9 -4
- package/dist/element.d.ts.map +1 -1
- package/dist/element.js +101 -26
- package/dist/element.js.map +1 -1
- package/dist/event-listeners.d.ts +4 -4
- package/dist/event-listeners.d.ts.map +1 -1
- package/dist/event-listeners.js +1 -1
- package/dist/event-listeners.js.map +1 -1
- package/dist/event-types.d.ts +10 -0
- package/dist/event-types.d.ts.map +1 -1
- package/dist/event-types.js.map +1 -1
- package/dist/events.js +22 -1
- package/dist/events.js.map +1 -1
- package/dist/fiber-commit.d.ts +2 -1
- package/dist/fiber-commit.d.ts.map +1 -1
- package/dist/fiber-commit.js +13 -1
- package/dist/fiber-commit.js.map +1 -1
- package/dist/fiber-reconciler.d.ts.map +1 -1
- package/dist/fiber-reconciler.js +28 -7
- package/dist/fiber-reconciler.js.map +1 -1
- package/dist/fiber-work-loop.d.ts.map +1 -1
- package/dist/fiber-work-loop.js +4 -3
- package/dist/fiber-work-loop.js.map +1 -1
- package/dist/fiber.d.ts +5 -0
- package/dist/fiber.d.ts.map +1 -1
- package/dist/fiber.js +9 -0
- package/dist/fiber.js.map +1 -1
- package/dist/hooks-entry.d.ts +3 -0
- package/dist/hooks-entry.d.ts.map +1 -0
- package/dist/hooks-entry.js +2 -0
- package/dist/hooks-entry.js.map +1 -0
- package/dist/hooks.d.ts +39 -5
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +373 -326
- package/dist/hooks.js.map +1 -1
- package/dist/host-reconciler.d.ts +3 -0
- package/dist/host-reconciler.d.ts.map +1 -1
- package/dist/host-reconciler.js +1183 -68
- package/dist/host-reconciler.js.map +1 -1
- package/dist/hydration.d.ts +1 -1
- package/dist/hydration.d.ts.map +1 -1
- package/dist/hydration.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/react-default.d.ts +4 -4
- package/dist/react-default.d.ts.map +1 -1
- package/dist/react-default.js +2 -1
- package/dist/react-default.js.map +1 -1
- package/dist/reconciler.d.ts.map +1 -1
- package/dist/reconciler.js +38 -22
- package/dist/reconciler.js.map +1 -1
- package/dist/root.d.ts.map +1 -1
- package/dist/root.js +48 -13
- package/dist/root.js.map +1 -1
- package/dist/server-render.d.ts +6 -0
- package/dist/server-render.d.ts.map +1 -0
- package/dist/server-render.js +307 -0
- package/dist/server-render.js.map +1 -0
- package/package.json +6 -2
- package/src/class-component.ts +313 -51
- package/src/context.ts +108 -9
- package/src/dom-children.ts +155 -1
- package/src/dom-host-rules.ts +115 -0
- package/src/dom-props.ts +297 -46
- package/src/element.ts +141 -31
- package/src/event-listeners.ts +6 -6
- package/src/event-types.ts +10 -0
- package/src/events.ts +32 -10
- package/src/fiber-commit.ts +16 -1
- package/src/fiber-reconciler.ts +39 -6
- package/src/fiber-work-loop.ts +4 -3
- package/src/fiber.ts +14 -0
- package/src/hooks-entry.ts +24 -0
- package/src/hooks.ts +482 -479
- package/src/host-reconciler.ts +1662 -83
- package/src/hydration.ts +1 -1
- package/src/index.ts +1 -1
- package/src/react-default.ts +1 -1
- package/src/reconciler.ts +61 -22
- package/src/root.ts +55 -12
- package/src/server-render.ts +478 -0
package/dist/fiber-reconciler.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { ERROR_BOUNDARY_TYPE, FORWARD_REF_TYPE, Fragment, LAZY_TYPE, MEMO_TYPE, STRICT_MODE_TYPE, Suspense, SuspenseList, createElement, isReactCompatElement, } from "./element.js";
|
|
2
|
-
import { isReactCompatConsumer, isReactCompatProvider, popContextProvider, pushContextProvider, useContext, } from "./context.js";
|
|
2
|
+
import { consumerContext, isReactCompatConsumer, isReactCompatProvider, popContextProvider, pushContextProvider, useContext, } from "./context.js";
|
|
3
3
|
import { reconcileChildFibers } from "./fiber-child.js";
|
|
4
4
|
import {} from "./fiber.js";
|
|
5
5
|
import { DidCapture } from "./fiber-flags.js";
|
|
6
6
|
import { mergeLanes, NoLanes } from "./fiber-lanes.js";
|
|
7
7
|
import { isThenable } from "./thenable.js";
|
|
8
|
-
import {
|
|
8
|
+
import { isClassComponentType, resolveDerivedStateFromProps, } from "./class-component.js";
|
|
9
9
|
import { areMemoPropsEqual } from "./prop-comparison.js";
|
|
10
|
+
import { createHostElement, hostElementMatches, isHostElement, namespaceForHostChildren, namespaceForHostElement, } from "./dom-host-rules.js";
|
|
10
11
|
export function performUnitOfWork(root, unit) {
|
|
11
12
|
let next;
|
|
12
13
|
try {
|
|
@@ -72,7 +73,7 @@ export function beginWork(unit) {
|
|
|
72
73
|
const render = typeof props.children === "function"
|
|
73
74
|
? props.children
|
|
74
75
|
: () => null;
|
|
75
|
-
return reconcileChildFibers(unit, unit.alternate?.child, render(useContext(unit.type
|
|
76
|
+
return reconcileChildFibers(unit, unit.alternate?.child, render(useContext(consumerContext(unit.type))));
|
|
76
77
|
}
|
|
77
78
|
if (unit.tag === "class-component" && isClassComponentType(unit.type)) {
|
|
78
79
|
return beginClassComponent(unit, unit.type);
|
|
@@ -155,12 +156,15 @@ export function completeWork(unit) {
|
|
|
155
156
|
}
|
|
156
157
|
if (unit.tag === "host-component") {
|
|
157
158
|
const current = unit.alternate;
|
|
159
|
+
const parentNamespace = parentHostNamespace(unit);
|
|
160
|
+
const elementNamespace = namespaceForHostElement(parentNamespace, String(unit.type));
|
|
158
161
|
unit.stateNode =
|
|
159
162
|
current?.tag === "host-component" &&
|
|
160
163
|
current.type === unit.type &&
|
|
161
|
-
current.stateNode
|
|
164
|
+
isHostElement(current.stateNode) &&
|
|
165
|
+
hostElementMatches(current.stateNode, String(unit.type), elementNamespace)
|
|
162
166
|
? current.stateNode
|
|
163
|
-
: document
|
|
167
|
+
: createHostElement(document, String(unit.type), parentNamespace);
|
|
164
168
|
return;
|
|
165
169
|
}
|
|
166
170
|
if (unit.tag === "host-text") {
|
|
@@ -171,6 +175,23 @@ export function completeWork(unit) {
|
|
|
171
175
|
: document.createTextNode("");
|
|
172
176
|
}
|
|
173
177
|
}
|
|
178
|
+
function parentHostNamespace(unit) {
|
|
179
|
+
const ancestors = [];
|
|
180
|
+
let current = unit.return;
|
|
181
|
+
while (current !== undefined) {
|
|
182
|
+
if (current.tag === "host-component" && typeof current.type === "string") {
|
|
183
|
+
ancestors.push(current.type);
|
|
184
|
+
}
|
|
185
|
+
current = current.return;
|
|
186
|
+
}
|
|
187
|
+
let namespace = "html";
|
|
188
|
+
for (let index = ancestors.length - 1; index >= 0; index -= 1) {
|
|
189
|
+
const tagName = ancestors[index] ?? "";
|
|
190
|
+
const elementNamespace = namespaceForHostElement(namespace, tagName);
|
|
191
|
+
namespace = namespaceForHostChildren(elementNamespace, tagName);
|
|
192
|
+
}
|
|
193
|
+
return namespace;
|
|
194
|
+
}
|
|
174
195
|
export function cleanupUnfinishedWork(unit) {
|
|
175
196
|
if (unit === undefined) {
|
|
176
197
|
return;
|
|
@@ -311,8 +332,7 @@ function beginClassComponent(unit, type) {
|
|
|
311
332
|
: undefined;
|
|
312
333
|
const instance = currentInstance ?? new type(nextProps);
|
|
313
334
|
const previousState = instance.state ?? {};
|
|
314
|
-
|
|
315
|
-
const nextState = instance.state ?? {};
|
|
335
|
+
const nextState = resolveDerivedStateFromProps(type, nextProps, previousState);
|
|
316
336
|
unit.stateNode = instance;
|
|
317
337
|
if (unit.alternate !== undefined &&
|
|
318
338
|
instance.shouldComponentUpdate?.(nextProps, nextState) === false) {
|
|
@@ -321,6 +341,7 @@ function beginClassComponent(unit, type) {
|
|
|
321
341
|
return undefined;
|
|
322
342
|
}
|
|
323
343
|
instance.props = nextProps;
|
|
344
|
+
instance.state = nextState;
|
|
324
345
|
return reconcileChildFibers(unit, unit.alternate?.child, instance.render());
|
|
325
346
|
}
|
|
326
347
|
function captureClassErrorBoundary(root, boundary, thrownValue) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fiber-reconciler.js","sourceRoot":"","sources":["../src/fiber-reconciler.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ERROR_BOUNDARY_TYPE,\n FORWARD_REF_TYPE,\n Fragment,\n LAZY_TYPE,\n MEMO_TYPE,\n STRICT_MODE_TYPE,\n Suspense,\n SuspenseList,\n createElement,\n isReactCompatElement,\n type LazyType,\n type MemoType,\n type ReactCompatNode,\n} from \"./element.js\";\nimport {\n isReactCompatConsumer,\n isReactCompatProvider,\n popContextProvider,\n pushContextProvider,\n useContext,\n type ReactCompatProvider,\n} from \"./context.js\";\nimport { reconcileChildFibers } from \"./fiber-child.js\";\nimport { type Fiber, type FiberRoot } from \"./fiber.js\";\nimport { DidCapture } from \"./fiber-flags.js\";\nimport { mergeLanes, NoLanes } from \"./fiber-lanes.js\";\nimport { isThenable } from \"./thenable.js\";\nimport {\n applyDerivedStateFromProps,\n isClassComponentType,\n type ClassComponentInstance,\n type ClassComponentType,\n} from \"./class-component.js\";\nimport { areMemoPropsEqual } from \"./prop-comparison.js\";\n\ninterface ContextProviderFiberState {\n provider: ReactCompatProvider<unknown>;\n pushed: boolean;\n}\n\ninterface SuspenseFiberState {\n didSuspend: boolean;\n}\n\nexport function performUnitOfWork(\n root: FiberRoot,\n unit: Fiber,\n): Fiber | undefined {\n let next: Fiber | undefined;\n\n try {\n next = beginWork(unit);\n } catch (error) {\n return captureThrownValue(root, unit, error);\n }\n\n if (next !== undefined) {\n return next;\n }\n\n return completeUnitOfWork(root, unit);\n}\n\nexport function beginWork(unit: Fiber): Fiber | undefined {\n if (unit.tag === \"host-root\") {\n const children = (unit.pendingProps as { children?: ReactCompatNode })\n .children;\n return reconcileChildFibers(\n unit,\n unit.alternate?.child,\n children as ReactCompatNode,\n );\n }\n\n if (unit.tag === \"host-component\") {\n const children = (unit.pendingProps as { children?: ReactCompatNode })\n .children;\n return reconcileChildFibers(\n unit,\n unit.alternate?.child,\n children as ReactCompatNode,\n );\n }\n\n if (unit.tag === \"fragment\") {\n return reconcileChildFibers(\n unit,\n unit.alternate?.child,\n unit.pendingProps as ReactCompatNode,\n );\n }\n\n if (unit.tag === \"strict-mode\") {\n previewStrictModeNode(\n (unit.pendingProps as { children?: ReactCompatNode }).children,\n );\n return reconcileChildFibers(\n unit,\n unit.alternate?.child,\n (unit.pendingProps as { children?: ReactCompatNode }).children,\n );\n }\n\n if (unit.tag === \"function-component\" && isFunctionComponentType(unit.type)) {\n const children = unit.type(unit.pendingProps as Record<string, unknown>);\n return reconcileChildFibers(unit, unit.alternate?.child, children);\n }\n\n if (unit.tag === \"forward-ref\" && isForwardRefType(unit.type)) {\n const props = unit.pendingProps as Record<string, unknown>;\n const children = unit.type.render(props, props.ref ?? null);\n return reconcileChildFibers(unit, unit.alternate?.child, children);\n }\n\n if (unit.tag === \"memo\" && isMemoType(unit.type)) {\n const previousProps = unit.alternate?.memoizedProps as\n | Record<string, unknown>\n | undefined;\n const nextProps = unit.pendingProps as Record<string, unknown>;\n\n if (\n unit.alternate !== undefined &&\n previousProps !== undefined &&\n areMemoPropsEqual(unit.type, previousProps, nextProps)\n ) {\n unit.child = unit.alternate.child;\n return undefined;\n }\n\n return reconcileChildFibers(\n unit,\n unit.alternate?.child,\n createElement(unit.type.type, nextProps),\n );\n }\n\n if (unit.tag === \"context-provider\" && isReactCompatProvider(unit.type)) {\n const props = unit.pendingProps as {\n value: unknown;\n children?: ReactCompatNode;\n };\n pushContextProvider(unit.type, props.value);\n unit.memoizedState = {\n provider: unit.type,\n pushed: true,\n } satisfies ContextProviderFiberState;\n return reconcileChildFibers(unit, unit.alternate?.child, props.children);\n }\n\n if (unit.tag === \"context-consumer\" && isReactCompatConsumer(unit.type)) {\n const props = unit.pendingProps as {\n children?: unknown;\n };\n const render =\n typeof props.children === \"function\"\n ? (props.children as (value: unknown) => ReactCompatNode)\n : () => null;\n return reconcileChildFibers(\n unit,\n unit.alternate?.child,\n render(useContext(unit.type.context)),\n );\n }\n\n if (unit.tag === \"class-component\" && isClassComponentType(unit.type)) {\n return beginClassComponent(unit, unit.type);\n }\n\n if (unit.tag === \"lazy\" && isLazyType(unit.type)) {\n const lazyType = unit.type;\n\n if (lazyType.status === \"resolved\" && lazyType.resolved !== undefined) {\n return reconcileChildFibers(\n unit,\n unit.alternate?.child,\n createElement(lazyType.resolved, unit.pendingProps as Record<string, unknown>),\n );\n }\n\n if (lazyType.status === \"rejected\") {\n throw lazyType.error;\n }\n\n if (lazyType.status === \"uninitialized\") {\n lazyType.status = \"pending\";\n lazyType.promise = lazyType\n .load()\n .then((module) => {\n lazyType.status = \"resolved\";\n lazyType.resolved = module.default;\n })\n .catch((error: unknown) => {\n lazyType.status = \"rejected\";\n lazyType.error = error;\n });\n }\n\n throw lazyType.promise;\n }\n\n if (unit.tag === \"suspense\" && unit.type === Suspense) {\n unit.memoizedState = { didSuspend: false } satisfies SuspenseFiberState;\n return reconcileChildFibers(\n unit,\n unit.alternate?.child,\n (unit.pendingProps as { children?: ReactCompatNode }).children,\n );\n }\n\n if (unit.tag === \"suspense-list\" && unit.type === SuspenseList) {\n return reconcileChildFibers(\n unit,\n unit.alternate?.child,\n (unit.pendingProps as { children?: ReactCompatNode }).children,\n );\n }\n\n if (unit.tag === \"error-boundary\" && unit.type === ERROR_BOUNDARY_TYPE) {\n return reconcileChildFibers(\n unit,\n unit.alternate?.child,\n (unit.pendingProps as { children?: ReactCompatNode }).children,\n );\n }\n\n return undefined;\n}\n\nfunction previewStrictModeNode(node: ReactCompatNode): void {\n if (\n node === null ||\n node === undefined ||\n typeof node === \"boolean\" ||\n typeof node === \"string\" ||\n typeof node === \"number\"\n ) {\n return;\n }\n\n if (Array.isArray(node)) {\n for (const child of node) {\n previewStrictModeNode(child);\n }\n return;\n }\n\n if (!isReactCompatElement(node)) {\n return;\n }\n\n if (isClassComponentType(node.type)) {\n const instance = new node.type(node.props as Record<string, unknown>);\n previewStrictModeNode(instance.render());\n return;\n }\n\n if (isForwardRefType(node.type)) {\n previewStrictModeNode(\n node.type.render(\n node.props as Record<string, unknown>,\n (node.props as { ref?: unknown }).ref ?? null,\n ),\n );\n return;\n }\n\n if (isMemoType(node.type)) {\n previewStrictModeNode(createElement(node.type.type, node.props));\n return;\n }\n\n if (typeof node.type === \"function\") {\n const component = node.type as (props: Record<string, unknown>) => ReactCompatNode;\n previewStrictModeNode(\n component(node.props as Record<string, unknown>),\n );\n return;\n }\n\n previewStrictModeNode(node.props.children as ReactCompatNode);\n}\n\nexport function completeWork(unit: Fiber): void {\n if (unit.tag === \"context-provider\") {\n popPushedContextProvider(unit);\n }\n\n if (unit.tag === \"host-component\") {\n const current = unit.alternate;\n\n unit.stateNode =\n current?.tag === \"host-component\" &&\n current.type === unit.type &&\n current.stateNode instanceof HTMLElement\n ? current.stateNode\n : document.createElement(String(unit.type));\n return;\n }\n\n if (unit.tag === \"host-text\") {\n const current = unit.alternate;\n\n unit.stateNode =\n current?.tag === \"host-text\" && current.stateNode instanceof Text\n ? current.stateNode\n : document.createTextNode(\"\");\n }\n}\n\nexport function cleanupUnfinishedWork(unit: Fiber | undefined): void {\n if (unit === undefined) {\n return;\n }\n\n let cursor: Fiber | undefined = unit;\n\n while (cursor !== undefined) {\n cleanupUnfinishedWork(cursor.child);\n popPushedContextProvider(cursor);\n cursor = cursor.sibling;\n }\n}\n\nfunction completeUnitOfWork(\n root: FiberRoot,\n completedWork: Fiber,\n): Fiber | undefined {\n let unit: Fiber | undefined = completedWork;\n\n while (unit !== undefined) {\n completeWork(unit);\n bubbleCompletedProperties(unit);\n\n if (unit.sibling !== undefined) {\n return unit.sibling;\n }\n\n if (unit.return === undefined) {\n unit.memoizedProps = unit.pendingProps;\n root.finishedWork = unit;\n return undefined;\n }\n\n unit.memoizedProps = unit.pendingProps;\n unit = unit.return;\n }\n\n return undefined;\n}\n\nfunction bubbleCompletedProperties(unit: Fiber): void {\n let subtreeFlags = unit.subtreeFlags;\n let childLanes = NoLanes;\n let child = unit.child;\n\n while (child !== undefined) {\n subtreeFlags |= child.subtreeFlags | child.flags;\n childLanes = mergeLanes(childLanes, mergeLanes(child.lanes, child.childLanes));\n child.return = unit;\n child = child.sibling;\n }\n\n unit.subtreeFlags = subtreeFlags;\n unit.childLanes = childLanes;\n}\n\nexport function canReconcileConcurrently(node: ReactCompatNode): boolean {\n if (\n node === null ||\n node === undefined ||\n typeof node === \"boolean\" ||\n typeof node === \"string\" ||\n typeof node === \"number\"\n ) {\n return true;\n }\n\n if (Array.isArray(node)) {\n return node.every(canReconcileConcurrently);\n }\n\n if (!isReactCompatElement(node)) {\n return false;\n }\n\n if (\n typeof node.type === \"string\" ||\n node.type === Fragment ||\n node.type === STRICT_MODE_TYPE\n ) {\n return canReconcileConcurrently(node.props.children as ReactCompatNode);\n }\n\n if (node.type === Suspense || node.type === SuspenseList) {\n return true;\n }\n\n if (node.type === ERROR_BOUNDARY_TYPE) {\n return canReconcileConcurrently(node.props.children as ReactCompatNode);\n }\n\n if (isReactCompatProvider(node.type)) {\n return canReconcileConcurrently(node.props.children as ReactCompatNode);\n }\n\n if (isReactCompatConsumer(node.type)) {\n return typeof node.props.children === \"function\";\n }\n\n if (isMemoType(node.type)) {\n return canReconcileElementTypeConcurrently(node.type.type);\n }\n\n return (\n isFunctionComponentType(node.type) ||\n isForwardRefType(node.type) ||\n isLazyType(node.type) ||\n isClassComponentType(node.type)\n );\n}\n\nfunction popPushedContextProvider(unit: Fiber): void {\n const state = unit.memoizedState as ContextProviderFiberState | undefined;\n\n if (state?.pushed === true) {\n popContextProvider(state.provider);\n state.pushed = false;\n }\n}\n\nfunction isFunctionComponentType(\n type: unknown,\n): type is (props: Record<string, unknown>) => ReactCompatNode {\n return typeof type === \"function\";\n}\n\nfunction isForwardRefType(\n type: unknown,\n): type is {\n $$typeof: typeof FORWARD_REF_TYPE;\n render: (props: Record<string, unknown>, ref: unknown) => ReactCompatNode;\n} {\n return (\n typeof type === \"object\" &&\n type !== null &&\n (type as { $$typeof?: unknown }).$$typeof === FORWARD_REF_TYPE\n );\n}\n\nfunction isMemoType(\n type: unknown,\n): type is MemoType<Record<string, unknown>> {\n return (\n typeof type === \"object\" &&\n type !== null &&\n (type as { $$typeof?: unknown }).$$typeof === MEMO_TYPE\n );\n}\n\nfunction isLazyType(\n type: unknown,\n): type is LazyType<Record<string, unknown>> {\n return (\n typeof type === \"object\" &&\n type !== null &&\n (type as { $$typeof?: unknown }).$$typeof === LAZY_TYPE\n );\n}\n\nfunction canReconcileElementTypeConcurrently(type: unknown): boolean {\n return (\n typeof type === \"string\" ||\n type === Fragment ||\n isFunctionComponentType(type) ||\n isForwardRefType(type) ||\n isLazyType(type) ||\n (isMemoType(type) && canReconcileElementTypeConcurrently(type.type))\n );\n}\n\nfunction captureThrownValue(\n root: FiberRoot,\n source: Fiber,\n thrownValue: unknown,\n): Fiber | undefined {\n let boundary = source.return;\n\n while (boundary !== undefined) {\n if (isThenable(thrownValue) && boundary.tag === \"suspense\") {\n return captureSuspenseBoundary(root, boundary);\n }\n\n if (!isThenable(thrownValue) && boundary.tag === \"error-boundary\") {\n return captureErrorBoundary(root, boundary, thrownValue);\n }\n\n if (!isThenable(thrownValue) && boundary.tag === \"class-component\") {\n const captured = captureClassErrorBoundary(root, boundary, thrownValue);\n\n if (captured !== undefined) {\n return captured;\n }\n }\n\n boundary = boundary.return;\n }\n\n throw thrownValue;\n}\n\nfunction beginClassComponent(\n unit: Fiber,\n type: ClassComponentType,\n): Fiber | undefined {\n const nextProps = unit.pendingProps as Record<string, unknown>;\n const currentInstance =\n unit.alternate?.stateNode instanceof type\n ? unit.alternate.stateNode\n : undefined;\n const instance = currentInstance ?? new type(nextProps);\n const previousState = instance.state ?? {};\n applyDerivedStateFromProps(type, instance, nextProps, previousState);\n const nextState = instance.state ?? {};\n\n unit.stateNode = instance;\n\n if (\n unit.alternate !== undefined &&\n instance.shouldComponentUpdate?.(nextProps, nextState) === false\n ) {\n instance.props = nextProps;\n unit.child = unit.alternate.child;\n return undefined;\n }\n\n instance.props = nextProps;\n return reconcileChildFibers(unit, unit.alternate?.child, instance.render());\n}\n\nfunction captureClassErrorBoundary(\n root: FiberRoot,\n boundary: Fiber,\n thrownValue: unknown,\n): Fiber | undefined {\n if (!isClassComponentType(boundary.type)) {\n return undefined;\n }\n\n const instance = boundary.stateNode as ClassComponentInstance | undefined;\n\n if (instance === undefined || !isClassErrorBoundary(boundary.type, instance)) {\n return undefined;\n }\n\n cleanupUnfinishedWork(boundary.child);\n boundary.flags |= DidCapture;\n const error = thrownValue instanceof Error ? thrownValue : new Error(String(thrownValue));\n const derivedState = boundary.type.getDerivedStateFromError?.(error);\n\n if (derivedState !== undefined && derivedState !== null) {\n instance.state = {\n ...instance.state,\n ...derivedState,\n };\n }\n\n instance.componentDidCatch?.(error, { componentStack: \"\" });\n boundary.child = reconcileChildFibers(\n boundary,\n boundary.alternate?.child,\n instance.render(),\n );\n return boundary.child ?? completeUnitOfWork(root, boundary);\n}\n\nfunction isClassErrorBoundary(\n type: ClassComponentType,\n instance: ClassComponentInstance,\n): boolean {\n return (\n typeof type.getDerivedStateFromError === \"function\" ||\n typeof instance.componentDidCatch === \"function\"\n );\n}\n\nfunction captureSuspenseBoundary(\n root: FiberRoot,\n boundary: Fiber,\n): Fiber | undefined {\n cleanupUnfinishedWork(boundary.child);\n boundary.flags |= DidCapture;\n boundary.memoizedState = { didSuspend: true } satisfies SuspenseFiberState;\n boundary.child = reconcileChildFibers(\n boundary,\n boundary.alternate?.child,\n (boundary.pendingProps as { fallback?: ReactCompatNode }).fallback,\n );\n applySuspenseListRevealOrder(boundary);\n return boundary.child ?? completeUnitOfWork(root, boundary);\n}\n\nfunction captureErrorBoundary(\n root: FiberRoot,\n boundary: Fiber,\n thrownValue: unknown,\n): Fiber | undefined {\n cleanupUnfinishedWork(boundary.child);\n boundary.flags |= DidCapture;\n const error = thrownValue instanceof Error ? thrownValue : new Error(String(thrownValue));\n const props = boundary.pendingProps as {\n fallback?: unknown;\n onError?: unknown;\n };\n\n if (typeof props.onError === \"function\") {\n (props.onError as (error: Error) => void)(error);\n }\n\n const fallback =\n typeof props.fallback === \"function\"\n ? (props.fallback as (error: Error) => ReactCompatNode)(error)\n : null;\n boundary.child = reconcileChildFibers(boundary, boundary.alternate?.child, fallback);\n return boundary.child ?? completeUnitOfWork(root, boundary);\n}\n\nfunction applySuspenseListRevealOrder(boundary: Fiber): void {\n const parent = boundary.return;\n\n if (parent?.tag !== \"suspense-list\") {\n return;\n }\n\n const revealOrder = (parent.pendingProps as { revealOrder?: unknown }).revealOrder;\n\n if (revealOrder === \"forwards\") {\n boundary.sibling = undefined;\n } else if (revealOrder === \"backwards\") {\n parent.child = boundary;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"fiber-reconciler.js","sourceRoot":"","sources":["../src/fiber-reconciler.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ERROR_BOUNDARY_TYPE,\n FORWARD_REF_TYPE,\n Fragment,\n LAZY_TYPE,\n MEMO_TYPE,\n STRICT_MODE_TYPE,\n Suspense,\n SuspenseList,\n createElement,\n isReactCompatElement,\n type LazyType,\n type MemoType,\n type ReactCompatNode,\n} from \"./element.js\";\nimport {\n consumerContext,\n isReactCompatConsumer,\n isReactCompatProvider,\n popContextProvider,\n pushContextProvider,\n useContext,\n type ReactCompatProvider,\n} from \"./context.js\";\nimport { reconcileChildFibers } from \"./fiber-child.js\";\nimport { type Fiber, type FiberRoot } from \"./fiber.js\";\nimport { DidCapture } from \"./fiber-flags.js\";\nimport { mergeLanes, NoLanes } from \"./fiber-lanes.js\";\nimport { isThenable } from \"./thenable.js\";\nimport {\n isClassComponentType,\n resolveDerivedStateFromProps,\n type ClassComponentInstance,\n type ClassComponentType,\n} from \"./class-component.js\";\nimport { areMemoPropsEqual } from \"./prop-comparison.js\";\nimport {\n createHostElement,\n hostElementMatches,\n isHostElement,\n namespaceForHostChildren,\n namespaceForHostElement,\n type HostNamespace,\n} from \"./dom-host-rules.js\";\n\ninterface ContextProviderFiberState {\n provider: ReactCompatProvider<unknown>;\n pushed: boolean;\n}\n\ninterface SuspenseFiberState {\n didSuspend: boolean;\n}\n\nexport function performUnitOfWork(\n root: FiberRoot,\n unit: Fiber,\n): Fiber | undefined {\n let next: Fiber | undefined;\n\n try {\n next = beginWork(unit);\n } catch (error) {\n return captureThrownValue(root, unit, error);\n }\n\n if (next !== undefined) {\n return next;\n }\n\n return completeUnitOfWork(root, unit);\n}\n\nexport function beginWork(unit: Fiber): Fiber | undefined {\n if (unit.tag === \"host-root\") {\n const children = (unit.pendingProps as { children?: ReactCompatNode })\n .children;\n return reconcileChildFibers(\n unit,\n unit.alternate?.child,\n children as ReactCompatNode,\n );\n }\n\n if (unit.tag === \"host-component\") {\n const children = (unit.pendingProps as { children?: ReactCompatNode })\n .children;\n return reconcileChildFibers(\n unit,\n unit.alternate?.child,\n children as ReactCompatNode,\n );\n }\n\n if (unit.tag === \"fragment\") {\n return reconcileChildFibers(\n unit,\n unit.alternate?.child,\n unit.pendingProps as ReactCompatNode,\n );\n }\n\n if (unit.tag === \"strict-mode\") {\n previewStrictModeNode(\n (unit.pendingProps as { children?: ReactCompatNode }).children,\n );\n return reconcileChildFibers(\n unit,\n unit.alternate?.child,\n (unit.pendingProps as { children?: ReactCompatNode }).children,\n );\n }\n\n if (unit.tag === \"function-component\" && isFunctionComponentType(unit.type)) {\n const children = unit.type(unit.pendingProps as Record<string, unknown>);\n return reconcileChildFibers(unit, unit.alternate?.child, children);\n }\n\n if (unit.tag === \"forward-ref\" && isForwardRefType(unit.type)) {\n const props = unit.pendingProps as Record<string, unknown>;\n const children = unit.type.render(props, props.ref ?? null);\n return reconcileChildFibers(unit, unit.alternate?.child, children);\n }\n\n if (unit.tag === \"memo\" && isMemoType(unit.type)) {\n const previousProps = unit.alternate?.memoizedProps as\n | Record<string, unknown>\n | undefined;\n const nextProps = unit.pendingProps as Record<string, unknown>;\n\n if (\n unit.alternate !== undefined &&\n previousProps !== undefined &&\n areMemoPropsEqual(unit.type, previousProps, nextProps)\n ) {\n unit.child = unit.alternate.child;\n return undefined;\n }\n\n return reconcileChildFibers(\n unit,\n unit.alternate?.child,\n createElement(unit.type.type, nextProps),\n );\n }\n\n if (unit.tag === \"context-provider\" && isReactCompatProvider(unit.type)) {\n const props = unit.pendingProps as {\n value: unknown;\n children?: ReactCompatNode;\n };\n pushContextProvider(unit.type, props.value);\n unit.memoizedState = {\n provider: unit.type,\n pushed: true,\n } satisfies ContextProviderFiberState;\n return reconcileChildFibers(unit, unit.alternate?.child, props.children);\n }\n\n if (unit.tag === \"context-consumer\" && isReactCompatConsumer(unit.type)) {\n const props = unit.pendingProps as {\n children?: unknown;\n };\n const render =\n typeof props.children === \"function\"\n ? (props.children as (value: unknown) => ReactCompatNode)\n : () => null;\n return reconcileChildFibers(\n unit,\n unit.alternate?.child,\n render(useContext(consumerContext(unit.type))),\n );\n }\n\n if (unit.tag === \"class-component\" && isClassComponentType(unit.type)) {\n return beginClassComponent(unit, unit.type);\n }\n\n if (unit.tag === \"lazy\" && isLazyType(unit.type)) {\n const lazyType = unit.type;\n\n if (lazyType.status === \"resolved\" && lazyType.resolved !== undefined) {\n return reconcileChildFibers(\n unit,\n unit.alternate?.child,\n createElement(lazyType.resolved, unit.pendingProps as Record<string, unknown>),\n );\n }\n\n if (lazyType.status === \"rejected\") {\n throw lazyType.error;\n }\n\n if (lazyType.status === \"uninitialized\") {\n lazyType.status = \"pending\";\n lazyType.promise = lazyType\n .load()\n .then((module) => {\n lazyType.status = \"resolved\";\n lazyType.resolved = module.default;\n })\n .catch((error: unknown) => {\n lazyType.status = \"rejected\";\n lazyType.error = error;\n });\n }\n\n throw lazyType.promise;\n }\n\n if (unit.tag === \"suspense\" && unit.type === Suspense) {\n unit.memoizedState = { didSuspend: false } satisfies SuspenseFiberState;\n return reconcileChildFibers(\n unit,\n unit.alternate?.child,\n (unit.pendingProps as { children?: ReactCompatNode }).children,\n );\n }\n\n if (unit.tag === \"suspense-list\" && unit.type === SuspenseList) {\n return reconcileChildFibers(\n unit,\n unit.alternate?.child,\n (unit.pendingProps as { children?: ReactCompatNode }).children,\n );\n }\n\n if (unit.tag === \"error-boundary\" && unit.type === ERROR_BOUNDARY_TYPE) {\n return reconcileChildFibers(\n unit,\n unit.alternate?.child,\n (unit.pendingProps as { children?: ReactCompatNode }).children,\n );\n }\n\n return undefined;\n}\n\nfunction previewStrictModeNode(node: ReactCompatNode): void {\n if (\n node === null ||\n node === undefined ||\n typeof node === \"boolean\" ||\n typeof node === \"string\" ||\n typeof node === \"number\"\n ) {\n return;\n }\n\n if (Array.isArray(node)) {\n for (const child of node) {\n previewStrictModeNode(child);\n }\n return;\n }\n\n if (!isReactCompatElement(node)) {\n return;\n }\n\n if (isClassComponentType(node.type)) {\n const instance = new node.type(node.props as Record<string, unknown>);\n previewStrictModeNode(instance.render());\n return;\n }\n\n if (isForwardRefType(node.type)) {\n previewStrictModeNode(\n node.type.render(\n node.props as Record<string, unknown>,\n (node.props as { ref?: unknown }).ref ?? null,\n ),\n );\n return;\n }\n\n if (isMemoType(node.type)) {\n previewStrictModeNode(createElement(node.type.type, node.props));\n return;\n }\n\n if (typeof node.type === \"function\") {\n const component = node.type as (props: Record<string, unknown>) => ReactCompatNode;\n previewStrictModeNode(\n component(node.props as Record<string, unknown>),\n );\n return;\n }\n\n previewStrictModeNode(node.props.children as ReactCompatNode);\n}\n\nexport function completeWork(unit: Fiber): void {\n if (unit.tag === \"context-provider\") {\n popPushedContextProvider(unit);\n }\n\n if (unit.tag === \"host-component\") {\n const current = unit.alternate;\n const parentNamespace = parentHostNamespace(unit);\n const elementNamespace = namespaceForHostElement(parentNamespace, String(unit.type));\n\n unit.stateNode =\n current?.tag === \"host-component\" &&\n current.type === unit.type &&\n isHostElement(current.stateNode) &&\n hostElementMatches(current.stateNode, String(unit.type), elementNamespace)\n ? current.stateNode\n : createHostElement(document, String(unit.type), parentNamespace);\n return;\n }\n\n if (unit.tag === \"host-text\") {\n const current = unit.alternate;\n\n unit.stateNode =\n current?.tag === \"host-text\" && current.stateNode instanceof Text\n ? current.stateNode\n : document.createTextNode(\"\");\n }\n}\n\nfunction parentHostNamespace(unit: Fiber): HostNamespace {\n const ancestors: string[] = [];\n let current = unit.return;\n\n while (current !== undefined) {\n if (current.tag === \"host-component\" && typeof current.type === \"string\") {\n ancestors.push(current.type);\n }\n current = current.return;\n }\n\n let namespace: HostNamespace = \"html\";\n for (let index = ancestors.length - 1; index >= 0; index -= 1) {\n const tagName = ancestors[index] ?? \"\";\n const elementNamespace = namespaceForHostElement(namespace, tagName);\n namespace = namespaceForHostChildren(elementNamespace, tagName);\n }\n\n return namespace;\n}\n\nexport function cleanupUnfinishedWork(unit: Fiber | undefined): void {\n if (unit === undefined) {\n return;\n }\n\n let cursor: Fiber | undefined = unit;\n\n while (cursor !== undefined) {\n cleanupUnfinishedWork(cursor.child);\n popPushedContextProvider(cursor);\n cursor = cursor.sibling;\n }\n}\n\nfunction completeUnitOfWork(\n root: FiberRoot,\n completedWork: Fiber,\n): Fiber | undefined {\n let unit: Fiber | undefined = completedWork;\n\n while (unit !== undefined) {\n completeWork(unit);\n bubbleCompletedProperties(unit);\n\n if (unit.sibling !== undefined) {\n return unit.sibling;\n }\n\n if (unit.return === undefined) {\n unit.memoizedProps = unit.pendingProps;\n root.finishedWork = unit;\n return undefined;\n }\n\n unit.memoizedProps = unit.pendingProps;\n unit = unit.return;\n }\n\n return undefined;\n}\n\nfunction bubbleCompletedProperties(unit: Fiber): void {\n let subtreeFlags = unit.subtreeFlags;\n let childLanes = NoLanes;\n let child = unit.child;\n\n while (child !== undefined) {\n subtreeFlags |= child.subtreeFlags | child.flags;\n childLanes = mergeLanes(childLanes, mergeLanes(child.lanes, child.childLanes));\n child.return = unit;\n child = child.sibling;\n }\n\n unit.subtreeFlags = subtreeFlags;\n unit.childLanes = childLanes;\n}\n\nexport function canReconcileConcurrently(node: ReactCompatNode): boolean {\n if (\n node === null ||\n node === undefined ||\n typeof node === \"boolean\" ||\n typeof node === \"string\" ||\n typeof node === \"number\"\n ) {\n return true;\n }\n\n if (Array.isArray(node)) {\n return node.every(canReconcileConcurrently);\n }\n\n if (!isReactCompatElement(node)) {\n return false;\n }\n\n if (\n typeof node.type === \"string\" ||\n node.type === Fragment ||\n node.type === STRICT_MODE_TYPE\n ) {\n return canReconcileConcurrently(node.props.children as ReactCompatNode);\n }\n\n if (node.type === Suspense || node.type === SuspenseList) {\n return true;\n }\n\n if (node.type === ERROR_BOUNDARY_TYPE) {\n return canReconcileConcurrently(node.props.children as ReactCompatNode);\n }\n\n if (isReactCompatProvider(node.type)) {\n return canReconcileConcurrently(node.props.children as ReactCompatNode);\n }\n\n if (isReactCompatConsumer(node.type)) {\n return typeof node.props.children === \"function\";\n }\n\n if (isMemoType(node.type)) {\n return canReconcileElementTypeConcurrently(node.type.type);\n }\n\n return (\n isFunctionComponentType(node.type) ||\n isForwardRefType(node.type) ||\n isLazyType(node.type) ||\n isClassComponentType(node.type)\n );\n}\n\nfunction popPushedContextProvider(unit: Fiber): void {\n const state = unit.memoizedState as ContextProviderFiberState | undefined;\n\n if (state?.pushed === true) {\n popContextProvider(state.provider);\n state.pushed = false;\n }\n}\n\nfunction isFunctionComponentType(\n type: unknown,\n): type is (props: Record<string, unknown>) => ReactCompatNode {\n return typeof type === \"function\";\n}\n\nfunction isForwardRefType(\n type: unknown,\n): type is {\n $$typeof: typeof FORWARD_REF_TYPE;\n render: (props: Record<string, unknown>, ref: unknown) => ReactCompatNode;\n} {\n return (\n typeof type === \"object\" &&\n type !== null &&\n (type as { $$typeof?: unknown }).$$typeof === FORWARD_REF_TYPE\n );\n}\n\nfunction isMemoType(\n type: unknown,\n): type is MemoType<Record<string, unknown>> {\n return (\n typeof type === \"object\" &&\n type !== null &&\n (type as { $$typeof?: unknown }).$$typeof === MEMO_TYPE\n );\n}\n\nfunction isLazyType(\n type: unknown,\n): type is LazyType<Record<string, unknown>> {\n return (\n typeof type === \"object\" &&\n type !== null &&\n (type as { $$typeof?: unknown }).$$typeof === LAZY_TYPE\n );\n}\n\nfunction canReconcileElementTypeConcurrently(type: unknown): boolean {\n return (\n typeof type === \"string\" ||\n type === Fragment ||\n isFunctionComponentType(type) ||\n isForwardRefType(type) ||\n isLazyType(type) ||\n (isMemoType(type) && canReconcileElementTypeConcurrently(type.type))\n );\n}\n\nfunction captureThrownValue(\n root: FiberRoot,\n source: Fiber,\n thrownValue: unknown,\n): Fiber | undefined {\n let boundary = source.return;\n\n while (boundary !== undefined) {\n if (isThenable(thrownValue) && boundary.tag === \"suspense\") {\n return captureSuspenseBoundary(root, boundary);\n }\n\n if (!isThenable(thrownValue) && boundary.tag === \"error-boundary\") {\n return captureErrorBoundary(root, boundary, thrownValue);\n }\n\n if (!isThenable(thrownValue) && boundary.tag === \"class-component\") {\n const captured = captureClassErrorBoundary(root, boundary, thrownValue);\n\n if (captured !== undefined) {\n return captured;\n }\n }\n\n boundary = boundary.return;\n }\n\n throw thrownValue;\n}\n\nfunction beginClassComponent(\n unit: Fiber,\n type: ClassComponentType,\n): Fiber | undefined {\n const nextProps = unit.pendingProps as Record<string, unknown>;\n const currentInstance =\n unit.alternate?.stateNode instanceof type\n ? unit.alternate.stateNode\n : undefined;\n const instance = currentInstance ?? new type(nextProps);\n const previousState = instance.state ?? {};\n const nextState = resolveDerivedStateFromProps(type, nextProps, previousState);\n\n unit.stateNode = instance;\n\n if (\n unit.alternate !== undefined &&\n instance.shouldComponentUpdate?.(nextProps, nextState) === false\n ) {\n instance.props = nextProps;\n unit.child = unit.alternate.child;\n return undefined;\n }\n\n instance.props = nextProps;\n instance.state = nextState;\n return reconcileChildFibers(unit, unit.alternate?.child, instance.render());\n}\n\nfunction captureClassErrorBoundary(\n root: FiberRoot,\n boundary: Fiber,\n thrownValue: unknown,\n): Fiber | undefined {\n if (!isClassComponentType(boundary.type)) {\n return undefined;\n }\n\n const instance = boundary.stateNode as ClassComponentInstance | undefined;\n\n if (instance === undefined || !isClassErrorBoundary(boundary.type, instance)) {\n return undefined;\n }\n\n cleanupUnfinishedWork(boundary.child);\n boundary.flags |= DidCapture;\n const error = thrownValue instanceof Error ? thrownValue : new Error(String(thrownValue));\n const derivedState = boundary.type.getDerivedStateFromError?.(error);\n\n if (derivedState !== undefined && derivedState !== null) {\n instance.state = {\n ...instance.state,\n ...derivedState,\n };\n }\n\n instance.componentDidCatch?.(error, { componentStack: \"\" });\n boundary.child = reconcileChildFibers(\n boundary,\n boundary.alternate?.child,\n instance.render(),\n );\n return boundary.child ?? completeUnitOfWork(root, boundary);\n}\n\nfunction isClassErrorBoundary(\n type: ClassComponentType,\n instance: ClassComponentInstance,\n): boolean {\n return (\n typeof type.getDerivedStateFromError === \"function\" ||\n typeof instance.componentDidCatch === \"function\"\n );\n}\n\nfunction captureSuspenseBoundary(\n root: FiberRoot,\n boundary: Fiber,\n): Fiber | undefined {\n cleanupUnfinishedWork(boundary.child);\n boundary.flags |= DidCapture;\n boundary.memoizedState = { didSuspend: true } satisfies SuspenseFiberState;\n boundary.child = reconcileChildFibers(\n boundary,\n boundary.alternate?.child,\n (boundary.pendingProps as { fallback?: ReactCompatNode }).fallback,\n );\n applySuspenseListRevealOrder(boundary);\n return boundary.child ?? completeUnitOfWork(root, boundary);\n}\n\nfunction captureErrorBoundary(\n root: FiberRoot,\n boundary: Fiber,\n thrownValue: unknown,\n): Fiber | undefined {\n cleanupUnfinishedWork(boundary.child);\n boundary.flags |= DidCapture;\n const error = thrownValue instanceof Error ? thrownValue : new Error(String(thrownValue));\n const props = boundary.pendingProps as {\n fallback?: unknown;\n onError?: unknown;\n };\n\n if (typeof props.onError === \"function\") {\n (props.onError as (error: Error) => void)(error);\n }\n\n const fallback =\n typeof props.fallback === \"function\"\n ? (props.fallback as (error: Error) => ReactCompatNode)(error)\n : null;\n boundary.child = reconcileChildFibers(boundary, boundary.alternate?.child, fallback);\n return boundary.child ?? completeUnitOfWork(root, boundary);\n}\n\nfunction applySuspenseListRevealOrder(boundary: Fiber): void {\n const parent = boundary.return;\n\n if (parent?.tag !== \"suspense-list\") {\n return;\n }\n\n const revealOrder = (parent.pendingProps as { revealOrder?: unknown }).revealOrder;\n\n if (revealOrder === \"forwards\") {\n boundary.sibling = undefined;\n } else if (revealOrder === \"backwards\") {\n parent.child = boundary;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fiber-work-loop.d.ts","sourceRoot":"","sources":["../src/fiber-work-loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,KAAK,EACV,KAAK,SAAS,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAIL,KAAK,IAAI,EACT,KAAK,KAAK,EACX,MAAM,kBAAkB,CAAC;AAc1B,MAAM,WAAW,uBAAuB;IACtC,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC;CAC7B;AAED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,YAAY,EAAE,KAAK,CAAA;CAAE,GAC5C;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,CAAC;AAE1B,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,CAUtE;AAED,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,OAAO,GACjB,SAAS,GAAG,SAAS,CAEvB;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,KAAK,GAAG,IAAI,GACzB,IAAI,CAYN;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,OAAO,CAOlE;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,GACX,IAAI,CAYN;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,uBAA4B,GACpC,sBAAsB,CAiCxB;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,SAAS,EACf,OAAO,GAAE,uBAA4B,GACpC,sBAAsB,CAGxB;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,KAAK,GACX,IAAI,CAKN;AAeD,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,KAAK,GAAG,IAAI,GACzB,IAAI,
|
|
1
|
+
{"version":3,"file":"fiber-work-loop.d.ts","sourceRoot":"","sources":["../src/fiber-work-loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,KAAK,EACV,KAAK,SAAS,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAIL,KAAK,IAAI,EACT,KAAK,KAAK,EACX,MAAM,kBAAkB,CAAC;AAc1B,MAAM,WAAW,uBAAuB;IACtC,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC;CAC7B;AAED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,YAAY,EAAE,KAAK,CAAA;CAAE,GAC5C;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,CAAC;AAE1B,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,CAUtE;AAED,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,OAAO,GACjB,SAAS,GAAG,SAAS,CAEvB;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,KAAK,GAAG,IAAI,GACzB,IAAI,CAYN;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,OAAO,CAOlE;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,GACX,IAAI,CAYN;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,uBAA4B,GACpC,sBAAsB,CAiCxB;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,SAAS,EACf,OAAO,GAAE,uBAA4B,GACpC,sBAAsB,CAGxB;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,KAAK,GACX,IAAI,CAKN;AAeD,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,KAAK,GAAG,IAAI,GACzB,IAAI,CAgBN"}
|
package/dist/fiber-work-loop.js
CHANGED
|
@@ -87,9 +87,10 @@ export function performSyncWorkOnRoot(root, element, commit) {
|
|
|
87
87
|
fallbackFinishedWork.lanes = lanes;
|
|
88
88
|
fallbackFinishedWork.memoizedProps = { children: element };
|
|
89
89
|
const committedWork = commit();
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
90
|
+
if (committedWork === undefined) {
|
|
91
|
+
root.current = fallbackFinishedWork;
|
|
92
|
+
root.current.stateNode = root;
|
|
93
|
+
}
|
|
93
94
|
root.finishedWork = undefined;
|
|
94
95
|
root.workInProgress = undefined;
|
|
95
96
|
root.workInProgressRootRenderLanes = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fiber-work-loop.js","sourceRoot":"","sources":["../src/fiber-work-loop.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n createFiberRoot,\n createWorkInProgress,\n type Fiber,\n type FiberRoot,\n} from \"./fiber.js\";\nimport {\n getNextLanes,\n markRootUpdated,\n SyncLane,\n type Lane,\n type Lanes,\n} from \"./fiber-lanes.js\";\nimport {\n isPerformingSchedulerWork,\n scheduleCallback,\n shouldYieldToHost,\n type SchedulerCallback,\n} from \"./fiber-scheduler.js\";\nimport {\n cleanupUnfinishedWork,\n performUnitOfWork,\n} from \"./fiber-reconciler.js\";\n\nconst fiberRootsByContainer = new WeakMap<Element, FiberRoot>();\n\nexport interface ConcurrentRenderOptions {\n shouldYield?: () => boolean;\n}\n\nexport type ConcurrentRenderResult =\n | { status: \"completed\"; finishedWork: Fiber }\n | { status: \"yielded\" };\n\nexport function createContainerFiberRoot(container: Element): FiberRoot {\n const existing = fiberRootsByContainer.get(container);\n\n if (existing !== undefined) {\n return existing;\n }\n\n const root = createFiberRoot(container);\n fiberRootsByContainer.set(container, root);\n return root;\n}\n\nexport function getFiberRootForContainer(\n container: Element,\n): FiberRoot | undefined {\n return fiberRootsByContainer.get(container);\n}\n\nexport function enqueueRootRender(\n root: FiberRoot,\n element: unknown,\n lane: Lane,\n commit: () => Fiber | void,\n): void {\n markRootUpdated(root, lane);\n root.workInProgressElement = element;\n\n if ((lane & SyncLane) === 0 && !isPerformingSchedulerWork()) {\n scheduleCallback(getSchedulerPriorityForLanes(lane), () => {\n performSyncWorkOnRoot(root, element, commit);\n });\n return;\n }\n\n performSyncWorkOnRoot(root, element, commit);\n}\n\nexport function shouldYieldAfterUnits(limit: number): () => boolean {\n let units = 0;\n\n return () => {\n units += 1;\n return units > limit;\n };\n}\n\nexport function prepareFreshStack(\n root: FiberRoot,\n element: unknown,\n lanes: Lanes,\n): void {\n const workInProgress = createWorkInProgress(root.current, {\n children: element,\n });\n\n workInProgress.lanes = lanes;\n workInProgress.memoizedProps = { children: element };\n root.workInProgress = workInProgress;\n root.workInProgressRootRenderLanes = lanes;\n root.workInProgressElement = element;\n root.finishedWork = undefined;\n markRootUpdated(root, lanes);\n}\n\nexport function renderRootConcurrent(\n root: FiberRoot,\n lanes: Lanes,\n options: ConcurrentRenderOptions = {},\n): ConcurrentRenderResult {\n if (\n shouldPreemptWorkInProgress(root.workInProgressRootRenderLanes, lanes)\n ) {\n discardWorkInProgress(root);\n }\n\n if (root.workInProgress === undefined) {\n prepareFreshStack(\n root,\n root.workInProgressElement ??\n (root.current.memoizedProps as { children?: unknown } | undefined)?.children,\n lanes,\n );\n }\n\n while (root.workInProgress !== undefined) {\n if (options.shouldYield?.() === true || shouldYieldToHost()) {\n return { status: \"yielded\" };\n }\n\n root.workInProgress = performUnitOfWork(root, root.workInProgress);\n }\n\n const finishedWork = root.finishedWork;\n\n if (finishedWork === undefined) {\n throw new Error(\"Fiber concurrent render completed without finished work.\");\n }\n\n finishedWork.lanes = lanes;\n root.workInProgressRootRenderLanes = 0;\n return { status: \"completed\", finishedWork };\n}\n\nexport function performConcurrentWorkOnRoot(\n root: FiberRoot,\n options: ConcurrentRenderOptions = {},\n): ConcurrentRenderResult {\n const lanes = getNextLanes(root);\n return renderRootConcurrent(root, lanes, options);\n}\n\nexport function scheduleConcurrentWorkOnRoot(\n root: FiberRoot,\n lanes: Lanes,\n): void {\n scheduleCallback(\n getSchedulerPriorityForLanes(lanes),\n createConcurrentRootCallback(root, lanes),\n );\n}\n\nfunction createConcurrentRootCallback(\n root: FiberRoot,\n lanes: Lanes,\n): SchedulerCallback {\n const callback: SchedulerCallback = () => {\n const result = renderRootConcurrent(root, lanes);\n\n return result.status === \"yielded\" ? callback : undefined;\n };\n\n return callback;\n}\n\nexport function performSyncWorkOnRoot(\n root: FiberRoot,\n element: unknown,\n commit: () => Fiber | void,\n): void {\n const lanes = root.pendingLanes;\n const fallbackFinishedWork = createWorkInProgress(root.current, { children: element });\n\n fallbackFinishedWork.lanes = lanes;\n fallbackFinishedWork.memoizedProps = { children: element };\n const committedWork = commit();\n const finishedWork = committedWork ?? fallbackFinishedWork;\n root.current = finishedWork;\n root.current.stateNode = root;\n root.finishedWork = undefined;\n root.workInProgress = undefined;\n root.workInProgressRootRenderLanes = 0;\n root.pendingLanes &= ~lanes;\n root.callbackPriority = root.pendingLanes & -root.pendingLanes;\n}\n\nfunction shouldPreemptWorkInProgress(\n currentLanes: Lanes,\n nextLanes: Lanes,\n): boolean {\n return currentLanes !== 0 && nextLanes !== 0 && nextLanes < currentLanes;\n}\n\nfunction discardWorkInProgress(root: FiberRoot): void {\n cleanupUnfinishedWork(root.current.alternate);\n\n if (root.current.alternate === root.workInProgress) {\n root.current.alternate = undefined;\n }\n\n root.workInProgress = undefined;\n root.workInProgressRootRenderLanes = 0;\n}\n\nfunction getSchedulerPriorityForLanes(\n lanes: Lanes,\n): \"immediate\" | \"user-blocking\" | \"normal\" | \"low\" {\n if ((lanes & 1) !== 0) {\n return \"immediate\";\n }\n\n if ((lanes & 2) !== 0) {\n return \"user-blocking\";\n }\n\n if ((lanes & 8) !== 0) {\n return \"normal\";\n }\n\n return \"low\";\n}\n"]}
|
|
1
|
+
{"version":3,"file":"fiber-work-loop.js","sourceRoot":"","sources":["../src/fiber-work-loop.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n createFiberRoot,\n createWorkInProgress,\n type Fiber,\n type FiberRoot,\n} from \"./fiber.js\";\nimport {\n getNextLanes,\n markRootUpdated,\n SyncLane,\n type Lane,\n type Lanes,\n} from \"./fiber-lanes.js\";\nimport {\n isPerformingSchedulerWork,\n scheduleCallback,\n shouldYieldToHost,\n type SchedulerCallback,\n} from \"./fiber-scheduler.js\";\nimport {\n cleanupUnfinishedWork,\n performUnitOfWork,\n} from \"./fiber-reconciler.js\";\n\nconst fiberRootsByContainer = new WeakMap<Element, FiberRoot>();\n\nexport interface ConcurrentRenderOptions {\n shouldYield?: () => boolean;\n}\n\nexport type ConcurrentRenderResult =\n | { status: \"completed\"; finishedWork: Fiber }\n | { status: \"yielded\" };\n\nexport function createContainerFiberRoot(container: Element): FiberRoot {\n const existing = fiberRootsByContainer.get(container);\n\n if (existing !== undefined) {\n return existing;\n }\n\n const root = createFiberRoot(container);\n fiberRootsByContainer.set(container, root);\n return root;\n}\n\nexport function getFiberRootForContainer(\n container: Element,\n): FiberRoot | undefined {\n return fiberRootsByContainer.get(container);\n}\n\nexport function enqueueRootRender(\n root: FiberRoot,\n element: unknown,\n lane: Lane,\n commit: () => Fiber | void,\n): void {\n markRootUpdated(root, lane);\n root.workInProgressElement = element;\n\n if ((lane & SyncLane) === 0 && !isPerformingSchedulerWork()) {\n scheduleCallback(getSchedulerPriorityForLanes(lane), () => {\n performSyncWorkOnRoot(root, element, commit);\n });\n return;\n }\n\n performSyncWorkOnRoot(root, element, commit);\n}\n\nexport function shouldYieldAfterUnits(limit: number): () => boolean {\n let units = 0;\n\n return () => {\n units += 1;\n return units > limit;\n };\n}\n\nexport function prepareFreshStack(\n root: FiberRoot,\n element: unknown,\n lanes: Lanes,\n): void {\n const workInProgress = createWorkInProgress(root.current, {\n children: element,\n });\n\n workInProgress.lanes = lanes;\n workInProgress.memoizedProps = { children: element };\n root.workInProgress = workInProgress;\n root.workInProgressRootRenderLanes = lanes;\n root.workInProgressElement = element;\n root.finishedWork = undefined;\n markRootUpdated(root, lanes);\n}\n\nexport function renderRootConcurrent(\n root: FiberRoot,\n lanes: Lanes,\n options: ConcurrentRenderOptions = {},\n): ConcurrentRenderResult {\n if (\n shouldPreemptWorkInProgress(root.workInProgressRootRenderLanes, lanes)\n ) {\n discardWorkInProgress(root);\n }\n\n if (root.workInProgress === undefined) {\n prepareFreshStack(\n root,\n root.workInProgressElement ??\n (root.current.memoizedProps as { children?: unknown } | undefined)?.children,\n lanes,\n );\n }\n\n while (root.workInProgress !== undefined) {\n if (options.shouldYield?.() === true || shouldYieldToHost()) {\n return { status: \"yielded\" };\n }\n\n root.workInProgress = performUnitOfWork(root, root.workInProgress);\n }\n\n const finishedWork = root.finishedWork;\n\n if (finishedWork === undefined) {\n throw new Error(\"Fiber concurrent render completed without finished work.\");\n }\n\n finishedWork.lanes = lanes;\n root.workInProgressRootRenderLanes = 0;\n return { status: \"completed\", finishedWork };\n}\n\nexport function performConcurrentWorkOnRoot(\n root: FiberRoot,\n options: ConcurrentRenderOptions = {},\n): ConcurrentRenderResult {\n const lanes = getNextLanes(root);\n return renderRootConcurrent(root, lanes, options);\n}\n\nexport function scheduleConcurrentWorkOnRoot(\n root: FiberRoot,\n lanes: Lanes,\n): void {\n scheduleCallback(\n getSchedulerPriorityForLanes(lanes),\n createConcurrentRootCallback(root, lanes),\n );\n}\n\nfunction createConcurrentRootCallback(\n root: FiberRoot,\n lanes: Lanes,\n): SchedulerCallback {\n const callback: SchedulerCallback = () => {\n const result = renderRootConcurrent(root, lanes);\n\n return result.status === \"yielded\" ? callback : undefined;\n };\n\n return callback;\n}\n\nexport function performSyncWorkOnRoot(\n root: FiberRoot,\n element: unknown,\n commit: () => Fiber | void,\n): void {\n const lanes = root.pendingLanes;\n const fallbackFinishedWork = createWorkInProgress(root.current, { children: element });\n\n fallbackFinishedWork.lanes = lanes;\n fallbackFinishedWork.memoizedProps = { children: element };\n const committedWork = commit();\n if (committedWork === undefined) {\n root.current = fallbackFinishedWork;\n root.current.stateNode = root;\n }\n root.finishedWork = undefined;\n root.workInProgress = undefined;\n root.workInProgressRootRenderLanes = 0;\n root.pendingLanes &= ~lanes;\n root.callbackPriority = root.pendingLanes & -root.pendingLanes;\n}\n\nfunction shouldPreemptWorkInProgress(\n currentLanes: Lanes,\n nextLanes: Lanes,\n): boolean {\n return currentLanes !== 0 && nextLanes !== 0 && nextLanes < currentLanes;\n}\n\nfunction discardWorkInProgress(root: FiberRoot): void {\n cleanupUnfinishedWork(root.current.alternate);\n\n if (root.current.alternate === root.workInProgress) {\n root.current.alternate = undefined;\n }\n\n root.workInProgress = undefined;\n root.workInProgressRootRenderLanes = 0;\n}\n\nfunction getSchedulerPriorityForLanes(\n lanes: Lanes,\n): \"immediate\" | \"user-blocking\" | \"normal\" | \"low\" {\n if ((lanes & 1) !== 0) {\n return \"immediate\";\n }\n\n if ((lanes & 2) !== 0) {\n return \"user-blocking\";\n }\n\n if ((lanes & 8) !== 0) {\n return \"normal\";\n }\n\n return \"low\";\n}\n"]}
|
package/dist/fiber.d.ts
CHANGED
|
@@ -15,10 +15,14 @@ export interface Fiber {
|
|
|
15
15
|
stateNode: unknown;
|
|
16
16
|
flags: Flags;
|
|
17
17
|
subtreeFlags: Flags;
|
|
18
|
+
childListChanged: boolean;
|
|
19
|
+
subtreeChildListChanged: boolean;
|
|
18
20
|
deletions: Fiber[] | undefined;
|
|
19
21
|
lanes: Lanes;
|
|
20
22
|
childLanes: Lanes;
|
|
21
23
|
hydrateExisting: boolean;
|
|
24
|
+
hasRefSubtree: boolean;
|
|
25
|
+
hostChildListChanged: boolean;
|
|
22
26
|
}
|
|
23
27
|
export interface FiberRoot {
|
|
24
28
|
container: Element;
|
|
@@ -35,6 +39,7 @@ export interface FiberRoot {
|
|
|
35
39
|
workInProgressRootRenderLanes: Lanes;
|
|
36
40
|
workInProgressElement: unknown;
|
|
37
41
|
hydrationState: FiberHydrationState | undefined;
|
|
42
|
+
refCleanupKnown: boolean;
|
|
38
43
|
}
|
|
39
44
|
export interface FiberHydrationState {
|
|
40
45
|
parent: ParentNode;
|
package/dist/fiber.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fiber.d.ts","sourceRoot":"","sources":["../src/fiber.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAW,KAAK,IAAI,EAAE,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAElE,MAAM,MAAM,QAAQ,GAChB,WAAW,GACX,gBAAgB,GAChB,WAAW,GACX,UAAU,GACV,oBAAoB,GACpB,aAAa,GACb,iBAAiB,GACjB,kBAAkB,GAClB,kBAAkB,GAClB,QAAQ,GACR,MAAM,GACN,MAAM,GACN,UAAU,GACV,aAAa,GACb,UAAU,GACV,eAAe,GACf,gBAAgB,CAAC;AAErB,MAAM,WAAW,KAAK;IACpB,GAAG,EAAE,QAAQ,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,KAAK,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,OAAO,EAAE,KAAK,GAAG,SAAS,CAAC;IAC3B,SAAS,EAAE,KAAK,GAAG,SAAS,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,EAAE,KAAK,CAAC;IACpB,SAAS,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC/B,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,KAAK,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"fiber.d.ts","sourceRoot":"","sources":["../src/fiber.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAW,KAAK,IAAI,EAAE,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAElE,MAAM,MAAM,QAAQ,GAChB,WAAW,GACX,gBAAgB,GAChB,WAAW,GACX,UAAU,GACV,oBAAoB,GACpB,aAAa,GACb,iBAAiB,GACjB,kBAAkB,GAClB,kBAAkB,GAClB,QAAQ,GACR,MAAM,GACN,MAAM,GACN,UAAU,GACV,aAAa,GACb,UAAU,GACV,eAAe,GACf,gBAAgB,CAAC;AAErB,MAAM,WAAW,KAAK;IACpB,GAAG,EAAE,QAAQ,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,KAAK,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,OAAO,EAAE,KAAK,GAAG,SAAS,CAAC;IAC3B,SAAS,EAAE,KAAK,GAAG,SAAS,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,EAAE,KAAK,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,uBAAuB,EAAE,OAAO,CAAC;IACjC,SAAS,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC/B,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,KAAK,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,KAAK,CAAC;IACf,YAAY,EAAE,KAAK,GAAG,SAAS,CAAC;IAChC,YAAY,EAAE,KAAK,CAAC;IACpB,cAAc,EAAE,KAAK,CAAC;IACtB,WAAW,EAAE,KAAK,CAAC;IACnB,YAAY,EAAE,KAAK,CAAC;IACpB,cAAc,EAAE,KAAK,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,EAAE,IAAI,CAAC;IACvB,cAAc,EAAE,KAAK,GAAG,SAAS,CAAC;IAClC,6BAA6B,EAAE,KAAK,CAAC;IACrC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,cAAc,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAChD,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,UAAU,CAAC;IACnB,kBAAkB,EAAE,IAAI,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,WAAW,CACzB,GAAG,EAAE,QAAQ,EACb,YAAY,GAAE,OAAmB,EACjC,GAAG,CAAC,EAAE,MAAM,GACX,KAAK,CAwBP;AAED,wBAAgB,mBAAmB,IAAI,KAAK,CAE3C;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,CAqB7D;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,KAAK,EACd,YAAY,EAAE,OAAO,GACpB,KAAK,CA6BP"}
|
package/dist/fiber.js
CHANGED
|
@@ -15,10 +15,14 @@ export function createFiber(tag, pendingProps = undefined, key) {
|
|
|
15
15
|
stateNode: undefined,
|
|
16
16
|
flags: NoFlags,
|
|
17
17
|
subtreeFlags: NoFlags,
|
|
18
|
+
childListChanged: false,
|
|
19
|
+
subtreeChildListChanged: false,
|
|
18
20
|
deletions: undefined,
|
|
19
21
|
lanes: NoLanes,
|
|
20
22
|
childLanes: NoLanes,
|
|
21
23
|
hydrateExisting: false,
|
|
24
|
+
hasRefSubtree: false,
|
|
25
|
+
hostChildListChanged: false,
|
|
22
26
|
};
|
|
23
27
|
}
|
|
24
28
|
export function createHostRootFiber() {
|
|
@@ -41,6 +45,7 @@ export function createFiberRoot(container) {
|
|
|
41
45
|
workInProgressRootRenderLanes: NoLanes,
|
|
42
46
|
workInProgressElement: undefined,
|
|
43
47
|
hydrationState: undefined,
|
|
48
|
+
refCleanupKnown: false,
|
|
44
49
|
};
|
|
45
50
|
current.stateNode = root;
|
|
46
51
|
return root;
|
|
@@ -58,6 +63,8 @@ export function createWorkInProgress(current, pendingProps) {
|
|
|
58
63
|
workInProgress.pendingProps = pendingProps;
|
|
59
64
|
workInProgress.flags = NoFlags;
|
|
60
65
|
workInProgress.subtreeFlags = NoFlags;
|
|
66
|
+
workInProgress.childListChanged = false;
|
|
67
|
+
workInProgress.subtreeChildListChanged = false;
|
|
61
68
|
workInProgress.deletions = undefined;
|
|
62
69
|
}
|
|
63
70
|
workInProgress.child = current.child;
|
|
@@ -68,6 +75,8 @@ export function createWorkInProgress(current, pendingProps) {
|
|
|
68
75
|
workInProgress.lanes = current.lanes;
|
|
69
76
|
workInProgress.childLanes = current.childLanes;
|
|
70
77
|
workInProgress.hydrateExisting = false;
|
|
78
|
+
workInProgress.hasRefSubtree = current.hasRefSubtree;
|
|
79
|
+
workInProgress.hostChildListChanged = current.hostChildListChanged;
|
|
71
80
|
return workInProgress;
|
|
72
81
|
}
|
|
73
82
|
//# sourceMappingURL=fiber.js.map
|
package/dist/fiber.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fiber.js","sourceRoot":"","sources":["../src/fiber.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAc,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAyB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"fiber.js","sourceRoot":"","sources":["../src/fiber.ts"],"names":[],"mappings":"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","sourcesContent":["import { NoFlags, type Flags } from \"./fiber-flags.js\";\nimport { NoLanes, type Lane, type Lanes } from \"./fiber-lanes.js\";\n\nexport type FiberTag =\n | \"host-root\"\n | \"host-component\"\n | \"host-text\"\n | \"fragment\"\n | \"function-component\"\n | \"forward-ref\"\n | \"class-component\"\n | \"context-provider\"\n | \"context-consumer\"\n | \"portal\"\n | \"memo\"\n | \"lazy\"\n | \"profiler\"\n | \"strict-mode\"\n | \"suspense\"\n | \"suspense-list\"\n | \"error-boundary\";\n\nexport interface Fiber {\n tag: FiberTag;\n type: unknown;\n key: string | undefined;\n pendingProps: unknown;\n memoizedProps: unknown;\n memoizedState: unknown;\n return: Fiber | undefined;\n child: Fiber | undefined;\n sibling: Fiber | undefined;\n alternate: Fiber | undefined;\n stateNode: unknown;\n flags: Flags;\n subtreeFlags: Flags;\n childListChanged: boolean;\n subtreeChildListChanged: boolean;\n deletions: Fiber[] | undefined;\n lanes: Lanes;\n childLanes: Lanes;\n hydrateExisting: boolean;\n hasRefSubtree: boolean;\n hostChildListChanged: boolean;\n}\n\nexport interface FiberRoot {\n container: Element;\n current: Fiber;\n finishedWork: Fiber | undefined;\n pendingLanes: Lanes;\n suspendedLanes: Lanes;\n pingedLanes: Lanes;\n expiredLanes: Lanes;\n entangledLanes: Lanes;\n callbackNode: unknown;\n callbackPriority: Lane;\n workInProgress: Fiber | undefined;\n workInProgressRootRenderLanes: Lanes;\n workInProgressElement: unknown;\n hydrationState: FiberHydrationState | undefined;\n refCleanupKnown: boolean;\n}\n\nexport interface FiberHydrationState {\n parent: ParentNode;\n nextHydratableNode: Node | null;\n before: ChildNode | null;\n after: ChildNode | null;\n resumeId?: string;\n}\n\nexport function createFiber(\n tag: FiberTag,\n pendingProps: unknown = undefined,\n key?: string,\n): Fiber {\n return {\n tag,\n type: undefined,\n key,\n pendingProps,\n memoizedProps: undefined,\n memoizedState: undefined,\n return: undefined,\n child: undefined,\n sibling: undefined,\n alternate: undefined,\n stateNode: undefined,\n flags: NoFlags,\n subtreeFlags: NoFlags,\n childListChanged: false,\n subtreeChildListChanged: false,\n deletions: undefined,\n lanes: NoLanes,\n childLanes: NoLanes,\n hydrateExisting: false,\n hasRefSubtree: false,\n hostChildListChanged: false,\n };\n}\n\nexport function createHostRootFiber(): Fiber {\n return createFiber(\"host-root\", undefined);\n}\n\nexport function createFiberRoot(container: Element): FiberRoot {\n const current = createHostRootFiber();\n const root: FiberRoot = {\n container,\n current,\n finishedWork: undefined,\n pendingLanes: NoLanes,\n suspendedLanes: NoLanes,\n pingedLanes: NoLanes,\n expiredLanes: NoLanes,\n entangledLanes: NoLanes,\n callbackNode: undefined,\n callbackPriority: NoLanes,\n workInProgress: undefined,\n workInProgressRootRenderLanes: NoLanes,\n workInProgressElement: undefined,\n hydrationState: undefined,\n refCleanupKnown: false,\n };\n current.stateNode = root;\n return root;\n}\n\nexport function createWorkInProgress(\n current: Fiber,\n pendingProps: unknown,\n): Fiber {\n let workInProgress = current.alternate;\n\n if (workInProgress === undefined) {\n workInProgress = createFiber(current.tag, pendingProps, current.key);\n workInProgress.type = current.type;\n workInProgress.stateNode = current.stateNode;\n workInProgress.alternate = current;\n current.alternate = workInProgress;\n } else {\n workInProgress.pendingProps = pendingProps;\n workInProgress.flags = NoFlags;\n workInProgress.subtreeFlags = NoFlags;\n workInProgress.childListChanged = false;\n workInProgress.subtreeChildListChanged = false;\n workInProgress.deletions = undefined;\n }\n\n workInProgress.child = current.child;\n workInProgress.sibling = current.sibling;\n workInProgress.return = current.return;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.lanes = current.lanes;\n workInProgress.childLanes = current.childLanes;\n workInProgress.hydrateExisting = false;\n workInProgress.hasRefSubtree = current.hasRefSubtree;\n workInProgress.hostChildListChanged = current.hostChildListChanged;\n return workInProgress;\n}\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { useCallback, useDebugValue, useDeferredValue, useEffectEvent, useEffect, useId, useImperativeHandle, useInsertionEffect, useLayoutEffect, useMemo, useOptimistic, useReducer, useRef, useState, useSyncExternalStore, use, useActionState, startTransition, unstable_useCacheRefresh, useTransition, version, } from "./hooks.js";
|
|
2
|
+
export type { StartTransition, TransitionScope } from "./hooks.js";
|
|
3
|
+
//# sourceMappingURL=hooks-entry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-entry.d.ts","sourceRoot":"","sources":["../src/hooks-entry.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,KAAK,EACL,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,OAAO,EACP,aAAa,EACb,UAAU,EACV,MAAM,EACN,QAAQ,EACR,oBAAoB,EACpB,GAAG,EACH,cAAc,EACd,eAAe,EACf,wBAAwB,EACxB,aAAa,EACb,OAAO,GACR,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { useCallback, useDebugValue, useDeferredValue, useEffectEvent, useEffect, useId, useImperativeHandle, useInsertionEffect, useLayoutEffect, useMemo, useOptimistic, useReducer, useRef, useState, useSyncExternalStore, use, useActionState, startTransition, unstable_useCacheRefresh, useTransition, version, } from "./hooks.js";
|
|
2
|
+
//# sourceMappingURL=hooks-entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-entry.js","sourceRoot":"","sources":["../src/hooks-entry.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,KAAK,EACL,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,OAAO,EACP,aAAa,EACb,UAAU,EACV,MAAM,EACN,QAAQ,EACR,oBAAoB,EACpB,GAAG,EACH,cAAc,EACd,eAAe,EACf,wBAAwB,EACxB,aAAa,EACb,OAAO,GACR,MAAM,YAAY,CAAC","sourcesContent":["export {\n useCallback,\n useDebugValue,\n useDeferredValue,\n useEffectEvent,\n useEffect,\n useId,\n useImperativeHandle,\n useInsertionEffect,\n useLayoutEffect,\n useMemo,\n useOptimistic,\n useReducer,\n useRef,\n useState,\n useSyncExternalStore,\n use,\n useActionState,\n startTransition,\n unstable_useCacheRefresh,\n useTransition,\n version,\n} from \"./hooks.js\";\nexport type { StartTransition, TransitionScope } from \"./hooks.js\";\n"]}
|
package/dist/hooks.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type ReactCompatContextLike } from "./context.js";
|
|
2
2
|
export interface RootRuntime {
|
|
3
3
|
currentElement?: unknown;
|
|
4
4
|
instances: Map<string, ComponentInstance>;
|
|
@@ -12,11 +12,22 @@ export interface RootRuntime {
|
|
|
12
12
|
pendingEffects: PendingEffect[];
|
|
13
13
|
externalStoreChecks: ExternalStoreCheck[];
|
|
14
14
|
portalContainers: Set<Element>;
|
|
15
|
+
portalNodes: Map<Element, Set<Node>>;
|
|
15
16
|
idCounter: number;
|
|
16
17
|
identifierPrefix: string;
|
|
17
18
|
idMode: "client" | "server";
|
|
18
19
|
strictModeDepth: number;
|
|
20
|
+
strictReplayDepth: number;
|
|
21
|
+
strictMemoCapture: unknown[] | undefined;
|
|
22
|
+
strictMemoCaptureByHook: Map<string, unknown> | undefined;
|
|
23
|
+
strictMemoReplay: {
|
|
24
|
+
values: readonly unknown[];
|
|
25
|
+
index: number;
|
|
26
|
+
} | undefined;
|
|
27
|
+
strictMemoReplayByHook: ReadonlyMap<string, unknown> | undefined;
|
|
19
28
|
profilerFlushDepth: number;
|
|
29
|
+
effectFlushPhase: "insertion" | "layout" | "normal" | undefined;
|
|
30
|
+
externalStoreUpdate: boolean;
|
|
20
31
|
rerender(priority?: RenderPriority): void;
|
|
21
32
|
beginRender(): void;
|
|
22
33
|
endRender(committed?: boolean): void;
|
|
@@ -24,9 +35,13 @@ export interface RootRuntime {
|
|
|
24
35
|
dispose(): void;
|
|
25
36
|
}
|
|
26
37
|
interface ComponentInstance {
|
|
38
|
+
owner: unknown | undefined;
|
|
39
|
+
path: string;
|
|
27
40
|
hooks: HookSlot[];
|
|
28
41
|
hookIndex: number;
|
|
29
42
|
dirty: boolean;
|
|
43
|
+
disposed?: boolean;
|
|
44
|
+
contextDependencies?: Map<ReactCompatContextLike<unknown>, unknown>;
|
|
30
45
|
devToolsHooks: DevToolsHookValue[];
|
|
31
46
|
devToolsHookTypes: string[];
|
|
32
47
|
devToolsHookSuppressionDepth: number;
|
|
@@ -110,6 +125,7 @@ export type DevToolsHookValue = {
|
|
|
110
125
|
type HookSlot = {
|
|
111
126
|
kind: "state";
|
|
112
127
|
value: unknown;
|
|
128
|
+
hostCommitValue?: unknown;
|
|
113
129
|
} | {
|
|
114
130
|
kind: "action-state";
|
|
115
131
|
state: unknown;
|
|
@@ -126,6 +142,7 @@ type HookSlot = {
|
|
|
126
142
|
} | {
|
|
127
143
|
kind: "store";
|
|
128
144
|
value: unknown;
|
|
145
|
+
hasMounted?: boolean;
|
|
129
146
|
} | {
|
|
130
147
|
kind: "ref";
|
|
131
148
|
value: {
|
|
@@ -145,6 +162,7 @@ type HookSlot = {
|
|
|
145
162
|
deps?: readonly unknown[];
|
|
146
163
|
cleanup?: () => void;
|
|
147
164
|
disposed?: boolean;
|
|
165
|
+
mounted?: boolean;
|
|
148
166
|
strictReplay?: boolean;
|
|
149
167
|
};
|
|
150
168
|
export declare const version = "19.2.6";
|
|
@@ -158,6 +176,7 @@ export interface RootRuntimeOptions {
|
|
|
158
176
|
export interface RuntimeSnapshot {
|
|
159
177
|
instanceKeys: Set<string>;
|
|
160
178
|
portalContainers: Set<Element>;
|
|
179
|
+
portalNodes: Map<Element, Set<Node>>;
|
|
161
180
|
pendingInsertionEffectsLength: number;
|
|
162
181
|
pendingLayoutEffectsLength: number;
|
|
163
182
|
pendingEffectsLength: number;
|
|
@@ -167,6 +186,14 @@ export interface RuntimeSnapshot {
|
|
|
167
186
|
identifierPrefix: string;
|
|
168
187
|
idMode: "client" | "server";
|
|
169
188
|
strictModeDepth: number;
|
|
189
|
+
strictReplayDepth: number;
|
|
190
|
+
strictMemoCapture: unknown[] | undefined;
|
|
191
|
+
strictMemoCaptureByHook: Map<string, unknown> | undefined;
|
|
192
|
+
strictMemoReplay: {
|
|
193
|
+
values: readonly unknown[];
|
|
194
|
+
index: number;
|
|
195
|
+
} | undefined;
|
|
196
|
+
strictMemoReplayByHook: ReadonlyMap<string, unknown> | undefined;
|
|
170
197
|
profilerFlushDepth: number;
|
|
171
198
|
}
|
|
172
199
|
export declare function createRootRuntime(rerender: (priority?: RenderPriority) => void, options?: RootRuntimeOptions): RootRuntime;
|
|
@@ -174,11 +201,20 @@ export declare function createCacheScope(): CacheScope;
|
|
|
174
201
|
export declare function refreshCacheScope(scope: CacheScope): void;
|
|
175
202
|
export declare function runWithCacheScope<T>(scope: CacheScope, callback: () => T): T;
|
|
176
203
|
export declare function renderWithProfiler<T>(runtime: RootRuntime, path: string, props: Record<string, unknown>, render: () => T): T;
|
|
177
|
-
export declare function renderWithRootRuntime<T>(runtime: RootRuntime, path: string, render: () => T): T;
|
|
204
|
+
export declare function renderWithRootRuntime<T>(runtime: RootRuntime, path: string, render: () => T, owner?: unknown): T;
|
|
205
|
+
export declare function hasChangedContextDependency(runtime: RootRuntime, keys: readonly string[]): boolean;
|
|
206
|
+
export declare function hasContextDependency(runtime: RootRuntime, keys: readonly string[]): boolean;
|
|
178
207
|
export declare function getDevToolsHookState(runtime: RootRuntime, path: string): DevToolsHookState | undefined;
|
|
179
208
|
export declare function renderWithStrictMode<T>(runtime: RootRuntime, render: () => T): T;
|
|
209
|
+
export declare function renderWithStrictModeMemoCapture<T>(runtime: RootRuntime, render: () => T): {
|
|
210
|
+
result: T;
|
|
211
|
+
memoValues: readonly unknown[];
|
|
212
|
+
memoValuesByHook: ReadonlyMap<string, unknown>;
|
|
213
|
+
};
|
|
214
|
+
export declare function renderStrictModeReplay<T>(runtime: RootRuntime, memoValues: readonly unknown[], memoValuesByHook: ReadonlyMap<string, unknown>, render: () => T): T;
|
|
180
215
|
export declare function takeRuntimeSnapshot(runtime: RootRuntime): RuntimeSnapshot;
|
|
181
216
|
export declare function restoreRuntimeSnapshot(runtime: RootRuntime, snapshot: RuntimeSnapshot): void;
|
|
217
|
+
export declare function clearRuntimePortalNodes(runtime: RootRuntime): void;
|
|
182
218
|
export declare function useState<T>(initial: T | (() => T)): [T, (value: T | ((previous: T) => T)) => void];
|
|
183
219
|
export declare function useReducer<TState, TAction, TInitial = TState>(reducer: (state: TState, action: TAction) => TState, initialArg: TInitial, init?: (initialArg: TInitial) => TState): [TState, (action: TAction) => void];
|
|
184
220
|
export declare function useRef<T>(initial: T): {
|
|
@@ -202,14 +238,12 @@ export declare function cacheSignal(): AbortSignal | null;
|
|
|
202
238
|
export declare function captureOwnerStack(): string | null;
|
|
203
239
|
export declare function unstable_useCacheRefresh(): () => void;
|
|
204
240
|
export declare function hasStableExternalStores(runtime: RootRuntime): boolean;
|
|
205
|
-
export declare function renderToString<TProps>(component: ((props: TProps) => ReactCompatNode) | (new (props: TProps) => {
|
|
206
|
-
render(): ReactCompatNode;
|
|
207
|
-
}), props?: TProps, options?: RootRuntimeOptions): string;
|
|
208
241
|
export type TransitionScope = () => void;
|
|
209
242
|
export type StartTransition = (scope: TransitionScope) => void;
|
|
210
243
|
export declare function startTransition(scope: TransitionScope): void;
|
|
211
244
|
export declare function runWithEventPriority<T>(priority: EventPriority, callback: () => T): T;
|
|
212
245
|
export declare function flushSyncUpdates<T>(callback: () => T): T;
|
|
246
|
+
export declare function runWithHostCommit<T>(callback: () => T): T;
|
|
213
247
|
export declare function useTransition(): [boolean, StartTransition];
|
|
214
248
|
export declare function useDeferredValue<T>(value: T): T;
|
|
215
249
|
export {};
|