Merge pull request #1060 from func25/f/preserve-static

fix(core): stop binding class values in composition scoped window
This commit is contained in:
Miguel Ángel
2026-05-24 12:27:16 -04:00
committed by GitHub
2 changed files with 23 additions and 2 deletions
@@ -146,6 +146,28 @@ body { margin: 0; }
expect(variablesByComp["card-1"]).toEqual({ title: "Pro" });
});
it("preserves static methods on classes exposed through window", () => {
const { document } = parseHTML(`<div data-composition-id="scene"></div>`);
class FakeTexts {
static mountChars() {
return "ok";
}
}
const fakeWindow: Record<string, unknown> = {
document,
__timelines: {},
Texts: FakeTexts,
};
const wrapped = wrapScopedCompositionScript(
`window.__capturedMountCharsType = typeof window.Texts?.mountChars;`,
"scene",
);
new Function("window", wrapped)(fakeWindow);
expect(fakeWindow.__capturedMountCharsType).toBe("function");
});
it("executes document and GSAP selectors inside the composition root", () => {
const { document } = parseHTML(`
<div data-composition-id="scene" data-start="intro"><h1 class="title">Scene</h1></div>
@@ -383,8 +383,7 @@ export function wrapScopedCompositionScript(
? new Proxy(window, {
get: function(target, prop, receiver) {
if (prop === "__timelines") return __hfGetTimelineRegistry();
var value = Reflect.get(target, prop, target);
return typeof value === "function" ? value.bind(target) : value;
return Reflect.get(target, prop, target);
},
set: function(target, prop, value, receiver) {
if (prop === "__timelines") {