mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-03 04:38:33 +00:00
feat(core): add readiness adapters for map and visualization libraries (#1548)
Add readiness-only runtime adapters for Mapbox GL JS, Leaflet, Google Maps, MapLibre GL JS, and D3. Each adapter gates `__renderReady` until the library's async initialization completes, preventing the renderer from capturing blank or half-loaded frames. Built on the `getReadyPromise` adapter contract from #1543. A shared `createReadinessAdapter()` helper in `_readiness.ts` owns the settled-tracking WeakSet, promise-identity stability, and `Promise.allSettled` gate — each adapter provides only its type, window global name, and `waitFor` callback. Readiness signals per library: - Mapbox / MapLibre: `map.loaded()` + `map.on('load', ...)` - Leaflet: `map.whenReady(cb)` - Google Maps: `map.addListener('tilesloaded', cb)` with handle cleanup - D3: `transition.end()` promise 50 unit tests across 5 test files covering happy path, no-instances, stable promise identity, post-settle drain, loaded-before-subscribe race, and listener cleanup. 5 producer regression tests with Docker-generated baselines for end-to-end render verification.
This commit is contained in:
@@ -6,6 +6,11 @@ import { createGsapAdapter } from "./adapters/gsap";
|
||||
import { createAnimeJsAdapter } from "./adapters/animejs";
|
||||
import { createLottieAdapter } from "./adapters/lottie";
|
||||
import { createThreeAdapter } from "./adapters/three";
|
||||
import { createMapboxAdapter } from "./adapters/mapbox";
|
||||
import { createLeafletAdapter } from "./adapters/leaflet";
|
||||
import { createGoogleMapsAdapter } from "./adapters/google-maps";
|
||||
import { createMaplibreAdapter } from "./adapters/maplibre";
|
||||
import { createD3Adapter } from "./adapters/d3";
|
||||
import { createTypegpuAdapter } from "./adapters/typegpu";
|
||||
import {
|
||||
patchVideoTextureCompat,
|
||||
@@ -1913,6 +1918,11 @@ export function initSandboxRuntimeModular(): void {
|
||||
createAnimeJsAdapter(),
|
||||
createLottieAdapter(),
|
||||
createThreeAdapter(),
|
||||
createMapboxAdapter(),
|
||||
createLeafletAdapter(),
|
||||
createGoogleMapsAdapter(),
|
||||
createMaplibreAdapter(),
|
||||
createD3Adapter(),
|
||||
createTypegpuAdapter(),
|
||||
createGsapAdapter({ getTimeline: () => state.capturedTimeline }),
|
||||
] as RuntimeDeterministicAdapter[];
|
||||
|
||||
Reference in New Issue
Block a user