Найти в Дзене
Chris Roylance

Релиз Bun 1.3.7

Теперь метод Buffer.from() работает до 50% быстрее при создании буферов из массивов JavaScript. Эта оптимизация позволяет обойти ненужные накладные расходы на создание массивов и использует внутреннюю функцию обнаружения массивов JSC для выполнения операций пакетного копирования как для целочисленных, так и для массивов с плавающей запятой. Улучшение размера массива 8 элементов: примерно на 50% быстрее 64 элемента: примерно на 42% быстрее 1024 элемента: примерно на 29% быстрее Базовый JavaScript-движок Bun был обновлен до последней версии JavaScriptCore от WebKit, что привело к повышению производительности и исправлению ошибок. На платформах Apple Silicon и других ARM64 составные логические выражения, такие как if (x === 0 && y === 1), теперь компилируются в более эффективные цепочки инструкций условного сравнения (ccmp/ccmn), что уменьшает количество ошибок предсказания ветвлений и размер кода. Кроме того, константы с плавающей запятой теперь могут быть материализованы непосредственно
Оглавление

Более быстрая обработка массивов с помощью Buffer.from()

Теперь метод Buffer.from() работает до 50% быстрее при создании буферов из массивов JavaScript.

-2

Эта оптимизация позволяет обойти ненужные накладные расходы на создание массивов и использует внутреннюю функцию обнаружения массивов JSC для выполнения операций пакетного копирования как для целочисленных, так и для массивов с плавающей запятой.

Улучшение размера массива

8 элементов: примерно на 50% быстрее

64 элемента: примерно на 42% быстрее

1024 элемента: примерно на 29% быстрее

Обновление ядра JavaScript

Базовый JavaScript-движок Bun был обновлен до последней версии JavaScriptCore от WebKit, что привело к повышению производительности и исправлению ошибок.

Улучшения производительности ARM64

На платформах Apple Silicon и других ARM64 составные логические выражения, такие как if (x === 0 && y === 1), теперь компилируются в более эффективные цепочки инструкций условного сравнения (ccmp/ccmn), что уменьшает количество ошибок предсказания ветвлений и размер кода.

Кроме того, константы с плавающей запятой теперь могут быть материализованы непосредственно в регистрах с использованием векторных инструкций ARM64, избегая ненужной загрузки памяти.

Windows ARM64

Мы добавили поддержку JIT-компилятора и интерпретатора для Windows ARM64 в JavaScriptCore. Это было основной причиной, препятствовавшей разблокировке поддержки Windows ARM64 в Bun. В настоящее время мы не поддерживаем Windows ARM64 в Bun, но это скоро появится.

Исправления ошибок

● Исправлено: Состояние гонки при завершении потока, которое могло вызывать проблемы при использовании Web Workers

● Исправлено: Крайние случаи обработки исключений, когда исключения завершения могли быть некорректно очищены во время операций с итераторами и обработки промисов

● Исправлено: Функции, загруженные из кэша байт-кода, теперь корректно учитывают пороговые значения JIT-компиляции вместо немедленной компиляции при первом выполнении

Теперь функция fetch сохраняет регистр заголовков при отправке HTTP-запросов

Согласно RFC 7230, HTTP-заголовки технически нечувствительны к регистру, но многие API ожидают определенного регистра. Ранее Bun переводил все заголовки в нижний регистр при отправке HTTP-запросов (например, authorization вместо Authorization), что могло нарушить совместимость с сервисами, требующими точных имен заголовков.

Теперь fetch и модуль node:https сохраняют исходный регистр заголовков точно так, как вы их определяете, что соответствует поведению Node.js.

-3

Bun.wrapAnsi() для переноса текста с поддержкой стандарта ANSI

В Bun теперь включена функция Bun.wrapAnsi(), нативная реализация популярного пакета npm wrap-ansi. Она переносит текст до заданной ширины столбца, сохраняя при этом коды ANSI, что делает её идеальной для инструментов командной строки, которым необходимо обрабатывать цветной или стилизованный вывод.

-4

Новое API

-5

Особенности

● Сохраняет управляющие коды ANSI (цвета/стили SGR)

● Поддерживает гиперссылки OSC 8

● Учитывает ширину отображения Unicode (символы полной ширины, эмодзи)

● Нормализует перевод строки с символа возврата каретки на новую строку

Производительность

