mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-03 21:31:26 +00:00
Place a sentinel object in the loadedFacadeModules cache before the Jiti sync load begins. Re-entrant calls (caused by circular facade references from constant exports evaluated at module-evaluation time) now receive the sentinel instead of recursing infinitely. Once the real module finishes loading, Object.assign() back-fills the sentinel so any references captured during the circular load phase see the final exports. The Jiti load is wrapped in try/catch: on failure the sentinel is removed from the cache so that subsequent retry attempts re-execute the load instead of silently returning an empty object. The function returns the sentinel (not the raw loaded module) to guarantee a single object identity for all callers, including those that captured a reference during the circular load phase. Also tightens the generic constraint from <T> to <T extends object> so Object.assign() is type-safe, and propagates the constraint to the test-utils callers in bundled-plugin-public-surface.ts. Fixes #57394