Checking the real runtime graph, there are exactly two cycles:
1. cascade → utils → dom → cascade (with utils ↔ dom nested inside it)
This is the one that actually bites. Probing module-body evaluation shows SHIFTED_PROPERTIES is not yet initialized when dom.ts's body runs — it only gets away with it because the read happens inside getCSSPropertyValue rather than at module scope. All three edges are single-use:
-
dom → cascade exists solely for SHIFTED_PROPERTIES (dom.ts:51)
-
utils → dom exists solely for strategyForElement (utils.ts:292 → getCSSPropertyValue)
-
dom → utils exists solely for getRootStyleContainer (dom.ts:105)
2. parse ↔ fallback
Only isIdentifier is a real value edge — AnchorPosition, AnchorPositions and TryBlock are types and already erase. parse needs parsePositionFallbacks; fallback needs those four.
Perhaps look at improving this in a new PR?
Originally posted by @jpzwarte in #448
Originally posted by @jpzwarte in #448