Bun.wrapAnsi в 33–88 раз быстрее, чем пакет npm wrap-ansi:

Бенчмарк npm Bun Speedup

Короткий текст (45 символов) 25,81 мкс 685 нс 37x

Средний текст (810 символов) 568 мкс 11,22 мкс 50x

Длинный текст (8100 символов) 7,66 мс 112 мкс 68x

Жесткий перенос с цветом 8,82 мс 174 мкс 50x

Без обрезки длинного текста 8,32 мс 93,92 мкс 88x

Вывод профиля ЦП в формате Markdown

Встроенный в Bun профилировщик ЦП теперь поддерживает флаг --cpu-prof-md, который генерирует данные профилирования в формате Markdown, что упрощает обмен профилями на GitHub или их анализ с помощью LLM-ов.

-6

Вывод в формате Markdown включает:

● Сводную таблицу с указанием длительности, количества выборок и интервала

● Ранжирование наиболее часто используемых функций по проценту собственного времени

● Дерево вызовов, показывающее общее время, включая дочерние функции

● Подробную информацию о функциях с указанием взаимосвязи вызывающая/вызываемая функция

● Разбивку по файлам, показывающую время, затраченное на каждый исходный файл

Все существующие флаги работают с новым форматом:

1. --cpu-prof-name для пользовательских имен файлов

2. --cpu-prof-dir для пользовательских выходных каталогов

Профилирование кучи с помощью --heap-prof

Теперь Bun поддерживает профилирование кучи с помощью новых флагов командной строки, что упрощает диагностику утечек памяти и анализ использования памяти в ваших приложениях.

-7

Флаг --heap-prof генерирует файлы .heapsnapshot, которые можно загрузить непосредственно в инструменты разработчика Chrome для визуального анализа. Флаг --heap-prof-md генерирует отчет в формате Markdown, оптимизированный для анализа из командной строки:

-8

Формат Markdown включает в себя списки объектов, доступные для поиска, цепочки удержания объектов, показывающие, как они поддерживаются в рабочем состоянии, и быстрые команды grep для поиска проблем с памятью:

-9

Встроенная поддержка JSON5

В Bun теперь встроен парсер JSON5 с функциями Bun.JSON5.parse() и Bun.JSON5.stringify(), а также встроенный импорт файлов .json5.

JSON5 — это расширенная версия JSON, добавляющая удобные для разработчиков функции, такие как комментарии, завершающие запятые, ключи без кавычек, строки в одинарных кавычках и шестнадцатеричные числа. Он используется в таких крупных проектах, как Chromium, Next.js, Babel и WebStorm.

-10

JSON5 особенно полезен для конфигурационных файлов, где комментарии и завершающие запятые улучшают читаемость и удобство сопровождения.

Bun.JSONL для потоковой обработки JSONL-данных

В Bun теперь встроена поддержка парсинга JSONL (JSON с разделителями-новыми строками). Парсер реализован на C++ с использованием оптимизированного парсера JSON из JavaScriptCore, что обеспечивает быструю обработку как полных входных данных, так и потоковых сценариев.

Bun.JSON.parser()

Проводит анализ всей JSON-строки или массива Uint8Array и возвращает массив всех проанализированных значений:

-11

Bun.JSONL.parseChunk()

В сценариях потоковой передачи parseChunk анализирует как можно больше полных значений и возвращает, насколько далеко он продвинулся — это полезно при получении данных постепенно из сетевого потока:

-12

Используйте функцию `read` для отсечения обработанных входных данных и переноса оставшейся части:

-13

Функция S3 presign() теперь поддерживает параметры contentDisposition и type

Исправлена ​​ошибка, из-за которой метод S3File.presign() игнорировал параметры contentDisposition и type при генерации предварительно подписанных URL-адресов. Теперь эти параметры корректно включаются в качестве параметров запроса response-content-disposition и response-content-type.

Это особенно полезно, когда вы хотите, чтобы браузеры загружали файлы в виде вложений, а не отображали их непосредственно в коде:

-14

Команда `bun pm pack` теперь учитывает изменения в файле `package.json`, внесенные скриптами жизненного цикла

Команда `bun pm pack` теперь повторно считывает файл `package.json` после выполнения скриптов `prepack`, `prepare` и `prepublishOnly`, гарантируя, что все изменения, внесенные этими скриптами, будут включены в архив.

