SWC (Speedy Web Compiler) рассматривает вывод как часть конвейера трансформации, где результат компиляции JavaScript/TypeScript не сохраняется внутри процесса, а передаётся дальше через стандартные потоки ввода-вывода. Такой подход обеспечивает интеграцию с UNIX-экосистемой и позволяет использовать SWC как звено в цепочке инструментов без промежуточных файлов.
stdout в контексте SWC — это основной канал доставки результирующего кода после трансформации AST. CLI-интерфейс и Node.js-обёртки используют его для передачи JavaScript-кода, sourcemaps или комбинированных структурных данных.
При запуске компилятора через CLI результат трансформации может направляться либо в файл, либо в стандартный поток вывода.
В случае отсутствия параметра вывода в файл, SWC использует stdout как канал результата:
Типичный процесс выглядит как конвейер:
stdout в этом процессе выступает конечной стадией генерации.
SWC не ограничивается однократным выводом. Внутри архитектуры реализуется потоковая модель, где данные могут передаваться по мере генерации.
Ключевые особенности:
|)
Пример логики потока:
AST → Codegen → Buffer → stdout
В некоторых конфигурациях буферизация заменяется прямой записью в поток, что снижает задержки при больших входных файлах.
Одной из ключевых возможностей SWC является работа через стандартный ввод и вывод без участия файловой системы.
Сценарий:
Это позволяет включать SWC в цепочки:
cat input.js | swc | node
или
swc < input.ts > output.js
stdout становится универсальным транспортом для результата трансформации.
SWC может выводить различные типы данных в зависимости от режима работы.
Основной режим — генерация JavaScript после трансформации TypeScript, JSX или современных синтаксических конструкций.
stdout содержит:
При включённой генерации sourcemap возможны два варианта вывода:
Inline-вариант внедряется как base64-кодированный блок:
sourceMappingURL=dat a:application/json;base64,...
SWC добавляет его в конец stdout-потока, если задан соответствующий режим конфигурации.
Некоторые режимы SWC (например, интеграции с билд-системами) используют stdout как транспорт для структурированных данных.
В таком случае stdout может содержать:
Формат обычно JSON Lines или единый JSON-объект.
Архитектура SWC оптимизирована под высокую скорость генерации, поэтому работа с stdout реализована с учётом следующих принципов:
Код накапливается в буфере и отправляется в stdout пакетами, что снижает нагрузку на I/O.
При генерации строк часто используется стратегия минимального копирования данных, что уменьшает overhead при больших файлах.
SWC может выполнять трансформацию в многопоточном режиме (через Rust worker threads), но stdout остаётся единым синхронизированным каналом вывода, в который агрегируются результаты.
При возникновении ошибок компиляции SWC разделяет потоки:
Такое разделение позволяет использовать SWC в автоматизированных пайплайнах без риска загрязнения выходного кода ошибками.
Пример логики:
Поведение stdout зависит от параметров конфигурации:
При использовании SWC через Node.js API stdout может быть эмулирован или перехвачен:
Пример модели:
Node process → SWC CLI → stdout → Node stream consumer
stdout в этом контексте становится промежуточным транспортом между процессами.
При включённом режиме наблюдения за файлами SWC может многократно обновлять stdout при каждом изменении входных данных.
Особенности:
stdout в таком режиме используется как непрерывный канал обновлений, а не как одноразовый результат.
SWC гарантирует атомарность вывода в stdout на уровне одного файла трансформации:
Это важно при параллельной обработке нескольких входных модулей.
Несмотря на универсальность, stdout имеет ограничения:
SWC компенсирует это разделением stdout/stderr и возможностью дополнительного JSON-режима.
stdout в SWC является финальной точкой вычислительного графа компиляции. Вся система трансформации строится вокруг идеи:
Source → AST → Transformations → Codegen → stdout
Такой подход делает SWC совместимым с потоковыми системами сборки и позволяет использовать его как низкоуровневый компилятор в составе более сложных инструментов.