@reckona/mreact-compat 0.0.92 → 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/dist/class-component.d.ts +2 -0
- package/dist/class-component.d.ts.map +1 -1
- package/dist/class-component.js +66 -3
- package/dist/class-component.js.map +1 -1
- package/dist/host-reconciler.d.ts.map +1 -1
- package/dist/host-reconciler.js +33 -6
- package/dist/host-reconciler.js.map +1 -1
- package/package.json +2 -2
- package/src/class-component.ts +101 -4
- package/src/host-reconciler.ts +51 -6
|
@@ -54,6 +54,7 @@ export type ClassComponentRenderResult = {
|
|
|
54
54
|
};
|
|
55
55
|
export declare function reconcileClassComponent(parent: ParentNode, previousNodes: readonly Node[], type: ClassComponentType, props: Record<string, unknown>, runtime: RootRuntime, path: string, options: RenderOptions, reconcileNode: ReconcileNode, onInstance?: (instance: ClassComponentInstance) => void): ReconcileResult;
|
|
56
56
|
export declare function renderClassComponentWithRuntime(type: ClassComponentType, props: Record<string, unknown>, runtime: RootRuntime, path: string, options?: {
|
|
57
|
+
currentInstance?: ClassComponentInstance;
|
|
57
58
|
hasDirtyDescendant?: boolean;
|
|
58
59
|
}): ClassComponentRenderResult;
|
|
59
60
|
export declare function applyDerivedStateFromProps(type: ClassComponentType, instance: ClassComponentInstance, nextProps: Record<string, unknown>, previousState: Record<string, unknown>): void;
|
|
@@ -61,4 +62,5 @@ export declare function resolveDerivedStateFromProps(type: ClassComponentType, n
|
|
|
61
62
|
export declare function recoverClassComponentError(type: ClassComponentType, instance: ClassComponentInstance, error: unknown): ReactCompatNode | undefined;
|
|
62
63
|
export declare function isClassComponentType(value: unknown): value is ClassComponentType;
|
|
63
64
|
export declare function reconcileErrorBoundary(parent: ParentNode, previousNodes: readonly Node[], element: ReactCompatElement, runtime: RootRuntime, path: string, options: RenderOptions, reconcileNode: ReconcileNode): ReconcileResult;
|
|
65
|
+
export declare function hasDirtyClassUpdate(runtime: RootRuntime | undefined, keys: readonly string[], prefix?: string): boolean;
|
|
64
66
|
//# sourceMappingURL=class-component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class-component.d.ts","sourceRoot":"","sources":["../src/class-component.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"class-component.d.ts","sourceRoot":"","sources":["../src/class-component.ts"],"names":[],"mappings":"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"}
|
package/dist/class-component.js
CHANGED
|
@@ -27,9 +27,13 @@ const CLASS_COMPONENT_STATE_KEY = Symbol.for("modular.react.class_component_stat
|
|
|
27
27
|
const classComponentGlobalState = (globalThis[CLASS_COMPONENT_STATE_KEY] ??= {
|
|
28
28
|
lifecycleSnapshots: new WeakMap(),
|
|
29
29
|
updateContexts: new WeakMap(),
|
|
30
|
+
pendingInstancesByRuntime: new WeakMap(),
|
|
31
|
+
dirtyPathsByRuntime: new WeakMap(),
|
|
30
32
|
});
|
|
31
33
|
const classLifecycleSnapshots = classComponentGlobalState.lifecycleSnapshots;
|
|
32
34
|
const classUpdateContexts = classComponentGlobalState.updateContexts;
|
|
35
|
+
const classPendingInstancesByRuntime = classComponentGlobalState.pendingInstancesByRuntime;
|
|
36
|
+
const classDirtyPathsByRuntime = classComponentGlobalState.dirtyPathsByRuntime;
|
|
33
37
|
export function reconcileClassComponent(parent, previousNodes, type, props, runtime, path, options, reconcileNode, onInstance) {
|
|
34
38
|
const rendered = renderClassComponentWithRuntime(type, props, runtime, path);
|
|
35
39
|
if (rendered.kind === "skip") {
|
|
@@ -52,6 +56,14 @@ export function renderClassComponentWithRuntime(type, props, runtime, path, opti
|
|
|
52
56
|
return renderWithRootRuntime(runtime, path, () => {
|
|
53
57
|
const instanceRef = useRef(undefined);
|
|
54
58
|
const didCommitRef = useRef(false);
|
|
59
|
+
const currentInstance = options.currentInstance instanceof type
|
|
60
|
+
? options.currentInstance
|
|
61
|
+
: getPendingClassInstance(runtime, path, type);
|
|
62
|
+
if (currentInstance !== undefined &&
|
|
63
|
+
instanceRef.current !== currentInstance) {
|
|
64
|
+
instanceRef.current = currentInstance;
|
|
65
|
+
didCommitRef.current = true;
|
|
66
|
+
}
|
|
55
67
|
const previousInstance = instanceRef.current;
|
|
56
68
|
const hasDifferentType = previousInstance !== undefined && !(previousInstance instanceof type);
|
|
57
69
|
const replacedInstance = hasDifferentType ? previousInstance : undefined;
|
|
@@ -69,6 +81,7 @@ export function renderClassComponentWithRuntime(type, props, runtime, path, opti
|
|
|
69
81
|
const previousState = snapshot?.previousState ?? instance.state ?? {};
|
|
70
82
|
instanceRef.current = instance;
|
|
71
83
|
installClassUpdateMethods(instance, runtime, path);
|
|
84
|
+
clearPendingClassUpdate(runtime, path);
|
|
72
85
|
const nextState = resolveDerivedStateFromProps(type, props, snapshot?.nextState ?? instance.state ?? {});
|
|
73
86
|
const shouldSkipUpdate = didCommitRef.current &&
|
|
74
87
|
snapshot?.force !== true &&
|
|
@@ -183,7 +196,7 @@ function enqueueClassSetState(instance, partial, callback) {
|
|
|
183
196
|
previousState,
|
|
184
197
|
nextState,
|
|
185
198
|
});
|
|
186
|
-
markClassInstanceDirty(updateContext);
|
|
199
|
+
markClassInstanceDirty(instance, updateContext);
|
|
187
200
|
callback?.call(instance);
|
|
188
201
|
}
|
|
189
202
|
function enqueueClassForceUpdate(instance, callback) {
|
|
@@ -196,16 +209,66 @@ function enqueueClassForceUpdate(instance, callback) {
|
|
|
196
209
|
previousState: instance.state ?? {},
|
|
197
210
|
force: true,
|
|
198
211
|
});
|
|
199
|
-
markClassInstanceDirty(updateContext);
|
|
212
|
+
markClassInstanceDirty(instance, updateContext);
|
|
200
213
|
callback?.call(instance);
|
|
201
214
|
}
|
|
202
|
-
function markClassInstanceDirty(updateContext) {
|
|
215
|
+
function markClassInstanceDirty(instance, updateContext) {
|
|
216
|
+
markPendingClassUpdate(instance, updateContext);
|
|
203
217
|
const runtimeInstance = updateContext.runtime.instances.get(updateContext.path);
|
|
204
218
|
if (runtimeInstance !== undefined) {
|
|
205
219
|
runtimeInstance.dirty = true;
|
|
206
220
|
}
|
|
207
221
|
updateContext.runtime.rerender();
|
|
208
222
|
}
|
|
223
|
+
export function hasDirtyClassUpdate(runtime, keys, prefix) {
|
|
224
|
+
if (runtime === undefined) {
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
const dirtyPaths = classDirtyPathsByRuntime.get(runtime);
|
|
228
|
+
if (dirtyPaths === undefined) {
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
for (const key of keys) {
|
|
232
|
+
if (dirtyPaths.has(key)) {
|
|
233
|
+
return true;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
if (prefix === undefined) {
|
|
237
|
+
return false;
|
|
238
|
+
}
|
|
239
|
+
for (const dirtyPath of dirtyPaths) {
|
|
240
|
+
if (dirtyPath === prefix || dirtyPath.startsWith(`${prefix}.`)) {
|
|
241
|
+
return true;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
function markPendingClassUpdate(instance, updateContext) {
|
|
247
|
+
let pendingInstances = classPendingInstancesByRuntime.get(updateContext.runtime);
|
|
248
|
+
if (pendingInstances === undefined) {
|
|
249
|
+
pendingInstances = new Map();
|
|
250
|
+
classPendingInstancesByRuntime.set(updateContext.runtime, pendingInstances);
|
|
251
|
+
}
|
|
252
|
+
let dirtyPaths = classDirtyPathsByRuntime.get(updateContext.runtime);
|
|
253
|
+
if (dirtyPaths === undefined) {
|
|
254
|
+
dirtyPaths = new Set();
|
|
255
|
+
classDirtyPathsByRuntime.set(updateContext.runtime, dirtyPaths);
|
|
256
|
+
}
|
|
257
|
+
pendingInstances.set(updateContext.path, instance);
|
|
258
|
+
dirtyPaths.add(updateContext.path);
|
|
259
|
+
}
|
|
260
|
+
function getPendingClassInstance(runtime, path, type) {
|
|
261
|
+
const dirtyPaths = classDirtyPathsByRuntime.get(runtime);
|
|
262
|
+
if (dirtyPaths?.has(path) !== true) {
|
|
263
|
+
return undefined;
|
|
264
|
+
}
|
|
265
|
+
const instance = classPendingInstancesByRuntime.get(runtime)?.get(path);
|
|
266
|
+
return instance instanceof type ? instance : undefined;
|
|
267
|
+
}
|
|
268
|
+
function clearPendingClassUpdate(runtime, path) {
|
|
269
|
+
classDirtyPathsByRuntime.get(runtime)?.delete(path);
|
|
270
|
+
classPendingInstancesByRuntime.get(runtime)?.delete(path);
|
|
271
|
+
}
|
|
209
272
|
function installClassLifecycleEffects(instance, didCommitRef, previousProps, previousState, skipUpdate, replacedInstance) {
|
|
210
273
|
useLayoutEffect(() => {
|
|
211
274
|
if (replacedInstance !== undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class-component.js","sourceRoot":"","sources":["../src/class-component.ts"],"names":[],"mappings":"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","sourcesContent":["import { renderWithRootRuntime, useLayoutEffect, useRef, type RootRuntime } from \"./hooks.js\";\nimport type { ReactCompatElement, ReactCompatNode } from \"./element.js\";\nimport { withHydrationComponentStack, type RenderOptions } from \"./hydration.js\";\nimport type { ReconcileNode, ReconcileResult } from \"./reconcile-types.js\";\nimport { isThenable } from \"./thenable.js\";\nimport { shallowEqual } from \"./prop-comparison.js\";\n\nconst CLASS_COMPONENT_RUNTIME_OWNER = Symbol.for(\"modular.react.class_component_runtime\");\n\nexport interface ClassComponentInstance {\n props: Record<string, unknown>;\n state?: Record<string, unknown>;\n setState?: (\n partial:\n | Record<string, unknown>\n | ((\n previousState: Record<string, unknown>,\n props: Record<string, unknown>,\n ) => Record<string, unknown> | null),\n callback?: () => void,\n ) => void;\n forceUpdate?: (callback?: () => void) => void;\n render(): ReactCompatNode;\n componentDidMount?: () => void;\n componentDidUpdate?: (\n previousProps: Record<string, unknown>,\n previousState: Record<string, unknown>,\n snapshot?: unknown,\n ) => void;\n componentWillUnmount?: () => void;\n shouldComponentUpdate?: (\n nextProps: Record<string, unknown>,\n nextState: Record<string, unknown>,\n ) => boolean;\n getSnapshotBeforeUpdate?: (\n previousProps: Record<string, unknown>,\n previousState: Record<string, unknown>,\n ) => unknown;\n componentDidCatch?: (error: Error, info: { componentStack: string }) => void;\n}\n\nexport interface ClassComponentType {\n new (props: Record<string, unknown>): ClassComponentInstance;\n getDerivedStateFromProps?: (\n nextProps: Record<string, unknown>,\n previousState: Record<string, unknown>,\n ) => Record<string, unknown> | null;\n getDerivedStateFromError?: (error: Error) => Record<string, unknown> | null;\n}\n\nexport interface Component<\n P extends Record<string, unknown> = Record<string, unknown>,\n S extends Record<string, unknown> = Record<string, unknown>,\n> {\n props: P;\n state?: S;\n setState(\n partial:\n | Partial<S>\n | ((\n previousState: Readonly<S>,\n props: Readonly<P>,\n ) => Partial<S> | S | null),\n callback?: () => void,\n ): void;\n forceUpdate(callback?: () => void): void;\n render(): ReactCompatNode;\n}\n\nexport interface ComponentConstructor {\n new <\n P extends Record<string, unknown> = Record<string, unknown>,\n S extends Record<string, unknown> = Record<string, unknown>,\n >(props: P): Component<P, S>;\n <\n P extends Record<string, unknown> = Record<string, unknown>,\n S extends Record<string, unknown> = Record<string, unknown>,\n >(this: Component<P, S>, props: P): void;\n prototype: Component<any, any>;\n}\n\nexport const Component: ComponentConstructor = function Component<\n P extends Record<string, unknown> = Record<string, unknown>,\n S extends Record<string, unknown> = Record<string, unknown>,\n>(this: Component<P, S>, props: P): void {\n this.props = props;\n} as ComponentConstructor;\n\nComponent.prototype.setState = function setState<\n P extends Record<string, unknown>,\n S extends Record<string, unknown>,\n>(\n this: Component<P, S>,\n partial:\n | Partial<S>\n | ((\n previousState: Readonly<S>,\n props: Readonly<P>,\n ) => Partial<S> | S | null),\n callback?: () => void,\n): void {\n enqueueClassSetState(\n this as unknown as ClassComponentInstance,\n partial as Parameters<NonNullable<ClassComponentInstance[\"setState\"]>>[0],\n callback,\n );\n};\n\nComponent.prototype.forceUpdate = function forceUpdate(\n this: Component,\n callback?: () => void,\n): void {\n enqueueClassForceUpdate(this as unknown as ClassComponentInstance, callback);\n};\n\nComponent.prototype.render = function render(): ReactCompatNode {\n return null;\n};\n\nexport interface PureComponent<\n P extends Record<string, unknown> = Record<string, unknown>,\n S extends Record<string, unknown> = Record<string, unknown>,\n> extends Component<P, S> {\n shouldComponentUpdate(nextProps: P, nextState: S): boolean;\n}\n\nexport interface PureComponentConstructor {\n new <\n P extends Record<string, unknown> = Record<string, unknown>,\n S extends Record<string, unknown> = Record<string, unknown>,\n >(props: P): PureComponent<P, S>;\n <\n P extends Record<string, unknown> = Record<string, unknown>,\n S extends Record<string, unknown> = Record<string, unknown>,\n >(this: PureComponent<P, S>, props: P): void;\n prototype: PureComponent<any, any>;\n}\n\nexport const PureComponent: PureComponentConstructor = function PureComponent<\n P extends Record<string, unknown> = Record<string, unknown>,\n S extends Record<string, unknown> = Record<string, unknown>,\n>(this: PureComponent<P, S>, props: P): void {\n (Component as unknown as (this: unknown, props: unknown) => void).call(\n this,\n props,\n );\n} as PureComponentConstructor;\n\nPureComponent.prototype = Object.create(Component.prototype) as PureComponent<any, any>;\nPureComponent.prototype.constructor = PureComponent;\nPureComponent.prototype.shouldComponentUpdate = function shouldComponentUpdate<\n P extends Record<string, unknown>,\n S extends Record<string, unknown>,\n>(\n this: PureComponent<P, S>,\n nextProps: P,\n nextState: S,\n): boolean {\n return !shallowEqual(this.props, nextProps) || !shallowEqual(this.state ?? {}, nextState ?? {});\n};\n\ninterface ClassLifecycleSnapshot {\n previousState?: Record<string, unknown>;\n nextState?: Record<string, unknown>;\n force?: boolean;\n snapshot?: unknown;\n}\n\ninterface ClassUpdateContext {\n runtime: RootRuntime;\n path: string;\n}\n\ninterface ClassComponentGlobalState {\n lifecycleSnapshots: WeakMap<ClassComponentInstance, ClassLifecycleSnapshot>;\n updateContexts: WeakMap<ClassComponentInstance, ClassUpdateContext>;\n}\n\nconst CLASS_COMPONENT_STATE_KEY = Symbol.for(\"modular.react.class_component_state\");\nconst classComponentGlobalState =\n ((globalThis as typeof globalThis & Record<symbol, ClassComponentGlobalState | undefined>)[\n CLASS_COMPONENT_STATE_KEY\n ] ??= {\n lifecycleSnapshots: new WeakMap(),\n updateContexts: new WeakMap(),\n });\nconst classLifecycleSnapshots = classComponentGlobalState.lifecycleSnapshots;\nconst classUpdateContexts = classComponentGlobalState.updateContexts;\n\nexport type ClassComponentRenderResult =\n | {\n kind: \"render\";\n node: ReactCompatNode;\n instance: ClassComponentInstance;\n type: ClassComponentType;\n }\n | { kind: \"skip\" };\n\nexport function reconcileClassComponent(\n parent: ParentNode,\n previousNodes: readonly Node[],\n type: ClassComponentType,\n props: Record<string, unknown>,\n runtime: RootRuntime,\n path: string,\n options: RenderOptions,\n reconcileNode: ReconcileNode,\n onInstance?: (instance: ClassComponentInstance) => void,\n): ReconcileResult {\n const rendered = renderClassComponentWithRuntime(type, props, runtime, path);\n\n if (rendered.kind === \"skip\") {\n return { nodes: previousNodes.slice(0, 1), consumed: previousNodes.length };\n }\n\n onInstance?.(rendered.instance);\n const childOptions = withHydrationComponentStack(\n options,\n getClassComponentName(type),\n );\n\n try {\n return reconcileNode(\n parent,\n previousNodes,\n rendered.node,\n runtime,\n `${path}.class`,\n childOptions,\n );\n } catch (error) {\n const fallbackNode = recoverClassComponentError(\n rendered.type,\n rendered.instance,\n error,\n );\n\n if (fallbackNode === undefined) {\n throw error;\n }\n\n return reconcileNode(\n parent,\n previousNodes,\n fallbackNode,\n runtime,\n `${path}.class.fallback`,\n childOptions,\n );\n }\n}\n\nexport function renderClassComponentWithRuntime(\n type: ClassComponentType,\n props: Record<string, unknown>,\n runtime: RootRuntime,\n path: string,\n options: { hasDirtyDescendant?: boolean } = {},\n): ClassComponentRenderResult {\n return renderWithRootRuntime(runtime, path, () => {\n const instanceRef = useRef<ClassComponentInstance | undefined>(undefined);\n const didCommitRef = useRef(false);\n const previousInstance = instanceRef.current;\n const hasDifferentType =\n previousInstance !== undefined && !(previousInstance instanceof type);\n const replacedInstance = hasDifferentType ? previousInstance : undefined;\n\n if (hasDifferentType) {\n classLifecycleSnapshots.delete(previousInstance);\n classUpdateContexts.delete(previousInstance);\n didCommitRef.current = false;\n instanceRef.current = undefined;\n }\n\n const instance =\n instanceRef.current !== undefined && instanceRef.current instanceof type\n ? instanceRef.current\n : new type(props);\n const previousProps = instance.props;\n const snapshot = classLifecycleSnapshots.get(instance);\n const previousState = snapshot?.previousState ?? instance.state ?? {};\n\n instanceRef.current = instance;\n installClassUpdateMethods(instance, runtime, path);\n const nextState = resolveDerivedStateFromProps(\n type,\n props,\n snapshot?.nextState ?? instance.state ?? {},\n );\n const shouldSkipUpdate =\n didCommitRef.current &&\n snapshot?.force !== true &&\n options.hasDirtyDescendant !== true &&\n instance.shouldComponentUpdate?.(props, nextState) === false;\n\n instance.props = props;\n instance.state = nextState;\n installClassLifecycleEffects(\n instance,\n didCommitRef,\n previousProps,\n previousState,\n shouldSkipUpdate,\n replacedInstance,\n );\n\n if (shouldSkipUpdate) {\n return { kind: \"skip\" };\n }\n\n try {\n const node = instance.render();\n\n if (didCommitRef.current) {\n classLifecycleSnapshots.set(instance, {\n ...classLifecycleSnapshots.get(instance),\n snapshot: instance.getSnapshotBeforeUpdate?.(\n previousProps ?? {},\n previousState,\n ),\n });\n }\n\n return { kind: \"render\", node, instance, type };\n } catch (error) {\n const fallbackNode = recoverClassComponentError(type, instance, error);\n\n if (fallbackNode === undefined) {\n throw error;\n }\n\n return { kind: \"render\", node: fallbackNode, instance, type };\n }\n }, CLASS_COMPONENT_RUNTIME_OWNER);\n}\n\nexport function applyDerivedStateFromProps(\n type: ClassComponentType,\n instance: ClassComponentInstance,\n nextProps: Record<string, unknown>,\n previousState: Record<string, unknown>,\n): void {\n instance.state = resolveDerivedStateFromProps(type, nextProps, previousState);\n}\n\nexport function resolveDerivedStateFromProps(\n type: ClassComponentType,\n nextProps: Record<string, unknown>,\n previousState: Record<string, unknown>,\n): Record<string, unknown> {\n const derivedState = type.getDerivedStateFromProps?.(nextProps, previousState);\n\n if (derivedState === undefined || derivedState === null) {\n return previousState;\n }\n\n return {\n ...previousState,\n ...derivedState,\n };\n}\n\nexport function recoverClassComponentError(\n type: ClassComponentType,\n instance: ClassComponentInstance,\n error: unknown,\n): ReactCompatNode | undefined {\n if (isThenable(error) || !isErrorBoundaryClass(type, instance)) {\n return undefined;\n }\n\n const normalizedError =\n error instanceof Error ? error : new Error(String(error));\n const derivedState = type.getDerivedStateFromError?.(normalizedError);\n\n if (derivedState !== undefined && derivedState !== null) {\n instance.state = {\n ...instance.state,\n ...derivedState,\n };\n }\n\n instance.componentDidCatch?.(normalizedError, { componentStack: \"\" });\n return instance.render();\n}\n\nexport function isClassComponentType(value: unknown): value is ClassComponentType {\n return (\n typeof value === \"function\" &&\n typeof (value as { prototype?: { render?: unknown } }).prototype?.render ===\n \"function\"\n );\n}\n\nfunction getClassComponentName(type: ClassComponentType): string {\n return type.name === \"\" ? \"Anonymous\" : type.name;\n}\n\nexport function reconcileErrorBoundary(\n parent: ParentNode,\n previousNodes: readonly Node[],\n element: ReactCompatElement,\n runtime: RootRuntime,\n path: string,\n options: RenderOptions,\n reconcileNode: ReconcileNode,\n): ReconcileResult {\n try {\n return reconcileNode(\n parent,\n previousNodes,\n element.props.children,\n runtime,\n `${path}.eb`,\n options,\n );\n } catch (error) {\n if (isThenable(error)) {\n throw error;\n }\n\n const normalizedError =\n error instanceof Error ? error : new Error(String(error));\n const onError = element.props.onError;\n\n if (typeof onError === \"function\") {\n (onError as (error: Error) => void)(normalizedError);\n }\n\n const fallback = element.props.fallback;\n const fallbackNode =\n typeof fallback === \"function\"\n ? (fallback as (error: Error) => ReactCompatNode)(normalizedError)\n : null;\n\n return reconcileNode(\n parent,\n previousNodes,\n fallbackNode,\n runtime,\n `${path}.eb.fallback`,\n options,\n );\n }\n}\n\nfunction installClassUpdateMethods(\n instance: ClassComponentInstance,\n runtime: RootRuntime,\n path: string,\n): void {\n classUpdateContexts.set(instance, { runtime, path });\n instance.setState = Component.prototype.setState;\n instance.forceUpdate = Component.prototype.forceUpdate;\n}\n\nfunction enqueueClassSetState(\n instance: ClassComponentInstance,\n partial: Parameters<NonNullable<ClassComponentInstance[\"setState\"]>>[0],\n callback?: () => void,\n): void {\n const updateContext = classUpdateContexts.get(instance);\n\n if (updateContext === undefined) {\n callback?.call(instance);\n return;\n }\n\n const snapshot = classLifecycleSnapshots.get(instance);\n const previousState = snapshot?.previousState ?? instance.state ?? {};\n const baseState = snapshot?.nextState ?? instance.state ?? {};\n const nextPartial =\n typeof partial === \"function\"\n ? partial(baseState, instance.props)\n : partial;\n\n const nextState =\n nextPartial === null\n ? baseState\n : {\n ...baseState,\n ...nextPartial,\n };\n\n classLifecycleSnapshots.set(instance, {\n ...snapshot,\n previousState,\n nextState,\n });\n\n markClassInstanceDirty(updateContext);\n callback?.call(instance);\n}\n\nfunction enqueueClassForceUpdate(\n instance: ClassComponentInstance,\n callback?: () => void,\n): void {\n const updateContext = classUpdateContexts.get(instance);\n\n if (updateContext === undefined) {\n callback?.call(instance);\n return;\n }\n\n classLifecycleSnapshots.set(instance, {\n previousState: instance.state ?? {},\n force: true,\n });\n markClassInstanceDirty(updateContext);\n callback?.call(instance);\n}\n\nfunction markClassInstanceDirty(updateContext: ClassUpdateContext): void {\n const runtimeInstance = updateContext.runtime.instances.get(updateContext.path) as\n | { dirty?: boolean }\n | undefined;\n if (runtimeInstance !== undefined) {\n runtimeInstance.dirty = true;\n }\n updateContext.runtime.rerender();\n}\n\nfunction installClassLifecycleEffects(\n instance: ClassComponentInstance,\n didCommitRef: { current: boolean },\n previousProps: Record<string, unknown> | undefined,\n previousState: Record<string, unknown>,\n skipUpdate: boolean,\n replacedInstance?: ClassComponentInstance,\n): void {\n useLayoutEffect(() => {\n if (replacedInstance !== undefined) {\n replacedInstance.componentWillUnmount?.();\n classUpdateContexts.delete(replacedInstance);\n }\n\n if (skipUpdate) {\n classLifecycleSnapshots.delete(instance);\n return;\n }\n\n if (didCommitRef.current) {\n instance.componentDidUpdate?.(\n previousProps ?? {},\n previousState,\n classLifecycleSnapshots.get(instance)?.snapshot,\n );\n } else {\n didCommitRef.current = true;\n instance.componentDidMount?.();\n }\n\n classLifecycleSnapshots.delete(instance);\n });\n\n useLayoutEffect(() => {\n return () => {\n instance.componentWillUnmount?.();\n classLifecycleSnapshots.delete(instance);\n classUpdateContexts.delete(instance);\n };\n }, []);\n}\n\nfunction isErrorBoundaryClass(\n type: ClassComponentType,\n instance: ClassComponentInstance,\n): boolean {\n return (\n typeof type.getDerivedStateFromError === \"function\" ||\n typeof instance.componentDidCatch === \"function\"\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"class-component.js","sourceRoot":"","sources":["../src/class-component.ts"],"names":[],"mappings":"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","sourcesContent":["import { renderWithRootRuntime, useLayoutEffect, useRef, type RootRuntime } from \"./hooks.js\";\nimport type { ReactCompatElement, ReactCompatNode } from \"./element.js\";\nimport { withHydrationComponentStack, type RenderOptions } from \"./hydration.js\";\nimport type { ReconcileNode, ReconcileResult } from \"./reconcile-types.js\";\nimport { isThenable } from \"./thenable.js\";\nimport { shallowEqual } from \"./prop-comparison.js\";\n\nconst CLASS_COMPONENT_RUNTIME_OWNER = Symbol.for(\"modular.react.class_component_runtime\");\n\nexport interface ClassComponentInstance {\n props: Record<string, unknown>;\n state?: Record<string, unknown>;\n setState?: (\n partial:\n | Record<string, unknown>\n | ((\n previousState: Record<string, unknown>,\n props: Record<string, unknown>,\n ) => Record<string, unknown> | null),\n callback?: () => void,\n ) => void;\n forceUpdate?: (callback?: () => void) => void;\n render(): ReactCompatNode;\n componentDidMount?: () => void;\n componentDidUpdate?: (\n previousProps: Record<string, unknown>,\n previousState: Record<string, unknown>,\n snapshot?: unknown,\n ) => void;\n componentWillUnmount?: () => void;\n shouldComponentUpdate?: (\n nextProps: Record<string, unknown>,\n nextState: Record<string, unknown>,\n ) => boolean;\n getSnapshotBeforeUpdate?: (\n previousProps: Record<string, unknown>,\n previousState: Record<string, unknown>,\n ) => unknown;\n componentDidCatch?: (error: Error, info: { componentStack: string }) => void;\n}\n\nexport interface ClassComponentType {\n new (props: Record<string, unknown>): ClassComponentInstance;\n getDerivedStateFromProps?: (\n nextProps: Record<string, unknown>,\n previousState: Record<string, unknown>,\n ) => Record<string, unknown> | null;\n getDerivedStateFromError?: (error: Error) => Record<string, unknown> | null;\n}\n\nexport interface Component<\n P extends Record<string, unknown> = Record<string, unknown>,\n S extends Record<string, unknown> = Record<string, unknown>,\n> {\n props: P;\n state?: S;\n setState(\n partial:\n | Partial<S>\n | ((\n previousState: Readonly<S>,\n props: Readonly<P>,\n ) => Partial<S> | S | null),\n callback?: () => void,\n ): void;\n forceUpdate(callback?: () => void): void;\n render(): ReactCompatNode;\n}\n\nexport interface ComponentConstructor {\n new <\n P extends Record<string, unknown> = Record<string, unknown>,\n S extends Record<string, unknown> = Record<string, unknown>,\n >(props: P): Component<P, S>;\n <\n P extends Record<string, unknown> = Record<string, unknown>,\n S extends Record<string, unknown> = Record<string, unknown>,\n >(this: Component<P, S>, props: P): void;\n prototype: Component<any, any>;\n}\n\nexport const Component: ComponentConstructor = function Component<\n P extends Record<string, unknown> = Record<string, unknown>,\n S extends Record<string, unknown> = Record<string, unknown>,\n>(this: Component<P, S>, props: P): void {\n this.props = props;\n} as ComponentConstructor;\n\nComponent.prototype.setState = function setState<\n P extends Record<string, unknown>,\n S extends Record<string, unknown>,\n>(\n this: Component<P, S>,\n partial:\n | Partial<S>\n | ((\n previousState: Readonly<S>,\n props: Readonly<P>,\n ) => Partial<S> | S | null),\n callback?: () => void,\n): void {\n enqueueClassSetState(\n this as unknown as ClassComponentInstance,\n partial as Parameters<NonNullable<ClassComponentInstance[\"setState\"]>>[0],\n callback,\n );\n};\n\nComponent.prototype.forceUpdate = function forceUpdate(\n this: Component,\n callback?: () => void,\n): void {\n enqueueClassForceUpdate(this as unknown as ClassComponentInstance, callback);\n};\n\nComponent.prototype.render = function render(): ReactCompatNode {\n return null;\n};\n\nexport interface PureComponent<\n P extends Record<string, unknown> = Record<string, unknown>,\n S extends Record<string, unknown> = Record<string, unknown>,\n> extends Component<P, S> {\n shouldComponentUpdate(nextProps: P, nextState: S): boolean;\n}\n\nexport interface PureComponentConstructor {\n new <\n P extends Record<string, unknown> = Record<string, unknown>,\n S extends Record<string, unknown> = Record<string, unknown>,\n >(props: P): PureComponent<P, S>;\n <\n P extends Record<string, unknown> = Record<string, unknown>,\n S extends Record<string, unknown> = Record<string, unknown>,\n >(this: PureComponent<P, S>, props: P): void;\n prototype: PureComponent<any, any>;\n}\n\nexport const PureComponent: PureComponentConstructor = function PureComponent<\n P extends Record<string, unknown> = Record<string, unknown>,\n S extends Record<string, unknown> = Record<string, unknown>,\n>(this: PureComponent<P, S>, props: P): void {\n (Component as unknown as (this: unknown, props: unknown) => void).call(\n this,\n props,\n );\n} as PureComponentConstructor;\n\nPureComponent.prototype = Object.create(Component.prototype) as PureComponent<any, any>;\nPureComponent.prototype.constructor = PureComponent;\nPureComponent.prototype.shouldComponentUpdate = function shouldComponentUpdate<\n P extends Record<string, unknown>,\n S extends Record<string, unknown>,\n>(\n this: PureComponent<P, S>,\n nextProps: P,\n nextState: S,\n): boolean {\n return !shallowEqual(this.props, nextProps) || !shallowEqual(this.state ?? {}, nextState ?? {});\n};\n\ninterface ClassLifecycleSnapshot {\n previousState?: Record<string, unknown>;\n nextState?: Record<string, unknown>;\n force?: boolean;\n snapshot?: unknown;\n}\n\ninterface ClassUpdateContext {\n runtime: RootRuntime;\n path: string;\n}\n\ninterface ClassComponentGlobalState {\n lifecycleSnapshots: WeakMap<ClassComponentInstance, ClassLifecycleSnapshot>;\n updateContexts: WeakMap<ClassComponentInstance, ClassUpdateContext>;\n pendingInstancesByRuntime: WeakMap<RootRuntime, Map<string, ClassComponentInstance>>;\n dirtyPathsByRuntime: WeakMap<RootRuntime, Set<string>>;\n}\n\nconst CLASS_COMPONENT_STATE_KEY = Symbol.for(\"modular.react.class_component_state\");\nconst classComponentGlobalState =\n ((globalThis as typeof globalThis & Record<symbol, ClassComponentGlobalState | undefined>)[\n CLASS_COMPONENT_STATE_KEY\n ] ??= {\n lifecycleSnapshots: new WeakMap(),\n updateContexts: new WeakMap(),\n pendingInstancesByRuntime: new WeakMap(),\n dirtyPathsByRuntime: new WeakMap(),\n });\nconst classLifecycleSnapshots = classComponentGlobalState.lifecycleSnapshots;\nconst classUpdateContexts = classComponentGlobalState.updateContexts;\nconst classPendingInstancesByRuntime = classComponentGlobalState.pendingInstancesByRuntime;\nconst classDirtyPathsByRuntime = classComponentGlobalState.dirtyPathsByRuntime;\n\nexport type ClassComponentRenderResult =\n | {\n kind: \"render\";\n node: ReactCompatNode;\n instance: ClassComponentInstance;\n type: ClassComponentType;\n }\n | { kind: \"skip\" };\n\nexport function reconcileClassComponent(\n parent: ParentNode,\n previousNodes: readonly Node[],\n type: ClassComponentType,\n props: Record<string, unknown>,\n runtime: RootRuntime,\n path: string,\n options: RenderOptions,\n reconcileNode: ReconcileNode,\n onInstance?: (instance: ClassComponentInstance) => void,\n): ReconcileResult {\n const rendered = renderClassComponentWithRuntime(type, props, runtime, path);\n\n if (rendered.kind === \"skip\") {\n return { nodes: previousNodes.slice(0, 1), consumed: previousNodes.length };\n }\n\n onInstance?.(rendered.instance);\n const childOptions = withHydrationComponentStack(\n options,\n getClassComponentName(type),\n );\n\n try {\n return reconcileNode(\n parent,\n previousNodes,\n rendered.node,\n runtime,\n `${path}.class`,\n childOptions,\n );\n } catch (error) {\n const fallbackNode = recoverClassComponentError(\n rendered.type,\n rendered.instance,\n error,\n );\n\n if (fallbackNode === undefined) {\n throw error;\n }\n\n return reconcileNode(\n parent,\n previousNodes,\n fallbackNode,\n runtime,\n `${path}.class.fallback`,\n childOptions,\n );\n }\n}\n\nexport function renderClassComponentWithRuntime(\n type: ClassComponentType,\n props: Record<string, unknown>,\n runtime: RootRuntime,\n path: string,\n options: {\n currentInstance?: ClassComponentInstance;\n hasDirtyDescendant?: boolean;\n } = {},\n): ClassComponentRenderResult {\n return renderWithRootRuntime(runtime, path, () => {\n const instanceRef = useRef<ClassComponentInstance | undefined>(undefined);\n const didCommitRef = useRef(false);\n const currentInstance =\n options.currentInstance instanceof type\n ? options.currentInstance\n : getPendingClassInstance(runtime, path, type);\n\n if (\n currentInstance !== undefined &&\n instanceRef.current !== currentInstance\n ) {\n instanceRef.current = currentInstance;\n didCommitRef.current = true;\n }\n\n const previousInstance = instanceRef.current;\n const hasDifferentType =\n previousInstance !== undefined && !(previousInstance instanceof type);\n const replacedInstance = hasDifferentType ? previousInstance : undefined;\n\n if (hasDifferentType) {\n classLifecycleSnapshots.delete(previousInstance);\n classUpdateContexts.delete(previousInstance);\n didCommitRef.current = false;\n instanceRef.current = undefined;\n }\n\n const instance =\n instanceRef.current !== undefined && instanceRef.current instanceof type\n ? instanceRef.current\n : new type(props);\n const previousProps = instance.props;\n const snapshot = classLifecycleSnapshots.get(instance);\n const previousState = snapshot?.previousState ?? instance.state ?? {};\n\n instanceRef.current = instance;\n installClassUpdateMethods(instance, runtime, path);\n clearPendingClassUpdate(runtime, path);\n const nextState = resolveDerivedStateFromProps(\n type,\n props,\n snapshot?.nextState ?? instance.state ?? {},\n );\n const shouldSkipUpdate =\n didCommitRef.current &&\n snapshot?.force !== true &&\n options.hasDirtyDescendant !== true &&\n instance.shouldComponentUpdate?.(props, nextState) === false;\n\n instance.props = props;\n instance.state = nextState;\n installClassLifecycleEffects(\n instance,\n didCommitRef,\n previousProps,\n previousState,\n shouldSkipUpdate,\n replacedInstance,\n );\n\n if (shouldSkipUpdate) {\n return { kind: \"skip\" };\n }\n\n try {\n const node = instance.render();\n\n if (didCommitRef.current) {\n classLifecycleSnapshots.set(instance, {\n ...classLifecycleSnapshots.get(instance),\n snapshot: instance.getSnapshotBeforeUpdate?.(\n previousProps ?? {},\n previousState,\n ),\n });\n }\n\n return { kind: \"render\", node, instance, type };\n } catch (error) {\n const fallbackNode = recoverClassComponentError(type, instance, error);\n\n if (fallbackNode === undefined) {\n throw error;\n }\n\n return { kind: \"render\", node: fallbackNode, instance, type };\n }\n }, CLASS_COMPONENT_RUNTIME_OWNER);\n}\n\nexport function applyDerivedStateFromProps(\n type: ClassComponentType,\n instance: ClassComponentInstance,\n nextProps: Record<string, unknown>,\n previousState: Record<string, unknown>,\n): void {\n instance.state = resolveDerivedStateFromProps(type, nextProps, previousState);\n}\n\nexport function resolveDerivedStateFromProps(\n type: ClassComponentType,\n nextProps: Record<string, unknown>,\n previousState: Record<string, unknown>,\n): Record<string, unknown> {\n const derivedState = type.getDerivedStateFromProps?.(nextProps, previousState);\n\n if (derivedState === undefined || derivedState === null) {\n return previousState;\n }\n\n return {\n ...previousState,\n ...derivedState,\n };\n}\n\nexport function recoverClassComponentError(\n type: ClassComponentType,\n instance: ClassComponentInstance,\n error: unknown,\n): ReactCompatNode | undefined {\n if (isThenable(error) || !isErrorBoundaryClass(type, instance)) {\n return undefined;\n }\n\n const normalizedError =\n error instanceof Error ? error : new Error(String(error));\n const derivedState = type.getDerivedStateFromError?.(normalizedError);\n\n if (derivedState !== undefined && derivedState !== null) {\n instance.state = {\n ...instance.state,\n ...derivedState,\n };\n }\n\n instance.componentDidCatch?.(normalizedError, { componentStack: \"\" });\n return instance.render();\n}\n\nexport function isClassComponentType(value: unknown): value is ClassComponentType {\n return (\n typeof value === \"function\" &&\n typeof (value as { prototype?: { render?: unknown } }).prototype?.render ===\n \"function\"\n );\n}\n\nfunction getClassComponentName(type: ClassComponentType): string {\n return type.name === \"\" ? \"Anonymous\" : type.name;\n}\n\nexport function reconcileErrorBoundary(\n parent: ParentNode,\n previousNodes: readonly Node[],\n element: ReactCompatElement,\n runtime: RootRuntime,\n path: string,\n options: RenderOptions,\n reconcileNode: ReconcileNode,\n): ReconcileResult {\n try {\n return reconcileNode(\n parent,\n previousNodes,\n element.props.children,\n runtime,\n `${path}.eb`,\n options,\n );\n } catch (error) {\n if (isThenable(error)) {\n throw error;\n }\n\n const normalizedError =\n error instanceof Error ? error : new Error(String(error));\n const onError = element.props.onError;\n\n if (typeof onError === \"function\") {\n (onError as (error: Error) => void)(normalizedError);\n }\n\n const fallback = element.props.fallback;\n const fallbackNode =\n typeof fallback === \"function\"\n ? (fallback as (error: Error) => ReactCompatNode)(normalizedError)\n : null;\n\n return reconcileNode(\n parent,\n previousNodes,\n fallbackNode,\n runtime,\n `${path}.eb.fallback`,\n options,\n );\n }\n}\n\nfunction installClassUpdateMethods(\n instance: ClassComponentInstance,\n runtime: RootRuntime,\n path: string,\n): void {\n classUpdateContexts.set(instance, { runtime, path });\n instance.setState = Component.prototype.setState;\n instance.forceUpdate = Component.prototype.forceUpdate;\n}\n\nfunction enqueueClassSetState(\n instance: ClassComponentInstance,\n partial: Parameters<NonNullable<ClassComponentInstance[\"setState\"]>>[0],\n callback?: () => void,\n): void {\n const updateContext = classUpdateContexts.get(instance);\n\n if (updateContext === undefined) {\n callback?.call(instance);\n return;\n }\n\n const snapshot = classLifecycleSnapshots.get(instance);\n const previousState = snapshot?.previousState ?? instance.state ?? {};\n const baseState = snapshot?.nextState ?? instance.state ?? {};\n const nextPartial =\n typeof partial === \"function\"\n ? partial(baseState, instance.props)\n : partial;\n\n const nextState =\n nextPartial === null\n ? baseState\n : {\n ...baseState,\n ...nextPartial,\n };\n\n classLifecycleSnapshots.set(instance, {\n ...snapshot,\n previousState,\n nextState,\n });\n\n markClassInstanceDirty(instance, updateContext);\n callback?.call(instance);\n}\n\nfunction enqueueClassForceUpdate(\n instance: ClassComponentInstance,\n callback?: () => void,\n): void {\n const updateContext = classUpdateContexts.get(instance);\n\n if (updateContext === undefined) {\n callback?.call(instance);\n return;\n }\n\n classLifecycleSnapshots.set(instance, {\n previousState: instance.state ?? {},\n force: true,\n });\n markClassInstanceDirty(instance, updateContext);\n callback?.call(instance);\n}\n\nfunction markClassInstanceDirty(\n instance: ClassComponentInstance,\n updateContext: ClassUpdateContext,\n): void {\n markPendingClassUpdate(instance, updateContext);\n const runtimeInstance = updateContext.runtime.instances.get(updateContext.path) as\n | { dirty?: boolean }\n | undefined;\n if (runtimeInstance !== undefined) {\n runtimeInstance.dirty = true;\n }\n updateContext.runtime.rerender();\n}\n\nexport function hasDirtyClassUpdate(\n runtime: RootRuntime | undefined,\n keys: readonly string[],\n prefix?: string,\n): boolean {\n if (runtime === undefined) {\n return false;\n }\n\n const dirtyPaths = classDirtyPathsByRuntime.get(runtime);\n if (dirtyPaths === undefined) {\n return false;\n }\n\n for (const key of keys) {\n if (dirtyPaths.has(key)) {\n return true;\n }\n }\n\n if (prefix === undefined) {\n return false;\n }\n\n for (const dirtyPath of dirtyPaths) {\n if (dirtyPath === prefix || dirtyPath.startsWith(`${prefix}.`)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction markPendingClassUpdate(\n instance: ClassComponentInstance,\n updateContext: ClassUpdateContext,\n): void {\n let pendingInstances = classPendingInstancesByRuntime.get(updateContext.runtime);\n if (pendingInstances === undefined) {\n pendingInstances = new Map();\n classPendingInstancesByRuntime.set(updateContext.runtime, pendingInstances);\n }\n let dirtyPaths = classDirtyPathsByRuntime.get(updateContext.runtime);\n if (dirtyPaths === undefined) {\n dirtyPaths = new Set();\n classDirtyPathsByRuntime.set(updateContext.runtime, dirtyPaths);\n }\n pendingInstances.set(updateContext.path, instance);\n dirtyPaths.add(updateContext.path);\n}\n\nfunction getPendingClassInstance(\n runtime: RootRuntime,\n path: string,\n type: ClassComponentType,\n): ClassComponentInstance | undefined {\n const dirtyPaths = classDirtyPathsByRuntime.get(runtime);\n if (dirtyPaths?.has(path) !== true) {\n return undefined;\n }\n\n const instance = classPendingInstancesByRuntime.get(runtime)?.get(path);\n return instance instanceof type ? instance : undefined;\n}\n\nfunction clearPendingClassUpdate(runtime: RootRuntime, path: string): void {\n classDirtyPathsByRuntime.get(runtime)?.delete(path);\n classPendingInstancesByRuntime.get(runtime)?.delete(path);\n}\n\nfunction installClassLifecycleEffects(\n instance: ClassComponentInstance,\n didCommitRef: { current: boolean },\n previousProps: Record<string, unknown> | undefined,\n previousState: Record<string, unknown>,\n skipUpdate: boolean,\n replacedInstance?: ClassComponentInstance,\n): void {\n useLayoutEffect(() => {\n if (replacedInstance !== undefined) {\n replacedInstance.componentWillUnmount?.();\n classUpdateContexts.delete(replacedInstance);\n }\n\n if (skipUpdate) {\n classLifecycleSnapshots.delete(instance);\n return;\n }\n\n if (didCommitRef.current) {\n instance.componentDidUpdate?.(\n previousProps ?? {},\n previousState,\n classLifecycleSnapshots.get(instance)?.snapshot,\n );\n } else {\n didCommitRef.current = true;\n instance.componentDidMount?.();\n }\n\n classLifecycleSnapshots.delete(instance);\n });\n\n useLayoutEffect(() => {\n return () => {\n instance.componentWillUnmount?.();\n classLifecycleSnapshots.delete(instance);\n classUpdateContexts.delete(instance);\n };\n }, []);\n}\n\nfunction isErrorBoundaryClass(\n type: ClassComponentType,\n instance: ClassComponentInstance,\n): boolean {\n return (\n typeof type.getDerivedStateFromError === \"function\" ||\n typeof instance.componentDidCatch === \"function\"\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host-reconciler.d.ts","sourceRoot":"","sources":["../src/host-reconciler.ts"],"names":[],"mappings":"AAAA,OAAO,EAgBL,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,EAWL,KAAK,WAAW,EACjB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"host-reconciler.d.ts","sourceRoot":"","sources":["../src/host-reconciler.ts"],"names":[],"mappings":"AAAA,OAAO,EAgBL,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,EAWL,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
|
@@ -8,7 +8,7 @@ import { createHostElement, hostElementMatches, isHostElement, namespaceForHostC
|
|
|
8
8
|
import { createFiber, createWorkInProgress } from "./fiber.js";
|
|
9
9
|
import { renderWithRootRuntime, renderWithProfiler, renderWithStrictModeMemoCapture, renderStrictModeReplay, runWithHostCommit, restoreRuntimeSnapshot, takeRuntimeSnapshot, getDevToolsHookState, hasContextDependency, hasChangedContextDependency, } from "./hooks.js";
|
|
10
10
|
import { isThenable } from "./thenable.js";
|
|
11
|
-
import { isClassComponentType, recoverClassComponentError, renderClassComponentWithRuntime, } from "./class-component.js";
|
|
11
|
+
import { hasDirtyClassUpdate, isClassComponentType, recoverClassComponentError, renderClassComponentWithRuntime, } from "./class-component.js";
|
|
12
12
|
import { areMemoPropsEqual, getPendingProps, shallowEqual } from "./prop-comparison.js";
|
|
13
13
|
import { reportElementTextMismatch, reportExtraHydrationNodes, reportHydrationNodeTypeMismatch, reportMissingHydrationNode, reportReactSuspenseServerError, reportRecoverable, withHydrationComponentStack, } from "./hydration.js";
|
|
14
14
|
const committedPortalContainers = new Set();
|
|
@@ -735,7 +735,7 @@ function createHostFiberImpl(parent, current, node, key, runtime, path, options
|
|
|
735
735
|
: createFiber("memo", node.props, key);
|
|
736
736
|
fiber.type = memoType;
|
|
737
737
|
if (previousMemoState !== undefined &&
|
|
738
|
-
!hasDirtyInstance(runtime, previousMemoState.instanceKeys) &&
|
|
738
|
+
!hasDirtyInstance(runtime, previousMemoState.instanceKeys, memoPath) &&
|
|
739
739
|
!hasUnflushedMountEffectInstance(runtime, previousMemoState.instanceKeys) &&
|
|
740
740
|
areMemoPropsEqual(memoType, previousMemoState.props, node.props)) {
|
|
741
741
|
markActiveInstanceKeys(runtime, previousMemoState.instanceKeys);
|
|
@@ -817,7 +817,15 @@ function createHostFiberImpl(parent, current, node, key, runtime, path, options
|
|
|
817
817
|
: createFiber("class-component", node.props, key);
|
|
818
818
|
fiber.type = classType;
|
|
819
819
|
const previousClassChildKeys = collectInstanceKeys(runtime, `${path}.class`);
|
|
820
|
-
const
|
|
820
|
+
const currentClassInstance = current?.tag === "class-component" && current.type === classType
|
|
821
|
+
? current.stateNode
|
|
822
|
+
: undefined;
|
|
823
|
+
const rendered = renderClassComponentWithRuntime(classType, node.props, runtime, path, {
|
|
824
|
+
...(currentClassInstance === undefined
|
|
825
|
+
? {}
|
|
826
|
+
: { currentInstance: currentClassInstance }),
|
|
827
|
+
hasDirtyDescendant: hasDirtyInstance(runtime, previousClassChildKeys, `${path}.class`),
|
|
828
|
+
});
|
|
821
829
|
applyRef(node.ref, rendered.kind === "skip" ? current?.stateNode : rendered.instance);
|
|
822
830
|
if (rendered.kind === "skip") {
|
|
823
831
|
fiber.child = current?.child;
|
|
@@ -860,7 +868,7 @@ function createHostFiberImpl(parent, current, node, key, runtime, path, options
|
|
|
860
868
|
if (runtime.strictReplayDepth === 0 &&
|
|
861
869
|
previousFunctionState !== undefined &&
|
|
862
870
|
(canReuseSameElement || canReuseExternalStoreSnapshot) &&
|
|
863
|
-
!hasDirtyInstance(runtime, previousFunctionState.instanceKeys) &&
|
|
871
|
+
!hasDirtyInstance(runtime, previousFunctionState.instanceKeys, path) &&
|
|
864
872
|
!hasUnflushedMountEffectInstance(runtime, previousFunctionState.instanceKeys) &&
|
|
865
873
|
!hasPendingAsyncChild(current?.child)) {
|
|
866
874
|
markActiveInstanceKeys(runtime, previousFunctionState.instanceKeys);
|
|
@@ -926,6 +934,7 @@ function createHostFiberImpl(parent, current, node, key, runtime, path, options
|
|
|
926
934
|
current?.tag === "host-component" &&
|
|
927
935
|
current.type === node.type &&
|
|
928
936
|
Object.is(hostFiberChildrenProp(current.memoizedProps), node.props.children) &&
|
|
937
|
+
!hasDirtyInstance(runtime, [], `${path}.c`) &&
|
|
929
938
|
canReuseStaticHostSubtree(current.child)) {
|
|
930
939
|
fiber.child = current.child;
|
|
931
940
|
if (fiber.child !== undefined) {
|
|
@@ -1957,8 +1966,26 @@ function markActiveInstanceKeys(runtime, keys) {
|
|
|
1957
1966
|
runtime.activeInstanceKeys?.add(key);
|
|
1958
1967
|
}
|
|
1959
1968
|
}
|
|
1960
|
-
function hasDirtyInstance(runtime, keys) {
|
|
1961
|
-
|
|
1969
|
+
function hasDirtyInstance(runtime, keys, prefix) {
|
|
1970
|
+
if (runtime === undefined) {
|
|
1971
|
+
return false;
|
|
1972
|
+
}
|
|
1973
|
+
if (hasDirtyClassUpdate(runtime, keys, prefix)) {
|
|
1974
|
+
return true;
|
|
1975
|
+
}
|
|
1976
|
+
if (keys.some((key) => runtime.instances.get(key)?.dirty === true)) {
|
|
1977
|
+
return true;
|
|
1978
|
+
}
|
|
1979
|
+
if (prefix === undefined) {
|
|
1980
|
+
return false;
|
|
1981
|
+
}
|
|
1982
|
+
for (const [key, instance] of runtime.instances) {
|
|
1983
|
+
if ((key === prefix || key.startsWith(`${prefix}.`)) &&
|
|
1984
|
+
instance.dirty === true) {
|
|
1985
|
+
return true;
|
|
1986
|
+
}
|
|
1987
|
+
}
|
|
1988
|
+
return false;
|
|
1962
1989
|
}
|
|
1963
1990
|
function hasUnflushedMountEffectInstance(runtime, keys) {
|
|
1964
1991
|
return keys.some((key) => {
|