Это соответствует поведению npm и обеспечивает совместимость с такими инструментами, как `clean-package`, которые изменяют `package.json` в процессе упаковки.

-15

Ранее архив содержал оригинальный файл package.json. Теперь он корректно содержит измененную версию.

API профилировщика node:inspector

Bun теперь реализует API профилирования Node:Inspector для профилирования ЦП через протокол Chrome DevTools.

Поддерживаемые методы:

● Profiler.enable / Profiler.disable

● Profiler.start / Profiler.stop

● Profiler.setSamplingInterval

Поддерживаются как API обратных вызовов (node:inspector), так и API промисов (node:inspector/promises).

-16

Исправлено: вызов функции Bun.profile() из bun:jsc возвращал пустые трассировки при последующих вызовах.

Более быстрые функции Buffer.swap16() и Buffer.swap64()

Функция Buffer.swap16() теперь работает в 1,8 раза быстрее, а Buffer.swap64() — в 3,6 раза быстрее благодаря использованию оптимизированных встроенных функций ЦП вместо циклов побайтовой перестановки.

-17

Улучшение работы до и после

swap16 1,00 мкс 0,56 мкс 1,8x быстрее

swap64 2,02 мкс 0,56 мкс 3,6x быстрее

Теперь Bun соответствует или превосходит производительность Node.js для всех операций обмена буферами.

Исправлено: Bun.stringWidth - графема несовместима с поддержкой GB9c

В Bun реализована корректная реализация разделения графем, теперь она поддерживает правило GB9c Unicode для разделения индийских сочетаний букв. Это означает, что сочетания деванагари и других индийских письменностей теперь правильно образуют единые кластеры графем.

Ранее последовательности индийских сочетаний (согласная + вирама + согласная) ошибочно разделялись на несколько кластеров графем. Теперь Bun.stringWidth() и другие строковые операции корректно обрабатывают эти письменности:

-18

Это обновление также уменьшает размер внутренней таблицы с ~70 КБ до ~51 КБ, а также добавляет более полную поддержку Unicode.

Совместимость компонентов кэширования Next.js 16

Добавлено свойство _idleStart к объектам Timeout, возвращаемым методами setTimeout() и setInterval(), что соответствует поведению Node.js. Это свойство возвращает монотонную метку времени (в миллисекундах), указывающую на момент создания или последнего перепланирования таймера.

Это исправляет совместимость с функцией Cache Components в Next.js 16, которая использует это внутреннее свойство для координации таймеров.

-19

Опция replMode для Bun.Transpiler

В Bun.Transpiler добавлена ​​новая опция replMode, позволяющая преобразовывать код для интерактивной REPL-оценки. Это дает возможность создавать REPL, совместимый с Node.js, используя Bun.Transpiler с vm.runInContext для постоянной области видимости переменных.

Основные особенности:

Поднятие переменных: объявления var/let/const поднимаются за пределы обертки IIFE для сохранения их работоспособности между строками REPL

Преобразование const → let: позволяет повторно объявлять переменные в последующих входных данных REPL

Захват результата выражения: оборачивает последнее выражение для удобного извлечения результата

Обнаружение литералов объектов: автоматически определяет {a: 1} как литерал объекта, а не как оператор блока

Поддержка await верхнего уровня: автоматически использует асинхронные обертки IIFE при необходимости

-20

Увеличено максимальное количество HTTP-заголовков

Максимальное количество HTTP-заголовков, разрешенных в запросах и ответах, увеличено вдвое — со 100 до 200. Это улучшает совместимость с сервисами, отправляющими много заголовков, такими как API с обширными метаданными или прокси-серверы, добавляющие несколько заголовков пересылки.

Поддержка учетных данных URL-адресов WebSocket

Теперь соединения WebSocket корректно передают учетные данные, встроенные в URL-адреса, в виде заголовков Basic Authorization, что соответствует поведению Node.js.

При подключении к URL-адресу WebSocket со встроенными учетными данными, например, ws://user:pass@host, Bun теперь автоматически извлекает учетные данные и отправляет их в виде корректно закодированного заголовка Authorization: Basic во время рукопожатия обновления WebSocket.

-21

Это исправляет проблемы совместимости с такими сервисами, как Puppeteer, подключающимися к удаленным экземплярам браузера (например, к браузеру для сбора данных от Bright Data), которые требуют аутентификации на основе URL-адреса.

