Skip to content

fix(esm): preserve circular re-export initialization - #291

Draft
BridgeAR wants to merge 2 commits into
mainfrom
BridgeAR/2026-09-08-iitm-circular-esm
Draft

fix(esm): preserve circular re-export initialization#291
BridgeAR wants to merge 2 commits into
mainfrom
BridgeAR/2026-09-08-iitm-circular-esm

Conversation

@BridgeAR

@BridgeAR BridgeAR commented Sep 9, 2026

Copy link
Copy Markdown
Member

IITM replaces the native back-edge with an uninitialized wrapper binding when it wraps every edge in an ESM export * cycle. Valid class initialization then fails before the hook runs.

This keeps the matching static cycle edge unwrapped. Generation-scoped cleanup prevents older concurrent resolutions from deleting newer cycle state.

The ordinary 32,250-module path had no reproducible CPU or retained-heap regression. The active star graph used 2.22% less CPU and 0.42% more retained heap. Repeated cached imports measured 0.996x CPU and 0.908x retained heap versus main.

Fixes: #290

IITM replaces the native back-edge with an uninitialized wrapper binding when it wraps every edge in an ESM export-star cycle. Valid class initialization then fails before the hook runs.

Generation-scoped cleanup prevents older concurrent resolutions from deleting newer cycle state.

Fixes: #290
Signed-off-by: Ruben Bridgewater <ruben.bridgewater@datadoghq.com>
An async wrapper scan consumes its initiating parent before the scan finishes. A concurrent resolve then dereferences missing state. Ignoring that resolve leaves a cycle candidate that bypasses the next hook.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Loading @platformatic/kafka via IITM crashes with ReferenceError

1 participant