@reckona/mreact-compat 0.0.139 → 0.0.141
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/dist/dom-props.d.ts.map +1 -1
- package/dist/dom-props.js +58 -44
- package/dist/dom-props.js.map +1 -1
- package/dist/element.d.ts +1 -0
- package/dist/element.d.ts.map +1 -1
- package/dist/element.js +21 -3
- package/dist/element.js.map +1 -1
- package/dist/event-listeners.d.ts +1 -4
- package/dist/event-listeners.d.ts.map +1 -1
- package/dist/event-listeners.js +2 -1
- package/dist/event-listeners.js.map +1 -1
- package/dist/events.d.ts +2 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +82 -3
- package/dist/events.js.map +1 -1
- package/dist/fiber-child.d.ts.map +1 -1
- package/dist/fiber-child.js +44 -0
- package/dist/fiber-child.js.map +1 -1
- package/dist/fiber-commit.d.ts.map +1 -1
- package/dist/fiber-commit.js +70 -0
- package/dist/fiber-commit.js.map +1 -1
- package/dist/host-event-binder.d.ts +1 -1
- package/dist/host-event-binder.d.ts.map +1 -1
- package/dist/host-event-binder.js +1 -1
- package/dist/host-event-binder.js.map +1 -1
- package/dist/host-reconciler.d.ts.map +1 -1
- package/dist/host-reconciler.js +28 -13
- package/dist/host-reconciler.js.map +1 -1
- package/package.json +3 -3
- package/src/dom-props.ts +119 -51
- package/src/element.ts +33 -4
- package/src/event-listeners.ts +3 -5
- package/src/events.ts +100 -3
- package/src/fiber-child.ts +67 -0
- package/src/fiber-commit.ts +92 -0
- package/src/host-event-binder.ts +2 -0
- package/src/host-reconciler.ts +37 -16
package/dist/fiber-commit.js
CHANGED
|
@@ -14,6 +14,9 @@ export function commitFiberRoot(root, options = {}) {
|
|
|
14
14
|
});
|
|
15
15
|
}
|
|
16
16
|
commitHostFiberRoot(root, finishedWork, options);
|
|
17
|
+
if (hasRemovedAlternateChildren(finishedWork)) {
|
|
18
|
+
detachRemovedAlternateChildren(finishedWork);
|
|
19
|
+
}
|
|
17
20
|
root.current = finishedWork;
|
|
18
21
|
root.current.stateNode = root;
|
|
19
22
|
markRootFinished(root, finishedWork.lanes);
|
|
@@ -27,6 +30,73 @@ export function detachFiberRefs(fiber) {
|
|
|
27
30
|
detachRef(record.ref);
|
|
28
31
|
}
|
|
29
32
|
}
|
|
33
|
+
function detachRemovedAlternateChildren(fiber) {
|
|
34
|
+
let cursor = fiber;
|
|
35
|
+
while (cursor !== undefined) {
|
|
36
|
+
const retained = collectRetainedAlternateChildren(cursor.child);
|
|
37
|
+
let alternateChild = cursor.alternate?.child;
|
|
38
|
+
while (alternateChild !== undefined) {
|
|
39
|
+
const nextAlternateChild = alternateChild.sibling;
|
|
40
|
+
if (!retained.has(alternateChild)) {
|
|
41
|
+
detachFiberSubtree(alternateChild, retained);
|
|
42
|
+
}
|
|
43
|
+
alternateChild = nextAlternateChild;
|
|
44
|
+
}
|
|
45
|
+
if (cursor.deletions !== undefined) {
|
|
46
|
+
for (const deleted of cursor.deletions) {
|
|
47
|
+
detachFiberSubtree(deleted, retained);
|
|
48
|
+
}
|
|
49
|
+
cursor.deletions = undefined;
|
|
50
|
+
}
|
|
51
|
+
detachRemovedAlternateChildren(cursor.child);
|
|
52
|
+
cursor = cursor.sibling;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function hasRemovedAlternateChildren(fiber) {
|
|
56
|
+
return (fiber.childListChanged ||
|
|
57
|
+
fiber.subtreeChildListChanged ||
|
|
58
|
+
fiber.deletions !== undefined);
|
|
59
|
+
}
|
|
60
|
+
function collectRetainedAlternateChildren(fiber) {
|
|
61
|
+
const retained = new Set();
|
|
62
|
+
let cursor = fiber;
|
|
63
|
+
while (cursor !== undefined) {
|
|
64
|
+
retained.add(cursor);
|
|
65
|
+
if (cursor.alternate !== undefined) {
|
|
66
|
+
retained.add(cursor.alternate);
|
|
67
|
+
}
|
|
68
|
+
cursor = cursor.sibling;
|
|
69
|
+
}
|
|
70
|
+
return retained;
|
|
71
|
+
}
|
|
72
|
+
function detachFiberSubtree(fiber, preserve) {
|
|
73
|
+
const stack = [fiber];
|
|
74
|
+
const seen = new Set();
|
|
75
|
+
while (stack.length > 0) {
|
|
76
|
+
const current = stack.pop();
|
|
77
|
+
if (current === undefined || seen.has(current) || preserve.has(current)) {
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
seen.add(current);
|
|
81
|
+
let child = current.child;
|
|
82
|
+
while (child !== undefined) {
|
|
83
|
+
stack.push(child);
|
|
84
|
+
child = child.sibling;
|
|
85
|
+
}
|
|
86
|
+
if (current.alternate !== undefined) {
|
|
87
|
+
stack.push(current.alternate);
|
|
88
|
+
}
|
|
89
|
+
current.return = undefined;
|
|
90
|
+
current.child = undefined;
|
|
91
|
+
current.sibling = undefined;
|
|
92
|
+
current.alternate = undefined;
|
|
93
|
+
current.pendingProps = undefined;
|
|
94
|
+
current.memoizedProps = undefined;
|
|
95
|
+
current.memoizedState = undefined;
|
|
96
|
+
current.stateNode = undefined;
|
|
97
|
+
current.deletions = undefined;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
30
100
|
function cleanupDeletedRefs(previous, next) {
|
|
31
101
|
const nextRefs = new Set();
|
|
32
102
|
collectRefRecords(next, nextRefs);
|
package/dist/fiber-commit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fiber-commit.js","sourceRoot":"","sources":["../src/fiber-commit.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Fiber, FiberRoot } from \"./fiber.js\";\nimport { commitHostFiberRoot } from \"./fiber-host.js\";\nimport { markRootFinished } from \"./fiber-lanes.js\";\nimport { runWithHostCommit } from \"./hooks.js\";\nimport type { RenderOptions } from \"./hydration.js\";\n\ninterface RefRecord {\n ref: unknown;\n node: unknown;\n}\n\nexport function commitFiberRoot(\n root: FiberRoot,\n options: RenderOptions = {},\n): void {\n const finishedWork = root.finishedWork;\n\n if (finishedWork === undefined) {\n return;\n }\n\n if (\n root.refCleanupKnown !== true ||\n root.current.hasRefSubtree ||\n finishedWork.hasRefSubtree\n ) {\n runWithHostCommit(() => {\n cleanupDeletedRefs(root.current, finishedWork);\n });\n }\n commitHostFiberRoot(root, finishedWork, options);\n root.current = finishedWork;\n root.current.stateNode = root;\n markRootFinished(root, finishedWork.lanes);\n root.callbackPriority = root.pendingLanes & -root.pendingLanes;\n root.finishedWork = undefined;\n root.workInProgress = undefined;\n root.workInProgressRootRenderLanes = 0;\n}\n\nexport function detachFiberRefs(fiber: Fiber): void {\n for (const record of collectRefRecords(fiber)) {\n detachRef(record.ref);\n }\n}\n\nfunction cleanupDeletedRefs(previous: Fiber, next: Fiber): void {\n const nextRefs = new Set<unknown>();\n\n collectRefRecords(next, nextRefs);\n\n for (const record of collectRefRecords(previous)) {\n if (!nextRefs.has(record.ref)) {\n detachRef(record.ref);\n }\n }\n}\n\nfunction collectRefRecords(\n fiber: Fiber | undefined,\n refs: Set<unknown> = new Set(),\n): RefRecord[] {\n const records: RefRecord[] = [];\n let cursor = fiber;\n\n while (cursor !== undefined) {\n const ref = getFiberRef(cursor);\n\n if (ref !== undefined && ref !== null) {\n refs.add(ref);\n records.push({ ref, node: cursor.stateNode });\n }\n\n records.push(...collectRefRecords(cursor.child, refs));\n cursor = cursor.sibling;\n }\n\n return records;\n}\n\nfunction getFiberRef(fiber: Fiber): unknown {\n const props = (fiber.memoizedProps ?? fiber.pendingProps) as\n | { ref?: unknown }\n | undefined;\n\n return props?.ref;\n}\n\nfunction detachRef(ref: unknown): void {\n if (typeof ref === \"function\") {\n ref(null);\n return;\n }\n\n if (typeof ref === \"object\" && ref !== null && \"current\" in ref) {\n (ref as { current: unknown }).current = null;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"fiber-commit.js","sourceRoot":"","sources":["../src/fiber-commit.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Fiber, FiberRoot } from \"./fiber.js\";\nimport { commitHostFiberRoot } from \"./fiber-host.js\";\nimport { markRootFinished } from \"./fiber-lanes.js\";\nimport { runWithHostCommit } from \"./hooks.js\";\nimport type { RenderOptions } from \"./hydration.js\";\n\ninterface RefRecord {\n ref: unknown;\n node: unknown;\n}\n\nexport function commitFiberRoot(\n root: FiberRoot,\n options: RenderOptions = {},\n): void {\n const finishedWork = root.finishedWork;\n\n if (finishedWork === undefined) {\n return;\n }\n\n if (\n root.refCleanupKnown !== true ||\n root.current.hasRefSubtree ||\n finishedWork.hasRefSubtree\n ) {\n runWithHostCommit(() => {\n cleanupDeletedRefs(root.current, finishedWork);\n });\n }\n commitHostFiberRoot(root, finishedWork, options);\n if (hasRemovedAlternateChildren(finishedWork)) {\n detachRemovedAlternateChildren(finishedWork);\n }\n root.current = finishedWork;\n root.current.stateNode = root;\n markRootFinished(root, finishedWork.lanes);\n root.callbackPriority = root.pendingLanes & -root.pendingLanes;\n root.finishedWork = undefined;\n root.workInProgress = undefined;\n root.workInProgressRootRenderLanes = 0;\n}\n\nexport function detachFiberRefs(fiber: Fiber): void {\n for (const record of collectRefRecords(fiber)) {\n detachRef(record.ref);\n }\n}\n\nfunction detachRemovedAlternateChildren(fiber: Fiber | undefined): void {\n let cursor: Fiber | undefined = fiber;\n\n while (cursor !== undefined) {\n const retained = collectRetainedAlternateChildren(cursor.child);\n let alternateChild = cursor.alternate?.child;\n\n while (alternateChild !== undefined) {\n const nextAlternateChild = alternateChild.sibling;\n\n if (!retained.has(alternateChild)) {\n detachFiberSubtree(alternateChild, retained);\n }\n\n alternateChild = nextAlternateChild;\n }\n\n if (cursor.deletions !== undefined) {\n for (const deleted of cursor.deletions) {\n detachFiberSubtree(deleted, retained);\n }\n cursor.deletions = undefined;\n }\n\n detachRemovedAlternateChildren(cursor.child);\n cursor = cursor.sibling;\n }\n}\n\nfunction hasRemovedAlternateChildren(fiber: Fiber): boolean {\n return (\n fiber.childListChanged ||\n fiber.subtreeChildListChanged ||\n fiber.deletions !== undefined\n );\n}\n\nfunction collectRetainedAlternateChildren(fiber: Fiber | undefined): Set<Fiber> {\n const retained = new Set<Fiber>();\n let cursor = fiber;\n\n while (cursor !== undefined) {\n retained.add(cursor);\n\n if (cursor.alternate !== undefined) {\n retained.add(cursor.alternate);\n }\n\n cursor = cursor.sibling;\n }\n\n return retained;\n}\n\nfunction detachFiberSubtree(fiber: Fiber, preserve: ReadonlySet<Fiber>): void {\n const stack = [fiber];\n const seen = new Set<Fiber>();\n\n while (stack.length > 0) {\n const current = stack.pop();\n\n if (current === undefined || seen.has(current) || preserve.has(current)) {\n continue;\n }\n\n seen.add(current);\n\n let child = current.child;\n while (child !== undefined) {\n stack.push(child);\n child = child.sibling;\n }\n\n if (current.alternate !== undefined) {\n stack.push(current.alternate);\n }\n\n current.return = undefined;\n current.child = undefined;\n current.sibling = undefined;\n current.alternate = undefined;\n current.pendingProps = undefined;\n current.memoizedProps = undefined;\n current.memoizedState = undefined;\n current.stateNode = undefined;\n current.deletions = undefined;\n }\n}\n\nfunction cleanupDeletedRefs(previous: Fiber, next: Fiber): void {\n const nextRefs = new Set<unknown>();\n\n collectRefRecords(next, nextRefs);\n\n for (const record of collectRefRecords(previous)) {\n if (!nextRefs.has(record.ref)) {\n detachRef(record.ref);\n }\n }\n}\n\nfunction collectRefRecords(\n fiber: Fiber | undefined,\n refs: Set<unknown> = new Set(),\n): RefRecord[] {\n const records: RefRecord[] = [];\n let cursor = fiber;\n\n while (cursor !== undefined) {\n const ref = getFiberRef(cursor);\n\n if (ref !== undefined && ref !== null) {\n refs.add(ref);\n records.push({ ref, node: cursor.stateNode });\n }\n\n records.push(...collectRefRecords(cursor.child, refs));\n cursor = cursor.sibling;\n }\n\n return records;\n}\n\nfunction getFiberRef(fiber: Fiber): unknown {\n const props = (fiber.memoizedProps ?? fiber.pendingProps) as\n | { ref?: unknown }\n | undefined;\n\n return props?.ref;\n}\n\nfunction detachRef(ref: unknown): void {\n if (typeof ref === \"function\") {\n ref(null);\n return;\n }\n\n if (typeof ref === \"object\" && ref !== null && \"current\" in ref) {\n (ref as { current: unknown }).current = null;\n }\n}\n"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { getAppliedEventHandler, getAppliedProps, setAppliedProps, type AppliedEventListener, type AppliedProps, } from "./event-listeners.js";
|
|
2
|
-
export { ensureDelegatedEventListener, getEventPriority, setLogicalEventParent, toEventNames, toEventPropNames, } from "./events.js";
|
|
2
|
+
export { ensureDelegatedEventListener, ensureDelegatedEventListenersForProp, forEachEventName, getEventPriority, setLogicalEventParent, toEventNames, toEventPropNames, } from "./events.js";
|
|
3
3
|
//# sourceMappingURL=host-event-binder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host-event-binder.d.ts","sourceRoot":"","sources":["../src/host-event-binder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,KAAK,oBAAoB,EACzB,KAAK,YAAY,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,4BAA4B,EAC5B,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,GACjB,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"host-event-binder.d.ts","sourceRoot":"","sources":["../src/host-event-binder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,KAAK,oBAAoB,EACzB,KAAK,YAAY,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,4BAA4B,EAC5B,oCAAoC,EACpC,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,GACjB,MAAM,aAAa,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { getAppliedEventHandler, getAppliedProps, setAppliedProps, } from "./event-listeners.js";
|
|
2
|
-
export { ensureDelegatedEventListener, getEventPriority, setLogicalEventParent, toEventNames, toEventPropNames, } from "./events.js";
|
|
2
|
+
export { ensureDelegatedEventListener, ensureDelegatedEventListenersForProp, forEachEventName, getEventPriority, setLogicalEventParent, toEventNames, toEventPropNames, } from "./events.js";
|
|
3
3
|
//# sourceMappingURL=host-event-binder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host-event-binder.js","sourceRoot":"","sources":["../src/host-event-binder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,eAAe,GAGhB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,4BAA4B,EAC5B,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,GACjB,MAAM,aAAa,CAAC","sourcesContent":["export {\n getAppliedEventHandler,\n getAppliedProps,\n setAppliedProps,\n type AppliedEventListener,\n type AppliedProps,\n} from \"./event-listeners.js\";\nexport {\n ensureDelegatedEventListener,\n getEventPriority,\n setLogicalEventParent,\n toEventNames,\n toEventPropNames,\n} from \"./events.js\";\n"]}
|
|
1
|
+
{"version":3,"file":"host-event-binder.js","sourceRoot":"","sources":["../src/host-event-binder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,eAAe,GAGhB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,4BAA4B,EAC5B,oCAAoC,EACpC,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,GACjB,MAAM,aAAa,CAAC","sourcesContent":["export {\n getAppliedEventHandler,\n getAppliedProps,\n setAppliedProps,\n type AppliedEventListener,\n type AppliedProps,\n} from \"./event-listeners.js\";\nexport {\n ensureDelegatedEventListener,\n ensureDelegatedEventListenersForProp,\n forEachEventName,\n getEventPriority,\n setLogicalEventParent,\n toEventNames,\n toEventPropNames,\n} from \"./events.js\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host-reconciler.d.ts","sourceRoot":"","sources":["../src/host-reconciler.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"host-reconciler.d.ts","sourceRoot":"","sources":["../src/host-reconciler.ts"],"names":[],"mappings":"AAAA,OAAO,EAiBL,KAAK,eAAe,EACrB,MAAM,cAAc,CAAC;AAYtB,OAAO,EAML,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAqC,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAC3F,OAAO,EAYL,KAAK,WAAW,EACjB,MAAM,YAAY,CAAC;AAUpB,OAAO,EAOL,KAAK,cAAc,EACnB,KAAK,aAAa,EAEnB,MAAM,gBAAgB,CAAC;AAoBxB,UAAU,qBAAsB,SAAQ,aAAa;IACnD,aAAa,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,WAAW,CAAC,EAAE,QAAQ,CAAC;CACxB;AAqBD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAyEjE;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,eAAe,EACxB,OAAO,CAAC,EAAE,WAAW,EACrB,OAAO,GAAE,qBAA0B,GAClC,KAAK,CAeP;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,cAAc,EACrB,OAAO,GAAE,qBAA0B,GAClC,KAAK,CAYP;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,SAAS,EACf,YAAY,EAAE,KAAK,EACnB,OAAO,GAAE,aAAkB,GAC1B,IAAI,CAwBN;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,SAAS,EACf,YAAY,EAAE,KAAK,EACnB,KAAK,EAAE,cAAc,EACrB,OAAO,GAAE,qBAA0B,GAClC,IAAI,CAgBN"}
|
package/dist/host-reconciler.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Activity, ERROR_BOUNDARY_TYPE, FORWARD_REF_TYPE, Fragment, HOST_OWN_PROPS_META, LAZY_TYPE, MEMO_TYPE, Profiler, STRICT_MODE_TYPE, Suspense, SuspenseList, isReactCompatElement, isReactCompatPortal, } from "./element.js";
|
|
1
|
+
import { Activity, ERROR_BOUNDARY_TYPE, FORWARD_REF_TYPE, Fragment, HOST_CHILDREN_ONLY_PROPS_META, HOST_OWN_PROPS_META, LAZY_TYPE, MEMO_TYPE, Profiler, STRICT_MODE_TYPE, Suspense, SuspenseList, isReactCompatElement, isReactCompatPortal, } from "./element.js";
|
|
2
2
|
import { consumerContext, isReactCompatConsumer, isReactCompatProvider, renderWithContextProvider, useContext, } from "./context.js";
|
|
3
3
|
import { applyPostChildFormProps, applyProps } from "./dom-props.js";
|
|
4
4
|
import { syncChildNodes, syncOwnedChildNodes, syncScopedChildNodes } from "./dom-children.js";
|
|
@@ -1002,11 +1002,19 @@ function commitHostDirtyFiber(fiber, parent, eventRoot, path, options = {}) {
|
|
|
1002
1002
|
}
|
|
1003
1003
|
const props = fiber.pendingProps;
|
|
1004
1004
|
const previousProps = fiber.memoizedProps;
|
|
1005
|
+
const directTextChild = fiber.child === undefined && fiber.hydrateExisting !== true
|
|
1006
|
+
? getDirectHostTextChild(props.children)
|
|
1007
|
+
: undefined;
|
|
1008
|
+
const textOnlyChildrenUpdate = directTextChild !== undefined &&
|
|
1009
|
+
hostPropsAreKnownChildrenOnly(fiber.memoizedProps) &&
|
|
1010
|
+
hostPropsAreKnownChildrenOnly(props);
|
|
1005
1011
|
const propsAreUnchanged = fiber.hydrateExisting !== true &&
|
|
1012
|
+
!textOnlyChildrenUpdate &&
|
|
1006
1013
|
hostPropsEqual(fiber.memoizedProps, props);
|
|
1007
|
-
const propsAreChildrenOnly =
|
|
1008
|
-
|
|
1009
|
-
|
|
1014
|
+
const propsAreChildrenOnly = textOnlyChildrenUpdate ||
|
|
1015
|
+
(fiber.hydrateExisting !== true &&
|
|
1016
|
+
hostPropsAreChildrenOnly(fiber.memoizedProps) &&
|
|
1017
|
+
hostPropsAreChildrenOnly(props));
|
|
1010
1018
|
const textOnlyRowUpdate = fiber.hydrateExisting !== true &&
|
|
1011
1019
|
isRowTextOnlyUpdate(fiber.memoizedProps, props);
|
|
1012
1020
|
if (!propsAreUnchanged && !propsAreChildrenOnly && !textOnlyRowUpdate) {
|
|
@@ -1017,9 +1025,6 @@ function commitHostDirtyFiber(fiber, parent, eventRoot, path, options = {}) {
|
|
|
1017
1025
|
});
|
|
1018
1026
|
applyChangedRef(previousProps?.ref, props.ref, element);
|
|
1019
1027
|
}
|
|
1020
|
-
const directTextChild = fiber.child === undefined && fiber.hydrateExisting !== true
|
|
1021
|
-
? getDirectHostTextChild(props.children)
|
|
1022
|
-
: undefined;
|
|
1023
1028
|
if (directTextChild !== undefined) {
|
|
1024
1029
|
syncDirectHostTextChild(element, directTextChild);
|
|
1025
1030
|
}
|
|
@@ -1270,11 +1275,19 @@ function commitHostFiber(fiber, parent, eventRoot, path, options = {}) {
|
|
|
1270
1275
|
}
|
|
1271
1276
|
const props = fiber.pendingProps;
|
|
1272
1277
|
const previousProps = fiber.memoizedProps;
|
|
1278
|
+
const directTextChild = fiber.child === undefined && fiber.hydrateExisting !== true
|
|
1279
|
+
? getDirectHostTextChild(props.children)
|
|
1280
|
+
: undefined;
|
|
1281
|
+
const textOnlyChildrenUpdate = directTextChild !== undefined &&
|
|
1282
|
+
hostPropsAreKnownChildrenOnly(fiber.memoizedProps) &&
|
|
1283
|
+
hostPropsAreKnownChildrenOnly(props);
|
|
1273
1284
|
const propsAreUnchanged = fiber.hydrateExisting !== true &&
|
|
1285
|
+
!textOnlyChildrenUpdate &&
|
|
1274
1286
|
hostPropsEqual(fiber.memoizedProps, props);
|
|
1275
|
-
const propsAreChildrenOnly =
|
|
1276
|
-
|
|
1277
|
-
|
|
1287
|
+
const propsAreChildrenOnly = textOnlyChildrenUpdate ||
|
|
1288
|
+
(fiber.hydrateExisting !== true &&
|
|
1289
|
+
hostPropsAreChildrenOnly(fiber.memoizedProps) &&
|
|
1290
|
+
hostPropsAreChildrenOnly(props));
|
|
1278
1291
|
const textOnlyRowUpdate = fiber.hydrateExisting !== true &&
|
|
1279
1292
|
isRowTextOnlyUpdate(fiber.memoizedProps, props);
|
|
1280
1293
|
if (!propsAreUnchanged && !propsAreChildrenOnly && !textOnlyRowUpdate) {
|
|
@@ -1285,9 +1298,6 @@ function commitHostFiber(fiber, parent, eventRoot, path, options = {}) {
|
|
|
1285
1298
|
});
|
|
1286
1299
|
applyChangedRef(previousProps?.ref, props.ref, element);
|
|
1287
1300
|
}
|
|
1288
|
-
const directTextChild = fiber.child === undefined && fiber.hydrateExisting !== true
|
|
1289
|
-
? getDirectHostTextChild(props.children)
|
|
1290
|
-
: undefined;
|
|
1291
1301
|
if (directTextChild !== undefined) {
|
|
1292
1302
|
syncDirectHostTextChild(element, directTextChild);
|
|
1293
1303
|
}
|
|
@@ -1538,6 +1548,11 @@ function hostPropsAreChildrenOnly(props) {
|
|
|
1538
1548
|
}
|
|
1539
1549
|
return true;
|
|
1540
1550
|
}
|
|
1551
|
+
function hostPropsAreKnownChildrenOnly(props) {
|
|
1552
|
+
return (typeof props === "object" &&
|
|
1553
|
+
props !== null &&
|
|
1554
|
+
props[HOST_CHILDREN_ONLY_PROPS_META] === true);
|
|
1555
|
+
}
|
|
1541
1556
|
function isRowTextOnlyUpdate(previous, next) {
|
|
1542
1557
|
if (typeof previous !== "object" || previous === null) {
|
|
1543
1558
|
return false;
|