Более быстрые встроенные функции JavaScript

В версии Bun 1.3.7 обновлен WebKit, что значительно повысило производительность нескольких встроенных методов JavaScript:

Методы работы со строками:

String.prototype.isWellFormed и String.prototype.toWellFormed стали в 5,2-5,4 раза быстрее благодаря использованию simdutf

Методы работы с регулярными выражениями:

RegExp.prototype[Symbol.matchAll] и RegExp.prototype[Symbol.replace] переписаны на C++

Опция кодирования содержимого S3

Теперь S3-клиент Bun поддерживает установку заголовка Content-Encoding при загрузке объектов с помощью методов .write() и .writer().

Это полезно при загрузке предварительно сжатого контента в S3, позволяя указывать кодировки, такие как gzip, br (Brotli) или deflate:

-22

Теперь bun:ffi учитывает переменные среды C_INCLUDE_PATH и LIBRARY_PATH

Встроенный компилятор C в Bun (bun:ffi) теперь учитывает стандартные переменные среды C_INCLUDE_PATH и LIBRARY_PATH. Это исправляет ошибки компиляции в NixOS и других системах, которые не используют стандартные пути FHS, такие как /usr/include или /usr/lib.

-23

Обновления зависимостей

Bun теперь использует Mimalloc v3 для управления кучей памяти, управляемой нативно. Это снижает потребление памяти в многопоточных сценариях. Пожалуйста, сообщите нам, если вы столкнетесь с увеличением потребления памяти.

LOLHTML обновлен до версии 2.7.1.

TinyCC обновлен до последней версии, и мы реализовали поддержку Windows ARM64.

BoringSSL обновлен.

Исправлены ошибки

Исправления ошибок в сборщике

  • Исправлено: логические свойства CSS border-radius (border-start-start-radius, border-start-end-radius, border-end-end-radius, border-end-start-radius) незаметно удалялись сборщиком CSS.
  • Исправлено: Bundler выдавал некорректный JavaScript при минификации файлов с импортами по умолчанию и именованными импортами из модуля "bun" (например, import bun, { embeddedFiles } from "bun") из-за отсутствия точек с запятой между операторами.
  • Исправлено: паника в сборщике при использовании разделения кода в Windows.
  • Исправлено: оптимизация перенаправления module.exports = require() в Bundler отключалась, когда в модулях-обертках, таких как index.js Express, присутствовали допустимые комментарии (/*! ... */), что приводило к появлению ненужных функций-оберток в выходных данных.
  • Исправлено: сбой в сборке bun при использовании макросов.
  • Исправлено: Bun.build зависал на неопределенное время при вызове из макроса во время сборки — теперь выдает четкую ошибку, объясняющую взаимоблокировку и предлагающую Bun.spawnSync в качестве обходного пути.
  • Исправлено: reactFastRefresh в bun.build теперь работает с целями, не являющимися браузерами.
  • Исправлено: Bundler выдавал дублирующиеся операторы export, когда одна точка входа повторно экспортировала из другой точки входа при включенном разделении кода.
  • Исправлено: Bundler выдавал недопустимые пути импорта (отсутствовал префикс ./) при импорте файла из одной и той же директории в сборках с разделением кода.
  • Исправлено: именованные функциональные выражения перекрывали внешние символы.

bun build --compile

  • Исправлено: Компилируемые бинарные файлы с параметром autoloadBunfig: false некорректно загружали bunfig.toml, когда также был предоставлен execArgv.
  • Исправлено: Повреждение экспорта нативных модулей при использовании bun build --compile с несколькими модулями NAPI в Linux, когда второй модуль некорректно получал экспорт первого модуля.
  • Исправлено: Автономные исполняемые файлы, скомпилированные с --compile-exec-argv, некорректно перехватывали флаги --version, -v, --help и -h до того, как пользовательский код мог их обработать, что приводило к сбоям в работе CLI-приложений, использующих библиотеки, такие как Commander.js, которые определяют свои собственные команды версии и справки.
  • Исправлено: Лениво загружаемые фрагменты из динамических импортов не отображались в frontend.files при использовании --splitting с --compile в полнофункциональных сборках.
  • Исправлено: Переменная среды BUN_OPTIONS не применялась в качестве параметров времени выполнения для автономных исполняемых файлов, созданных с помощью bun build --compile, что приводило к некорректному отображению таких параметров, как --bun, в process.argv вместо их использования. Исправлено: Некорректные вычисления смещения в исполняемых файлах в одном файле на платформах macOS, отличных от ARM64, когда подписание кода не было включено.
  • Исправлена ​​ошибка, приводившая к сбою при запуске автономных исполняемых файлов с кэшем байт-кода в Windows, вызванная некорректным выравниванием байт-кода в секциях PE.

