Архитектура трансформаций SWC ориентирована на строгую привязку к спецификациям ECMAScript и их эволюции. Поддержка языковых стандартов реализуется через систему парсинга, AST-представление и набор преобразований, которые могут быть включены или отключены в зависимости от целевой версии JavaScript.
SWC рассматривает ECMAScript как последовательность спецификаций, каждая из которых расширяет предыдущую. Внутри компилятора это выражается через принцип: исходный код разбирается в единое AST, после чего применяется цепочка трансформаций, соответствующих выбранной целевой версии.
Ключевой особенностью является разделение:
Такой подход позволяет поддерживать несколько поколений ECMAScript без необходимости дублирования логики компиляции.
Базовая совместимость с устаревшими окружениями достигается через набор преобразований, устраняющих современные конструкции:
ES5 рассматривается как минимальная целевая версия для большинства legacy-сценариев.
Поддержка ES2015 является фундаментальной для большинства проектов. Внутри SWC этот уровень включает трансформации:
let и const → var (при
необходимости по target)
undefined
Особое внимание уделяется сохранению семантики областей видимости и временной мёртвой зоны (TDZ), что влияет на точность преобразований.
Этот диапазон включает относительно небольшие синтаксические изменения, которые в SWC реализуются через точечные трансформации:
** → Math.pow
async/await → генераторы с runtime-обвязкой (в зависимости
от конфигурации)
Async-функции требуют дополнительной поддержки runtime, так как преобразование затрагивает управление потоком выполнения.
ES2020 добавляет более сложные конструкции, требующие расширенной трансформационной логики:
?.) → условные проверки цепочек свойств
??) → проверка на null и
undefined
Optional chaining и nullish coalescing являются одними из наиболее часто используемых преобразований в современных пайплайнах SWC.
Современные версии ECMAScript в SWC поддерживаются по мере стабилизации спецификаций. Подход основан на инкрементальном добавлении синтаксических возможностей:
&&=,
||=, ??=)
Поддержка новых стандартов часто реализуется сначала на уровне парсера, после чего добавляются трансформации для целевых окружений, не поддерживающих соответствующий синтаксис.
Ключевой механизм управления поддержкой ECMAScript — параметр целевой версии. Он определяет глубину трансформации кода.
Типичная логика:
SWC использует стратегию минимально необходимого преобразования, избегая лишней генерации вспомогательного кода.
Поддержка ECMAScript в SWC не ограничивается трансформацией. Парсер должен уметь корректно распознавать синтаксис даже при отсутствии включённых трансформаций.
Это приводит к разделению:
Такой pipeline позволяет обрабатывать код будущих версий ECMAScript без немедленной трансформации.
Поведение задаётся через конфигурационные файлы, где ключевую роль играет параметр целевой среды:
Гранулярность настроек позволяет адаптировать компиляцию под разные окружения: браузеры, Node.js, серверные рантаймы и embedded-системы.
Некоторые конструкции ECMAScript требуют не только синтаксического анализа, но и изменения структуры выполнения:
В таких случаях SWC генерирует промежуточные конструкции, моделирующие поведение исходной спецификации.
Поддержка ECMAScript в SWC ориентирована на совместимость с инструментами сборки и рантаймами:
Подход минимизации трансформаций позволяет уменьшать размер итогового бандла и ускорять сборку.
Некоторые предложения ECMAScript находятся в стадии proposal. SWC обрабатывает их через:
Такой подход предотвращает нарушение обратной совместимости при изменениях спецификации.