WebKit сегодня рассказал, откуда брались ошибки «Cannot access ... before initialization» в модулях с
await на верхнем уровне. Загрузчик модулей Safari был написан по предложению WHATWG Loader, последний раз обновлённому в январе 2016 года, когда async/await в JavaScript ещё не существовало. Top-level await из ES2022 реализовали поверх этой основы, и точечные правки не помогали.В январе 2026 года команда удалила старый загрузчик и переписала его на C++ по алгоритмам стандарта ECMAScript. Тесты присылала в том числе команда Bun: их рантайм работает на том же JavaScriptCore и унаследовал те же баги. Исправление уже доступно в Safari Technology Preview 251 и бете Safari 27, в стабильную версию попадёт с выходом Safari 27, дата которого не названа.
Для фронтендеров это значит, что один из последних поводов избегать top-level await в продакшене скоро исчезнет, но обходные пути для старых Safari пока придётся держать. Пример падающего кода и детали переписывания разобрали на сайте.