bun install

  • Исправлено: команда `bun update --interactive` не выбирала пакеты при нажатии клавиши 'l' для переключения между целевой и последней версиями, из-за чего индикатор подчеркивания исчезал, а пакеты исключались при подтверждении.
  • Исправлено: команда `bun install --yarn` генерировала некорректные файлы yarn.lock при использовании зависимостей workspace:* в монорепозиториях.
  • Исправлено: команда `bun install --frozen-lockfile` некорректно использовала реестр npm по умолчанию вместо реестров, специфичных для области видимости, настроенных в `bunfig.toml`, когда файл блокировки содержал пустой URL-адрес реестра для пакетов с областью видимости (например, `@orgname/package`).
  • Исправлено: команда `bun install` теперь отображает имя зависимости в сообщениях об ошибках, когда разрешение пути к файлу завершается неудачей из-за устаревшего файла блокировки, вместо вводящей в заблуждение ошибки «Bun не смог найти файл package.json для установки».
  • Исправлено: команда `bun install` теперь отображает имя зависимости в сообщениях об ошибках, когда разрешение пути к файлу завершается неудачей из-за устаревшего файла блокировки, вместо вводящей в заблуждение ошибки «Bun не смог найти файл package.json для установки». Исправлено: ошибка в bun add приводила к сбою с сообщением "panic: Assertion failure: Expected metadata to be set", когда HTTP-запросы завершались с ошибкой до получения заголовков ответа (например, отказ в сетевом соединении, блокировка запросов брандмауэром или таймаут).

bun test

  • Исправлено: команда `bun test --inspect` теперь корректно отправляет события `TestReporter.found`, `TestReporter.start` и `TestReporter.end` клиентам отладчика, подключающимся после начала обнаружения тестов, что позволяет интегрировать IDE и инструменты отладки получать телеметрию выполнения тестов в реальном времени без необходимости использования `--inspect-wait`.
  • Исправлено: `assert.partialDeepStrictEqual` некорректно требовал точного равенства для объектов Map вместо проверки того, является ли ожидаемый Map подмножеством фактического Map.
  • Исправлено: `jest.useRealTimers()` некорректно удалял свойство `setTimeout.clock`, что нарушало работу библиотеки тестирования React и других библиотек, которые обнаруживают поддельные таймеры с помощью проверок `hasOwnProperty`.

Bun.serve()

  • Исправлено: Экспорт экземпляра сервера из Bun.serve() в качестве экспорта по умолчанию больше не вызывает ошибку "Максимальный стек вызовов". Ранее обертка точки входа Bun обнаруживала метод fetch на работающем сервере и некорректно пыталась снова вызвать Bun.serve() для него.
  • Исправлено: Скрипты, экспортирующие globalThis (например, module.exports = globalThis или export default globalThis), больше не вызывают некорректное автоматическое определение сервера Bun и запуск сервера разработки на порту 3000.
  • Исправлено: Флаг --no-clear-screen и переменная среды BUN_CONFIG_NO_CLEAR_TERMINAL_ON_RELOAD не учитывались во время перезагрузки HMR при использовании Bun.serve с hmr: true.

