fix(javascript): preserve factory export helper identity

This commit is contained in:
morluto committed 2026-10-24 16:08:26 +08:00
1 parent 781760a195
commit 0f3a15de0d
12 files changed
+277 -29

No files matched your search

@@ -67,7 +67,10 @@ import {
} from "./javascriptSemanticRequireOrigin.js";
import { semanticBundledRequireOrigin } from "./javascriptBundledRequireOrigin.js";
import { collectSemanticMemberMutationsSteps } from "./javascriptSemanticMemberMutations.js";
import { semanticEffectTiming } from "./javascriptSemanticMutationInitializers.js";
import {
semanticEffectTiming,
semanticEffectTimingWithinActivation,
} from "./javascriptSemanticMutationInitializers.js";
import {
createAmbientPathResolver,
indexJavaScriptAmbientWritesSteps,
@@ -229,6 +232,7 @@ const visitSemanticReferenceEffectsAtSite = (
effect: JavaScriptSemanticReferenceEffectsAtSite["effects"][number],
) => boolean,
requestedPath?: JavaScriptSemanticPropertyPath,
effectTiming: typeof semanticEffectTiming = semanticEffectTiming,
): Omit<JavaScriptSemanticReferenceEffectsAtSite, "effects"> => {
const { root, path: inferredPath } = semanticReferenceRoot(referenceNode);
const memberEffectsIndexed = indexedMemberMutationStates.has(state);
@@ -259,7 +263,7 @@ const visitSemanticReferenceEffectsAtSite = (
return visit({
kind,
...(effectPath === undefined ? {} : { path: effectPath }),
timing: semanticEffectTiming(site, node, state),
timing: effectTiming(site, node, state),
});
};
if (binding !== undefined) {
@@ -328,6 +332,7 @@ const semanticReferenceEffectsAtSite = (
site: t.Node,
referenceNode: t.Node,
requestedPath?: JavaScriptSemanticPropertyPath,
effectTiming: typeof semanticEffectTiming = semanticEffectTiming,
): JavaScriptSemanticReferenceEffectsAtSite => {
const effects: JavaScriptSemanticReferenceEffectsAtSite["effects"][number][] =
[];
@@ -340,6 +345,7 @@ const semanticReferenceEffectsAtSite = (
return true;
},
requestedPath,
effectTiming,
);
return { ...metadata, effects };
};
@@ -554,6 +560,15 @@ export function* indexJavaScriptBindingsWithReceiversSteps(
propertyPath,
);
},
effectsForReferenceWithinActivationAt(site, referenceNode, propertyPath) {
return semanticReferenceEffectsAtSite(
state,
site,
referenceNode,
propertyPath,
semanticEffectTimingWithinActivation,
);
},
referenceMayHaveChangedAt(site, referenceNode, propertyPath) {
if (!indexedMemberMutationStates.has(state)) return true;
return referenceEffectsMayHaveChanged(