diff --git a/packages/core/src/runtime/init.test.ts b/packages/core/src/runtime/init.test.ts index 24c11cb9c..d45fb9552 100644 --- a/packages/core/src/runtime/init.test.ts +++ b/packages/core/src/runtime/init.test.ts @@ -282,4 +282,33 @@ describe("initSandboxRuntimeModular", () => { expect(video.paused).toBe(true); expect(video.currentTime).toBe(0); }); + + it("allows external code to reassign delegated __player methods", () => { + const root = document.createElement("div"); + root.setAttribute("data-composition-id", "main"); + root.setAttribute("data-root", "true"); + root.setAttribute("data-start", "0"); + root.setAttribute("data-width", "1920"); + root.setAttribute("data-height", "1080"); + document.body.appendChild(root); + + (window as Window & { __timelines?: Record }).__timelines = { + main: createMockTimeline(10), + }; + + initSandboxRuntimeModular(); + + const player = ( + window as Window & { + __player?: { renderSeek: (timeSeconds: number) => void }; + } + ).__player; + expect(player).toBeDefined(); + if (!player) return; + + const original = player.renderSeek; + expect(() => { + player.renderSeek = (t: number) => original(t); + }).not.toThrow(); + }); }); diff --git a/packages/core/src/runtime/init.ts b/packages/core/src/runtime/init.ts index b395198cd..1493b3d8c 100644 --- a/packages/core/src/runtime/init.ts +++ b/packages/core/src/runtime/init.ts @@ -1955,6 +1955,9 @@ export function initSandboxRuntimeModular(): void { for (const key of delegated) { Object.defineProperty(playerApi, key, { get: () => player[key], + set: (v: unknown) => { + (player as Record)[key] = v; + }, configurable: true, }); }