Bun Shell

  • Исправлено: команда `ls -l` в оболочке Bun теперь корректно отображает длинный список файлов с указанием типа файла, прав доступа, количества жестких ссылок, UID, GID, размера, времени изменения и имени файла, вместо вывода, аналогичного выводу команды `ls` без флагов.
  • Исправлено: сбой в интерпретаторе оболочки при возникновении ошибки во время инициализации в определенных случаях.
  • Исправлено: использование `$....cwd(".")", `.cwd("")` и `.cwd("./")` в оболочке Bun приводило к ошибкам ENOENT при использовании путей, заканчивающихся на "undefined", в циклах.

Bun APIs

Исправлено: Добавлены отсутствующие проверки на переполнение стека в Bun.JSONC.parse и Bun.TOML.parse.

node:http2

  • Исправлено: HTTP/2-потоки отправляли дополнительный пустой кадр DATA при использовании req.write(data) с последующим req.end(), что приводило к отклонению соединений AWS ALB и другими строгими HTTP/2-серверами с ошибкой NGHTTP2_FRAME_SIZE_ERROR
  • Исправлено: начальный размер окна потока теперь использует DEFAULT_WINDOW_SIZE до получения SETTINGS_ACK в соответствии с RFC 7540, раздел 6.5.1
  • Исправлено: HTTP/2-потоки завершались с ошибкой NGHTTP2_PROTOCOL_ERROR при подключении к Fauna
  • Исправлено: запросы gRPC завершались с ошибкой NGHTTP2_FRAME_SIZE_ERROR, когда серверы объявляли нестандартные значения maxFrameSize (регрессия с версии 1.2.16)
  • Исправлено: проверка настроек с использованием некорректного преобразования целых чисел, которое обрезало большие значения
  • Улучшено: корректно корректируются существующие окна потока при установке INITIAL_WINDOW_SIZE Изменения
  • Улучшено: реализована проверка maxHeaderListSize в соответствии с разделом 6.5.2 RFC 7540
  • Улучшено: отслеживается совокупный размер списка заголовков с использованием накладных расходов HPACK
  • Улучшено: добавлена ​​проверка для параметра customSettings (до 10 пользовательских настроек, соответствующих Node.js)
  • Улучшено: проверяется идентификатор и значения настроек в соответствии со спецификациями RFC 7540

Fetch API

  • Исправлено: Гипотетический сбой при использовании HTTP-прокси с перенаправлениями, если сокет закрывается во время обработки перенаправления.
  • Исправлено: fetch() mTLS некорректно использовал первый клиентский сертификат для последующих запросов keepalive к тому же хосту, игнорируя параметры TLS для каждого запроса.
  • Исправлено: Request.prototype.text() некорректно выбрасывал ошибку "TypeError: undefined is not a function" в некоторых случаях под нагрузкой.
  • Исправлено: Конструктор Request игнорировал параметры кэширования и режима.
  • Исправлено: Переменная среды NO_PROXY не учитывала номера портов (например, NO_PROXY=localhost:8080 некорректно обходил прокси для всех запросов к localhost независимо от порта).

node:fs

  • Исправлено: realpathSync блокировался на неопределенное время при вызове для FIFO (именованного канала) в системах POSIX
  • Исправлено: Bun.Glob и fs.readdirSync с параметром recursive: true не находили файлы на файловых системах с монтированием bind, FUSE, NFS и некоторых конфигурациях ext4 в средах Docker
  • Исправлено: fs.Dirent.isFIFO() некорректно возвращал true для файлов на sshfs, NFS и других удаленных файловых системах, которые не заполняют d_type
  • Исправлено: fs.watch для каталогов не генерировал события изменения для модификаций файлов в Linux. Ранее, при наблюдении за каталогом, файлы, созданные после установления наблюдения, генерировали событие переименования только при создании, но последующие изменения не генерировали события изменения.

node:https & TLS

  • Исправлено: параметры TLS (ca, cert, key, passphrase, ciphers, servername, secureOptions, rejectUnauthorized) из agent.options и agent.connectOpts не учитывались в модуле https, что улучшило совместимость с такими библиотеками, как https-proxy-agent.
  • Исправлено: состояние гонки, при котором request.socket._secureEstablished мог возвращать false в обработчиках HTTPS-запросов даже после завершения рукопожатия TLS.
  • Исправлено: параметр rejectUnauthorized при пересогласовании TLS v1.2 некорректно игнорировался в setVerifyMode сокета TLS, что могло привести к неожиданному поведению проверки сертификата во время пересогласования TLS.

node:http

  • Теперь поддерживаются тела запросов в GET-запросах.
  • Исправлено: многокомпонентные загрузки с form-data + node-fetch@2 + fs.createReadStream() приводили к усечению данных.

WebSocket (ws)

  • Исправлено: параметр handleProtocols в ws WebSocketServer некорректно устанавливал выбранный протокол в ответах на обновление WebSocket.
  • Исправлено: ws.once() работал только при первом вызове для каждого типа событий в пакете ws.

Node-API (NAPI)

Исправлено: ошибка в Node-API, приводившая к повреждению данных при использовании нативных модулей, таких как impit. Первая проблема возникала, когда строковые имена свойств освобождались вызывающей стороной, но Bun сохранял висячие указатели в таблице строк атомов. Вторая проблема возникала, когда извлечение .buffer из внешнего буфера преждевременно освобождало данные из исходного буфера после сборки мусора.

Streams

Исправлено: метод ReadableStreamDefaultController.desiredSize выдавал ошибку TypeError: null is not an object вместо возврата null при обращении к нему после отсоединения потока во время очистки (например, при передаче тела ReadableStream в fetch, когда нижестоящий поток неожиданно закрывается).

bun:sql (MySQL)

  • Исправлено: Транзакции MySQL зависали при выполнении последовательных транзакций в цикле, когда внутри функции обратного вызова транзакции ожидалась вставка, а запрос SELECT возвращался в виде массива без ожидания.
  • Исправлено: Столбцы MySQL VARCHAR/CHAR/TEXT с двоичными сопоставлениями (например, utf8mb4_bin) некорректно возвращали Buffer вместо строки.

Bun.Terminal

Исправлено: обратные вызовы Bun.Terminal (data, exit, drain) не вызывались, когда терминал создавался внутри AsyncLocalStorage.run().

Управление памятью

  • Исправлено: Утечка памяти в парсере YAML
  • Исправлено: Утечка памяти при повторном использовании сокетов для переподключения (распространенная проблема при использовании, аналогичном драйверам MongoDB)

CLI & Tooling

  • Исправлено: автодополнение команд bun приводило к ошибке BrokenPipe при использовании конвейера для команд, которые преждевременно закрывают стандартный вывод (например, bun completions | true).
  • Исправлено: автодополнение в оболочке Fish не работало для команды bun update и ее флагов (например, --global, --dry-run, --force).
  • Исправлено: команда bun init --minimal некорректно создавала файлы правил курсора и CLAUDE.md, тогда как флаг --minimal должен создавать только package.json и tsconfig.json.
  • Исправлено: команда bun <file> для неподдерживаемых типов файлов (.css, .html, .yaml и т. д.) теперь показывает «Невозможно запустить» с указанием типа файла вместо вводящей в заблуждение ошибки «Файл не найден».
  • Исправлено: команда bun npm package теперь показывает полезное сообщение об ошибке, если скрипт postinstall не был запущен, вместо того, чтобы молча завершать работу с кодом 0. Это помогает диагностировать проблемы при установке с --ignore-scripts или использовании pnpm (который пропускает скрипты postinstall). по умолчанию).
  • Исправлено: переменная среды BUN_OPTIONS некорректно интерпретировала флаги без знака равенства (флаги без знака =), когда за ними следовали другие флаги, из-за чего параметры, такие как --cpu-prof, игнорировались при указании в виде BUN_OPTIONS="--cpu-prof --cpu-prof-dir=profiles"

Определения TypeScript

  • Исправлено: Переименован тип Bun.Build.Target в Bun.Build.CompileTarget в определениях TypeScript, чтобы избежать путаницы с существующей опцией target в Bun.build().
  • Исправлено: Ошибки TypeScript в файле build.ts шаблона react-tailwind при использовании строгой проверки типов.

Совместимость с Node.js

  • Исправлено: Корректная обработка ошибок, когда строки превышают максимальный лимит длины около 4 ГБ, теперь корректно генерируется ERR_STRING_TOO_LONG, что исправляет сбой SIGILL, затрагивающий некоторых пользователей Claude Code.
  • Исправлено: process.stdout.write() не генерирует ошибки EPIPE при повреждении каналов, из-за чего процессы завершаются с кодом 0 вместо 1 при уничтожении stdout.
  • Исправлено: TypeError: this._refreshLine is not a function при использовании автодополнения с node:readline/promises.
  • Улучшено: node:util теперь использует Bun.stringWidth напрямую, что обеспечивает улучшенную производительность.

Windows

Исправлено: возникала ошибка при чтении или записи больших файлов (>4 ГБ) в Windows из-за переполнения целочисленных значений в параметрах размера буфера libuv.

Система сборки

Исправлено: Отладочные сборки NixOS завершались с ошибкой "_FORTIFY_SOURCE требует компиляции с ошибкой оптимизации".