Spec-Zone.ru › nginx

Изменения

Изменения в njs 0.9.9

Дата выпуска: 19 мая 2026

Модули nginx:

  • Безопасность: в рабочем процессе могло произойти переполнение буфера в куче, когда значение директивы js_fetch_proxy содержит переменные nginx, полученные из запроса клиента ( $http_*, $arg_*, $cookie_* и т. д.), а JS-обработчик location вызывает ngx.fetch() (CVE-2026-8711). Проблема появилась в dea83189 (0.9.4).

  • Добавление: добавлена директива js_access.

  • Добавление: добавлены асинхронные методы r.readRequestText(), r.readRequestArrayBuffer() и r.readRequestJSON(), считывающие тело запроса и доступные в директивах js_access и js_content.

  • Добавление: добавлен асинхронный метод r.readRequestForm(), разбирающий тело запроса, отправленное из HTML-формы (application/x-www-form-urlencoded и multipart/form-data), и возвращающий структурированный объект доступа. Метод доступен в директивах js_access и js_content.

  • Добавление: добавлен метод jsVarNames(). Метод возвращает имена переменных, объявленных с помощью js_var.

Ядро:

  • Исправление: исправлен порядок вычисления аргументов вызова с побочными эффектами. Ранее более ранний аргумент мог наблюдать мутацию более позднего аргумента, например f(a, a = 2) передавал 2 в качестве обоих аргументов. Проблема появилась в fd5e523f (0.9.7).

Изменения в njs 0.9.8

Дата выпуска: 23 апреля 2026

Модули nginx:

  • Исправление: исправлена загрузка встроенного модуля crypto. Проблема появилась в 3185ce81 (0.9.7).

Изменения в njs 0.9.7

Дата выпуска: 21 апреля 2026

Модули nginx:

  • Добавление: улучшена стратегия вытеснения элементов разделяемого словаря.

  • Добавление: добавлен метод ttl() для разделяемых словарей.

  • Исправление: удалено ложное уведомление в логе js vm init, возникавшее при парсинге конфигурации.

  • Исправление: удалено устаревание элементов разделяемого словаря из путей выполнения с блокировкой на чтение.

  • Исправление: исправлено двойное освобождение памяти при обновлении разделяемого словаря с вытеснением.

  • Исправление: исправлен сброс TTL отдельной записи при вызовах incr().

Ядро:

  • Добавление: добавлена поддержка Ed25519 и X25519 для WebCrypto.

  • Добавление: добавлена поддержка wrapKey() и unwrapKey() для WebCrypto.

  • Добавление: добавлен crypto.randomUUID().

  • Добавление: разрешены выражения await в тегированных шаблонах и в качестве аргументов вызова.

  • Улучшение: осуществлен переход на OpenSSL EVP для хеширования во встроенном модуле crypto.

  • Исправление: исправлено вычисление аргументов вызова.

Изменения в njs 0.9.6

Дата выпуска: 3 марта 2026

Модули nginx:

  • Исправление: исправлено усечение поля expire в файлах состояния разделяемого словаря. Временные метки в миллисекундах автоматически усекались до 10 цифр, из-за чего восстановленные записи при перезапуске считались просроченными.

  • Исправление: подавлено сообщение slab log_nomem для зон разделяемого словаря с включенным evict. При включенном evict ошибки выделения памяти ожидаемы и обрабатываются путем вытеснения старых записей.

  • Исправление: исправлен стек вызовов для исключений ngx.fetch() для движка qjs.

Ядро:

  • Добавление: добавлена поддержка опциональных цепочек.

  • Добавление: добавлен оператор присваивания с null-слиянием (??=).

  • Добавление: добавлены операторы логического присваивания (||= и &&=).

  • Улучшение: вывод SyntaxError приведен в соответствие с другими JS-движками. Ранее имя файла являлось частью сообщения об ошибке. Теперь оно выводится как свойство «stack».

  • Улучшение: улучшены трассировки Error.stack. Стеки вызовов теперь присоединяются в конструкторах ошибок. Производительность Error.stack увеличена примерно в 100 раз.

  • Исправление: исправлено повреждение карты смещений строк в хеш-таблице значений областей видимости. Проблема приводила к аварийному завершению работы (SEGV/SIGBUS) для многобайтовых строковых констант UTF-8 длиной более 32 символов при обращении к символу по индексу >= 32 (например, через .replace() или квадратные скобки). Проблема появилась в e7caa46d (0.9.5).

  • Исправление: исправлено переполнение буфера в куче в хеш-таблице атомов, вызывавшееся Symbol().

  • Исправление: исправлен сбой в WebCrypto importKey() при несоответствии типа ключа JWK.

  • Исправление: исправлено определение интерактивного режима при передаче stdin через конвейер.

  • Исправление: исправлена сборка на MacOS.

  • Исправление: исправлена совместимость макроса PTR с более новыми версиями библиотеки BFD.

  • Исправление: auto/cc: используется переносимый command -v вместо which. Спасибо Зурабу Квачадзе.

Изменения в njs 0.9.5

Дата выпуска: 13 января 2026

Модули nginx:

  • Добавление: добавлена поддержка нативных модулей для движка qjs для http и stream.

  • Исправление: исправлена работа js_body_filter с несколькими фрагментами данных для движка qjs.

  • Исправление: исправлено наследование buffer_type в блоках if для js_body_filter. Ранее при использовании js_body_filter внутри блока if параметр data получал тип Buffer вместо ожидаемого типа String.

  • Исправление: исправлена работа js_body_filter, когда данные находятся не в памяти. Ранее, если данные бэкенда доставлялись из кеша nginx, js_body_filter не мог корректно их обработать.

  • Исправление: улучшена обработка ошибок в r.subrequest(). Исправлена проблема потери события записи, когда njs-обработчик, выполняющий r.subrequest(), вызывается из lua-обработчика в качестве подзапроса.

Ядро:

  • Исправление: исправлен объект XMLAttr. Указатель на xmlAttr мог стать недействительным при модификации родительского XMLNode.

  • Исправление: исправлено обновление XMLNode.

  • Исправление: исправлен ArrayBuffer с отсоединенными буферами.

  • Исправление: добавлены отсутствующие проверки отсоединенных массивов.

  • Исправление: исправлена функция fs.mkdir() и связанные функции.

  • Исправление: исправлено восстановление пути в fs.mkdir() и связанных функциях при ошибке.

  • Исправление: исправлена пропущенная проверка выделения памяти в коде промисов.

Изменения в njs 0.9.4

Дата выпуска: 28 октября 2025

Модули nginx:

  • Добавление: добавлена поддержка прямого HTTP-проксирования для API ngx.fetch().

Ядро:

  • Исправление: исправлен r.subrequest() к location с JS-обработчиком для QuickJS. Ошибка стала проявляться после bellard/quickjs@42eb2795.

Изменения в njs 0.9.3

Дата выпуска: 07 октября 2025

Модули nginx:

  • Исправление: исправлена ошибка heap-use-after-free при загрузке модуля.

  • Исправление: исправлена ошибка heap-use-after-free в обработчике js_set, используемом в фазе логирования. Проблема появилась в 04f6dfb (0.9.2).

Изменения в njs 0.9.2

Дата выпуска: 23 сентября 2025

Модули nginx:

  • Добавление: добавлена поддержка HTTP keepalive для API ngx.fetch().

  • Улучшение: добавлена проверка на этапе конфигурации, когда директива js_import не указана для http или stream.

  • Исправление: исправлено объединение директив js_path для http и stream.

  • Исправление: исправлена сборка, когда модули ngx_http_ssl_module и ngx_stream_ssl_module недоступны.

Ядро:

  • Изменение: размер стека по умолчанию для виртуальной машины njs увеличен до 160k.

  • Добавление: добавлен API njs.on('exit') для движка qjs.

  • Улучшение: оптимизировано потребление памяти при потоковой передаче в qjs.

  • Исправление: исправлена сборка движка qjs с помощью clang 19.

  • Исправление: исправлена сборка с помощью GCC 15 и уровнем оптимизации O3.

Изменения в njs 0.9.1

Дата выпуска: 10 июля 2025

Модули nginx:

  • Добавление: добавлен Fetch API для движка QuickJS.

  • Добавление: добавлен файл состояния для разделяемого словаря.

  • Исправление: исправлена обработка заголовка Content-Length при передаче тела запроса в Fetch API.

  • Исправление: исправлена работа движка qjs после bellard/quickjs@458c34d2.

  • Исправление: исправлено разыменование NULL-указателя при обработке заголовков If-Match и If-Unmodified-Since.

Ядро:

  • Добавление: добавлена поддержка ECDH для WebCrypto.

  • Улучшение: снижено потребление памяти хеш-таблицей объектов. Новая хеш-таблица использует на 42% меньше памяти на элемент.

  • Улучшение: снижено потребление памяти при конкатенации чисел и строк.

  • Улучшение: снижено потребление памяти String.prototype.concat() со скалярными значениями.

  • Исправление: исправлена ошибка сегментации в njs_property_query(). Проблема появилась в b28e50b1 (0.9.0).

  • Исправление: исправлена инъекция шаблона в конструкторе Function.

  • Исправление: исправлена компиляция GCC с уровнем оптимизации O3.

  • Исправление: исправлено предупреждение constant is too large для 'long' на MIPS -mabi=n32.

  • Исправление: исправлена компиляция с GCC 4.1.

  • Исправление: исправлен %TypedArray%.from(), когда буфер отсоединен отображателем.

  • Исправление: исправлен %TypedArray%.prototype.slice() с перекрывающимися буферами.

  • Исправление: исправлена обработка отсоединенных буферов для типизированных массивов.

  • Исправление: исправлено сохранение фрейма для асинхронных функций с замыканиями.

  • Исправление: исправлена компиляция регулярных выражений с шаблонами, содержащими экранированные символы «[».

Изменения в njs 0.9.0

Дата выпуска: 06 мая 2025

Ядро:

  • Добавление: переработана обработка встроенных строк, символов и малых целых чисел. Увеличение производительности (бенчмарк arewefastyet/benchmarks/v8-v7):

    • Richards: +57% (631 → 989)

    • Crypto: +7% (1445 → 1551)

    • RayTrace: +37% (562 → 772)

    • NavierStokes: +20% (2062 → 2465)

    • Общий результат: +29% (1014 → 1307)

  • Исправление: исправлена обработка значений undefined захваченной группы в RegExp.prototype[Symbol.split]().

  • Исправление: исправлена ошибка сборки GCC 15 с -Wunterminated-string-initialization.

Изменения в njs 0.8.10

Дата выпуска: 08 апреля 2025

Модули nginx:

  • Добавление: чтение r.requestText или r.requestBuffer из временного файла. Ранее при обращении к r.requestText или r.requestBuffer возникало исключение, если размер тела запроса клиента превышал client_body_buffer_size.

  • Улучшение: улучшены сообщения о необработанных отклонениях промисов.

  • Исправление: повреждение имён при обработке переменных и заголовков.

  • Исправление: метод incr() разделяемого словаря с пустым аргументом init для движка QuickJS.

  • Исправление: приём заголовков ответа с символами подчёркивания в Fetch API.

Ядро:

  • Изменение: исправлен serializeToString(). Ранее serializeToString() был exclusiveC14n(), который возвращал строку вместо Buffer. Согласно опубликованной документации, это должен быть c14n().

  • Добавление: API WebCrypto для движка QuickJS.

  • Добавление: TextEncoder и TextDecoder для движка QuickJS.

  • Добавление: модуль querystring для движка QuickJS.

  • Добавление: модуль crypto для движка QuickJS.

  • Добавление: модуль xml для движка QuickJS.

  • Добавление: поддержка библиотеки QuickJS-NG.

  • Исправление: Buffer.concat() с одним аргументом в QuickJS.

  • Исправление: добавлена пропущенная синтаксическая ошибка для await в шаблонном литерале.

  • Исправление: форматирование строк, не оканчивающихся на ноль (non-NULL terminated), в исключениях для движка QuickJS.

  • Исправление: совместимость с недавними изменениями в QuickJS и QuickJS-NG.

Изменения в njs 0.8.9

Дата выпуска: 14 января 2025

Модули nginx:

  • Исправление: устранено создание лишней виртуальной машины (VM) для каждого server. Ранее, если директива js_import объявлялась в блоках http или stream, для каждого блока server создавался отдельный экземпляр VM. В этом не было необходимости, и это приводило к повышенному расходу памяти в конфигурациях с большим количеством блоков server. Проблема появилась в 0.8.6 и была частично исправлена только для блоков location в 0.8.7.

Ядро:

  • Добавление: реализован модуль fs для движка QuickJS.

Изменения в njs 0.8.8

Дата выпуска: 10 декабря 2024

Модули nginx:

  • Добавление: реализован разделяемый словарь для движка QuickJS.

  • Улучшение: произведён рефакторинг js_preload_object.

  • Исправление: вывод с ограничением скорости (limit rated output).

  • Исправление: оптимизировано использование SSL-контекстов для директивы js_fetch_trusted_certificate.

Ядро:

  • Добавление: реализован объект process для движка QuickJS.

  • Добавление: реализован метод process.kill().

  • Исправление: тесты XML с libxml2 2.13 и выше.

  • Исправление: разрешение промисов при наследовании Promise.

  • Исправление: абсолютная область видимости в клонированных виртуальных машинах.

Изменения в njs 0.8.7

Дата выпуска: 22 октября 2024

Модули nginx:

  • Исправление: устранено лишнее создание виртуальных машин. Ранее njs потреблял память пропорционально количеству блоков location в nginx. Проблема появилась в 0.8.6.

  • Улучшение: добавлена строгая проверка синтаксиса для js_body_filter.

  • Улучшение: улучшены сообщения об ошибках при сбое загрузки модулей.

Ядро:

  • Добавление: реализован fs.readlinkSync().

  • Улучшение: реализована ленивая символизация стека.

  • Исправление: переполнение буфера в куче (heap-buffer-overflow) в Buffer.prototype.indexOf(). Проблема появилась в 0.8.6.

  • Исправление: Buffer.prototype.lastIndexOf() при указании `from`.

Изменения в njs 0.8.6

Дата выпуска: 2 октября 2024

Модули nginx:

  • Добавление: представлен движок QuickJS.

  • Добавление: необязательный флаг nocache для директивы js_set в http и stream. Спасибо Thomas P.

  • Добавление: переменные групп захвата (capture group variables) в модуле HTTP. Спасибо Thomas P.

Ядро:

  • Добавление: модуль Buffer для движка QuickJS.

  • Исправление: обработка пустого помеченного оператора в функции.

  • Исправление: обработка конструктора Function при вызове без аргументов.

  • Исправление: Buffer.prototype.writeInt8() и связанные методы.

  • Исправление: Buffer.prototype.writeFloat() и связанные методы.

  • Исправление: Buffer.prototype.lastIndexOf().

  • Исправление: Buffer.prototype.write().

  • Исправление: предупреждения maybe-uninitialized при создании ошибок.

  • Исправление: инициализация ctx.codepoint при декодировании UTF-8.

  • Исправление: инициализация length в Array.prototype.pop().

  • Исправление: обработка аргумента encode в fs.readdir() и fs.realpath().

Изменения в njs 0.8.5

Дата выпуска: 25 июня 2024

Модули nginx:

  • Изменение: байты, недопустимые в кодировке UTF-8, заменяются на символ замены в:

    • r.variables.var, r.requestText, r.responseText, s.variables.var,

    • аргументе data обратного вызова s.on() с типами событий upload или download,

    • аргументе data директивы js_body_filter.

    При работе с бинарными данными используйте:

    • r.rawVariables.var, r.requestBuffer, r.responseBuffer, s.rawVariables.var,

    • тип события upstream или downstream для s.on(),

    • buffer_type=buffer для js_body_filter.

  • Добавление: аргумент timeout для методов add(), set() и incr() разделяемого словаря.

  • Исправление: проверка повторяющихся переменных js_set.

  • Исправление: заголовок запроса Host при нестандартном порте.

  • Исправление: обработка тела запроса нулевой длины в ngx.fetch() и r.subrequest().

  • Исправление: переполнение буфера в куче (heap-buffer-overflow) в Headers.get().

  • Исправление: обработка ошибок в r.subrequest().

Ядро:

  • Добавление: добавлен модуль zlib для движка QuickJS.

  • Исправление: zlib.inflate().

  • Исправление: String.prototype.replaceAll() с аргументом нулевой длины.

  • Исправление: обработка retval после исключения в Array.prototype.toSpliced(), Array.prototype.toReversed(), Array.prototype.toSorted().

  • Исправление: RegExp.prototype[@@replace]() со строками замены, содержащими $', $` и строки с символами Юникода.

  • Исправление: чтение лишнего байта (one-byte overread) в decodeURI() и decodeURIComponent().

  • Исправление: отслеживание области видимости аргументов.

  • Исправление: целочисленное переполнение в Date.parse().

Изменения в njs 0.8.4

Дата выпуска: 16 апреля 2024

Модули nginx:

  • Добавление: возможность установки заголовка Server для исходящего заголовка.

  • Улучшение: валидация аргументов URI и args в r.subrequest().

  • Улучшение: проверка повторяющихся переменных js_set.

  • Исправление: метод clear() разделяемого словаря без таймаута, появившийся в 0.8.3.

  • Исправление: метод r.send() разделяемого словаря без таймаута с аргументом Buffer.

Ядро:

  • Добавление: поддержка движка QuickJS в CLI.

  • Исправление: atob() со строками base64 без заполнения.

Изменения в njs 0.8.3

Дата выпуска: 7 февраля 2024

Модули nginx:

  • Исправление: Headers.set().

  • Исправление: js_set со значениями Buffer.

  • Исправление: метод clear() разделяемого словаря, когда таймаут не указан.

  • Исправление: статистика stub_status при включённой директиве js_periodic.

Ядро:

  • Исправление: сборка с libxml2 2.12 и выше.

  • Исправление: конструктор Date при переполнениях и со значениями NaN.

  • Исправление: потеря точности (underflow) в querystring.parse().

  • Исправление: возможное чтение за пределами буфера в String.prototype.match().

  • Исправление: парсинг циклов for-in.

  • Исправление: парсинг шестнадцатеричных, восьмеричных и двоичных литералов без цифр.

Изменения в njs 0.8.2

Дата выпуска: 24 октября 2023

Модули nginx:

  • Добавление: представлен объект console. Были добавлены следующие методы: error(), info(), log(), time(), timeEnd(), warn().

  • Исправление: обработка ответа HEAD с большим Content-Length в Fetch API.

  • Исправление: метод items() для разделяемого словаря.

  • Исправление: метод delete() для разделяемого словаря.

Ядро:

  • Добавление: расширен модуль fs. Добавлен метод fs.existsSync().

  • Исправление: модуль xml. Исправлена некорректная обработка исключений при повреждённом XML в методе xml.parse().

  • Исправление: Regexp.prototype.exec() с глобальным регулярным выражением и вводом Юникод.

Изменения в njs 0.8.1

Дата выпуска: 12 сентября 2023

Модули nginx:

  • Добавление: директива js_periodic для http и stream, позволяющая задавать обработчик на JS для запуска через регулярные интервалы времени.

  • Добавление: реализован метод items() разделяемого словаря. Метод возвращает все пары ключ-значение с неистёкшим сроком действия.

  • Исправление: исправлены методы size() и keys() разделяемого словаря.

  • Исправление: исправлено ошибочное исключение в r.internalRedirect(), появившееся в 0.8.0.

Ядро:

  • Исправление: исправлен некорректный порядок ключей в Object.getOwnPropertyNames().

Изменения в njs 0.8.0

Дата выпуска: 06 июля 2023

Модули nginx:

  • Изменение: удалена специальная обработка запрещённых заголовков в Fetch API, появившаяся в 0.7.10.

  • Изменение: удалены устаревшие начиная с 0.5.0 свойства r.requestBody и r.responseBody в модуле http.

  • Изменение: генерация исключения в r.internalRedirect() при фильтрации в модуле http.

  • Добавление: появились дополнительные глобальные свойства nginx: ngx.build, ngx.conf_file_path, ngx.error_log_path, ngx.prefix, ngx.version, ngx.version_number и ngx.worker_id.

  • Добавление: появилась директива js_shared_dict_zone для http и stream, позволяющая объявлять словарь, разделяемый между рабочими процессами.

  • Добавление: появились глобальные методы и свойства nginx.shared для работы с разделяемыми словарями.

  • Улучшение: добавлены опции времени компиляции для отключения модулей njs. Например, чтобы отключить код, связанный с libxslt:

    NJS_LIBXSLT=NO ./configure  .. --add-module=/path/to/njs/module
    
  • Исправление: исправлен сеттер r.status при фильтрации в модуле http.

  • Исправление: исправлена установка заголовка Location в модуле http.

Ядро:

  • Изменение: нативные методы теперь получают аргумент retval. Это изменение нарушает совместимость с C-расширениями для njs и требует модификации кода.

  • Изменение: удалены устаревшие методы String, не соответствующие спецификации. Были удалены следующие методы: String.bytesFrom(), String.prototype.fromBytes(), String.prototype.fromUTF8(), String.prototype.toBytes(), String.prototype.toUTF8(), String.prototype.toString(encoding).

  • Изменение: удалена поддержка сборки с GNU readline.

  • Добавление: добавлены соответствующие стандарту ES13 методы Array: Array.from(), Array.prototype.toSorted(), Array.prototype.toSpliced(), Array.prototype.toReversed().

  • Добавление: добавлены соответствующие стандарту ES13 методы TypedArray: %TypedArray%.prototype.toSorted(), %TypedArray%.prototype.toSpliced(), %TypedArray%.prototype.toReversed().

  • Добавление: добавлены свойства CryptoKey в WebCrypto API. Были добавлены следующие свойства: algorithm, extractable, type, usages.

  • Исправление: исправлен retval метода сrypto.getRandomValues().

  • Исправление: исправлено вычисление вычисляемых имён свойств с функциональными выражениями.

  • Исправление: исправлено неявное имя для функционального выражения, объявленного в массивах.

  • Исправление: исправлен разбор циклов for-in.

  • Исправление: исправлен Date.parse() с форматом ISO-8601 и смещением по времени UTC.

Изменения в njs 0.7.12

Дата выпуска: 10 апреля 2023

Модули nginx:

  • Исправление: исправлен конструктор Headers() в Fetch API.

Ядро:

  • Добавление: добавлен метод Hash.copy() в модуле crypto.

  • Добавление: добавлен модуль zlib.

  • Улучшение: добавлена поддержка инструкции export {name as default}.

  • Исправление: исправлен конструктор Number в соответствии со спецификацией.

Изменения в njs 0.7.11

Дата выпуска: 09 марта 2023

Модули nginx:

  • Исправление: добавлена отсутствовавшая линковка с libxml2 для динамического модуля. Ошибка появилась в 0.7.10.

Ядро:

  • Добавление: добавлен XMLNode API для модификации XML-документов.

  • Изменение: отключён XML_PARSE_DTDVALID при разборе XML-документа из соображений безопасности. Проблема появилась в 0.7.10. Когда XML_PARSE_DTDVALID включён, libxml2 разбирает и исполняет внешние сущности, находящиеся внутри XML-документа.

  • Исправление: исправлено определение await в аргументах.

  • Исправление: исправлен дамп экземпляра Error(), когда свойство «name» не является примитивом.

  • Исправление: исправлен дамп экземпляра массива со свойством getter.

  • Исправление: исправлен njs_object_property() со свойствами NJS_WHITEOUT.

  • Исправление: исправлен дамп экземпляра func с «name» в качестве геттера.

  • Исправление: исправлено прикрепление стека вызовов к объекту ошибки.

  • Исправление: исправлен String.prototype.replace() с заменой, содержащей «$'», «$`».

Изменения в njs 0.7.10

Дата выпуска: 07 февраля 2023

Модули nginx:

  • Добавление: добавлены конструкторы Request, Response и Headers в Fetch API.

  • Исправление: исправлен callback логгера nginx для вызовов в мастер-процессе.

Ядро:

  • Добавление: добавлена поддержка сигналов в CLI.

  • Добавление: добавлен модуль xml для работы с XML-документами.

  • Добавление: расширена поддержка симметричных и асимметричных ключей в WebCrypto. В частности, добавлен формат JWK для importKey().

  • Добавление: расширена поддержка симметричных и асимметричных ключей в WebCrypto API. В частности, добавлен формат JWK для importKey(). Также реализованы generateKey() и exportKey().

  • Добавление: добавлено String.prototype.replaceAll().

  • Исправление: исправлена обработка синтаксических ошибок в условиях for(expr1;.

  • Исправление: Object.values() и Object.entries() с внешними объектами.

  • Исправление: исправлен RegExp.prototype[@@replace]().

Изменения в njs 0.7.9

Дата выпуска: 17 ноября 2022

Модули nginx:

  • Исправление: исправлена повторная инициализация прототипа Response в Fetch. Когда хотя бы одна директива js_import была объявлена одновременно в HTTP и Stream, ngx.fetch() возвращал некорректный ответ в Stream. Ошибка появилась в 0.7.7.

Ядро:

  • Исправление: исправлен String.prototype.replace(re), если re.exec() возвращает неплоский массив.

  • Исправление: исправлен Array.prototype.fill(), когда объект start изменяет this.

  • Исправление: исправлено описание для методов fs.mkdir() и fs.rmdir().

  • Исправление: исправлен %TypedArray%.prototype.set(s), когда элемент s изменяет this.

  • Исправление: исправлен Array.prototype.splice(s,d), когда d изменяет размер this во время eval.

  • Исправление: исправлен цикл for-in с выражениями в левой и правой частях.

Изменения в njs 0.7.8

Дата выпуска: 25 октября 2022

Модули nginx:

  • Добавление: добавлена директива js_preload_object.

  • Добавление: добавлено свойство ngx.conf_prefix.

  • Добавление: добавлены s.sendUpstream() и s.sendDownstream() в модуле stream.

  • Добавление: добавлена поддержка метода HEAD в Fetch API.

  • Улучшение: улучшена поддержка callback-функции async для s.send() в модуле stream.

Ядро:

  • Добавление: добавлено свойство экземпляра name для объекта функции.

  • Добавление: добавлен объект njs.memoryStats.

  • Исправление: исправлен String.prototype.trimEnd() со строкой Юникода.

  • Исправление: исправлен Object.freeze() с быстрыми массивами.

  • Исправление: исправлен Object.defineProperty() с быстрыми массивами.

  • Исправление: исправлен токен async в качестве имени свойства объекта.

  • Исправление: исправлена инструкция установки свойства, когда ключ модифицирует базовую привязку.

  • Исправление: исправлены сложные присваивания.

  • Исправление: исправлена обработка необработанных отклонений промисов.

  • Исправление: исправлен process.env при наличии дублирующихся переменных окружения.

  • Исправление: исправлено обнаружение повторного объявления в модулях.

  • Исправление: исправлены вызовы привязанных функций в соответствии со спецификацией.

  • Исправление: исправлена метка break для инструкции if.

  • Исправление: исправлены пустые инструкции с метками.

Изменения в njs 0.7.7

Дата выпуска: 30 августа 2022

Модули nginx:

  • Добавление: расширено число контекстов конфигурации nginx, в которых могут быть указаны директивы js.

    • HTTP: директивы js_import, js_path, js_set и js_var разрешены в контекстах server и location. Директивы js_content, js_body_filter и js_header_filter разрешены в контексте if.

    • Stream: директивы js_import, js_path, js_set и js_var разрешены в контексте server.

  • Добавление: добавлено свойство r.internal.

  • Исправление: исправлено чтение тела ответа в Fetch API.

  • Исправление: исправлен js_fetch_timeout в модуле stream.

  • Исправление: исправлена утечка сокета при таймауте fetch 0.

Ядро:

  • Добавление: расширен модуль fs. Добавлены fs.openSync(), fs.promises.open(), fs.fstatSync(), fs.readSync(), fs.writeSync().

    Реализованы следующие свойства FileHandle: fd, read(), stat(), write(), close().

  • Исправление: исправлены parseInt(), parseFloat(), Symbol.for() без аргументов.

Изменения в njs 0.7.6

Дата выпуска: 19 июля 2022

Модули nginx:

  • Добавление: улучшен объект r.args{}. Добавлена поддержка нескольких аргументов с одинаковым ключом. Добавлена чувствительность к регистру для ключей. Ключи и значения теперь декодируются из percent-encoding.

  • Исправление: исправлен сеттер r.headersOut{} для специальных заголовков.

Ядро:

  • Добавление: добавлены Symbol.for() и Symbol.keyfor().

  • Добавление: добавлены atob() и btoa() из спецификации WHATWG.

  • Исправление: исправлены большие недесятичные литералы.

  • Исправление: исправлено удаление пробельных символов в Unicode-аргументах в parseInt().

  • Исправление: исправлена инструкция break в блоке try-catch.

  • Исправление: исправлено объявление функции async в CLI.

Изменения в njs 0.7.5

Дата выпуска: 21 июня 2022

Модули nginx:

  • Изменение: адаптация к изменениям в структурах заголовков nginx.

  • Исправление: исправлены специальные геттеры r.headersOut{} при отсутствии значения.

  • Изменение: возвращается значение undefined вместо пустой строки для Content-Type при отсутствии заголовка.

Ядро:

  • Исправление: исправлен перехват исключения, выброшенного из ожидаемой (awaited) функции.

  • Исправление: исправлена инициализация значения функции.

  • Исправление: исправлена работа интерпретатора при сбое await.

  • Исправление: исправлен конструктор типизированного массива при изменении исходного массива во время итерации.

  • Исправление: исправлен String.prototype.replace() с байтовыми строками.

  • Исправление: исправлена генерация байтовых строк шаблонными литералами.

  • Исправление: исправлен итератор массивов для разреженных массивов.

  • Исправление: исправлено освобождение памяти при преобразовании плоского массива в медленный массив.

  • Исправление: корректная обработка NJS_DECLINE в нативных функциях promise.

  • Исправление: исправлена работа с массивоподобными объектами в Promise.all() и связанных методах.

Изменения в njs 0.7.4

Дата выпуска: 24 мая 2022

Модули nginx:

  • Добавление: добавлены расширенные директивы для настройки Fetch API. Для http и stream были добавлены следующие директивы:

    • js_fetch_timeout,

    • js_fetch_verify,

    • js_fetch_buffer_size,

    • js_fetch_max_response_buffer_size.

  • Изменение: r.internalRedirect() теперь принимает экранированные URI.

  • Исправление: исправлен парсинг Response с более чем 8 заголовками в Fetch API.

Ядро:

  • Добавление: добавлено свойство njs.version_number.

  • Добавление: добавлена совместимость с BoringSSL для WebCrypto API.

  • Исправление: исправлен Array.prototype.sort() при изменении размера массива в компараторе.

  • Исправление: исправлен Array.prototype.slice() с медленным аргументом this.

  • Исправление: исправлены методы агрегации конструктора Promise с массивоподобным объектом.

  • Исправление: исправлен String.prototype.lastIndexOf() со строкой Unicode в качестве this.

  • Исправление: исправлен JSON.parse() при передаче функции reviver.

  • Исправление: исправлен Object.defineProperty() при передаче рекурсивного дескриптора.

  • Исправление: исправлен Array.prototype.fill() для типизированных массивов.

  • Исправление: привязка функционального выражения сделана неизменяемой в соответствии со спецификацией.

  • Исправление: исправлено переопределение специальных свойств в Object.defineProperty().

Изменения в njs 0.7.3

Дата выпуска: 12 апреля 2022

Ядро:

  • Добавление: добавлена поддержка callback-функции разрешения модулей (module resolution callback). Это позволяет хост-среде контролировать способ загрузки импортируемых модулей.

  • Исправление: исправлены трассировки стека (backtraces) при обходе импортированных пользовательских модулей.

  • Исправление: исправлен Array.prototype.concat(), когда this является медленным массивом.

  • Исправление: исправлено выделение фрейма из ожидаемого (awaited) фрейма.

  • Исправление: исправлено выделение памяти для больших литералов массивов.

  • Исправление: исправлена работа интерпретатора при сбое преобразования toString.

Изменения в njs 0.7.2

Дата выпуска: 25 января 2022

Ядро:

  • Исправление: исправлен Array.prototype.join() при изменении массива во время итерации.

  • Исправление: исправлен Array.prototype.slice() при изменении массива во время итерации.

  • Исправление: исправлен Array.prototype.concat() при изменении массива во время итерации.

  • Исправление: исправлен Array.prototype.reverse() при изменении массива во время итерации.

  • Исправление: исправлен Buffer.concat() с подмассивами. Спасибо Sylvain Etienne.

  • Исправление: исправлена ошибка несоответствия типов (type confusion) при разрешении промисов.

  • Исправление: исправлен Function.prototype.apply() с большими массивами в качестве аргументов.

  • Исправление: исправлены рекурсивные вызовы функции async.

  • Исправление: исправлено повторное объявление функции. Ошибка появилась в 0.7.0.

Изменения в njs 0.7.1

Дата выпуска: 28 декабря 2021

Модули nginx:

  • Изменение: директива js_include, устаревшая начиная с 0.4.0, была удалена.

  • Изменение: специфичный для PCRE/PCRE2 код перенесён в модули. Это гарантирует, что njs использует ту же библиотеку RegExp, что и nginx.

Ядро:

  • Исправление: исправлены decodeURI() и decodeURIComponent() с некорректными байтовыми строками. Ошибка появилась в 0.4.3.

  • Исправление: исправлена ошибка heap-use-after-free во фрейме await. Ошибка появилась в 0.7.0.

  • Исправление: исправлены методы WebCrypto sign() и verify() при использовании OpenSSL 3.0.

  • Исправление: исправлен выброс исключения при неудачном сопоставлении RegExp. Ошибка появилась в 0.1.15.

  • Исправление: исправлен перехват исключения, выброшенного в блоке try функции async. Ошибка появилась в 0.7.0.

  • Исправление: исправлено выполнение функции async в синхронном контексте. Ошибка появилась в 0.7.0.

  • Исправление: исправлено повторное объявление функции в CLI при включённом интерактивном режиме. Ошибка появилась в 0.6.2.

  • Исправление: исправлен оператор typeof с объектом DataView.

  • Исправление: устранена утечка информации в Buffer.from().

Изменения в njs 0.7.0

Дата выпуска: 19 октября 2021

Модули nginx:

  • Добавление: добавлена поддержка HTTPS для Fetch API.

  • Добавление: добавлен метод setReturnValue() для http и stream.

Ядро:

  • Добавление: представлена реализация Async/Await.

  • Добавление: добавлена реализация WebCrypto API.

  • Исправление: исправлено копирование замыканий для объявленных функций. Ошибка появилась в 0.6.0.

  • Исправление: исправлено необработанное отклонение (rejection) promise при обработке событий.

  • Исправление: исправлен геттер Response.headers в Fetch API.

Изменения в njs 0.6.2

Дата выпуска: 31 августа 2021

Модули nginx:

  • Исправление: исправлена чрезмерная загрузка процессора, когда js_filter зарегистрирован в обоих направлениях.

Ядро:

  • Добавление: представлена реализация AggregateError.

  • Добавление: добавлены оставшиеся методы конструктора Promise. Были добавлены следующие методы: Promise.all(), Promise.allSettled(), Promise.any(), Promise.race().

  • Улучшение: устранена рекурсия из генератора кода.

  • Исправление: исправлен парсинг rest-параметра без идентификатора связывания.

  • Исправление: исправлен callback resolve/reject для Promise.prototype.finally() .

  • Исправление: исправлен %TypedArray%.prototype.join() с отсоединённым буфером.

  • Исправление: исправлена утечка памяти в интерактивной оболочке.

Изменения в njs 0.6.1

Дата выпуска: 29 июня 2021

  • Исправление: исправлен RegExpBuiltinExec() с регулярными выражениями только для UTF-8. Ошибка появилась в 0.4.2.

  • Исправление: исправлен парсинг объявления export default с выражениями без присваивания. Спасибо Artem S. Povalyukhin.

Изменения в njs 0.6.0

Дата выпуска: 15 июня 2021

Ядро:

  • Добавление: добавлена поддержка объявлений let и const.

  • Добавление: добавлен RegExp.prototype[Symbol.split].

  • Добавление: добавлена поддержка флага sticky для RegExp.

  • Исправление: исправлено переполнение буфера в куче (heap-buffer-overflow) в String.prototype.lastIndexOf().

  • Исправление: исправлен RegExp.prototype.test() в соответствии со спецификацией.

  • Исправление: исправлен String.prototype.split() в соответствии со спецификацией.

  • Исправление: исправлено использование неинициализированного значения при отслеживании отклонённых промисов.

  • Исправление: исправлен njs.dump() для объектов с циклическими ссылками.

Изменения в njs 0.5.3

Дата выпуска: 30 марта 2021

Модули nginx:

  • Добавление: добавлена директива js_var для http и stream.

Изменения в njs 0.5.2

Дата выпуска: 09 марта 2021

Модули nginx:

  • Добавление: добавлена директива js_body_filter.

  • Добавление: представлено свойство s.status для объекта сессии Stream.

Ядро:

  • Добавление: добавлена поддержка callback-функций njs.on (exit).

  • Исправление: исправлено повторное использование дескриптора свойства для нерасширяемых объектов. Спасибо Artem S. Povalyukhin.

  • Исправление: исправлены Object.freeze() и связанные методы в соответствии со спецификацией. Спасибо Artem S. Povalyukhin.

  • Исправление: исправлен Function() в режиме CLI.

  • Исправление: исправлена итерация по значениям типизированных массивов с помощью for-in. Спасибо Artem S. Povalyukhin.

Изменения в njs 0.5.1

Дата выпуска: 16 февраля 2021

Модули nginx:

  • Добавление: представлен метод ngx.fetch(), реализующий Fetch API.

    Реализованы следующие свойства и методы объекта Response: arrayBuffer(), bodyUsed, json(), headers, ok, redirect, status, statusText, text(), type, url.

    Основные ограничения: поддерживается только схема http://, перенаправления не обрабатываются.

    В сотрудничестве с 洪志道 (Hong Zhi Dao).

  • Добавление: добавлена директива js_header_filter.

  • Исправление: исправлена обработка буферизованных данных в фильтре тела в модуле stream.

Ядро:

  • Исправление: исправлен обход безопасного режима (safe mode) в конструкторе Function.

  • Исправление: исправлен Date.prototype.toISOString() с некорректными значениями дат.

Изменения в njs 0.5.0

Дата выпуска: 01 декабря 2020

Модули nginx:

  • Добавление: представлен глобальный объект ngx.

    Добавлены следующие методы:

    • ngx.log(level, message)

    Добавлены следующие свойства:

    • ngx.INFO, ngx.WARN, ngx.ERR.

  • Добавление: добавлена поддержка объекта Buffer там, где ожидается строка.

  • Добавление: добавлены Buffer-версии существующих свойств.

    Добавлены следующие свойства:

    • r.requestBuffer (r.requestBody), r.responseBuffer (r.responseBody), r.rawVariables (r.variables), s.rawVariables (s.variables).

    В модуле stream добавлены следующие события:

    • upstream (upload), downstream (download).

  • Улучшение: добавлены псевдонимы для существующих свойств.

    Добавлены следующие свойства:

    • r.requestText (r.requestBody), r.responseText (r.responseBody).

  • Улучшение: генерация исключения в r.internalRedirect() для подзапроса.

  • Исправление: исправлен промис r.subrequest() при перенаправлении с помощью error_page.

  • Исправление: исправлена обработка событий promise.

Ядро:

  • Добавление: добавлены определения TypeScript для встроенных модулей. Спасибо Jakub Jirutka.

  • Добавление: отслеживание необработанных отклонений promise.

  • Добавление: добавлена начальная поддержка итераторов. Спасибо Artem S. Povalyukhin.

  • Улучшение: рефакторинг определений TypeScript. Спасибо Jakub Jirutka.

  • Улучшение: добавлена забытая поддержка Object.prototype.valueOf() в Buffer.from().

  • Исправление: исправлена ошибка heap-use-after-free в JSON.parse().

  • Исправление: исправлена ошибка heap-use-after-free в JSON.stringify().

  • Исправление: исправлен JSON.stringify() для массивов, размер которых изменяется через геттеры.

  • Исправление: исправлена ошибка heap-buffer-overflow для RegExp.prototype[Symbol.replace].

  • Исправление: исправлено возвращаемое значение для функций Buffer.prototype.write*.

  • Исправление: исправлен querystring.stringify(). Спасибо Artem S. Povalyukhin.

  • Исправление: исправлен обработчик catch для Promise.prototype.finally().

  • Исправление: исправлен querystring.parse().

Изменения в njs 0.4.4

Дата выпуска: 29 сентября 2020

Модули nginx:

  • Исправление: исправлено объединение location.

  • Исправление: исправлен r.httpVersion для HTTP/2.

Ядро:

  • Добавление: добавлена поддержка числовых разделителей (ES12).

  • Добавление: добавлены оставшиеся методы для %TypedArray%.prototype. Добавлены следующие методы: every(), filter(), find(), findIndex(), forEach(), includes(), indexOf(), lastIndexOf(), map(), reduce(), reduceRight(), reverse(), some().

  • Добавление: добавлены оставшиеся методы %TypedArray%. Добавлены следующие методы: from(), of().

  • Добавление: добавлен объект DataView.

  • Добавление: добавлена реализация объекта Buffer.

  • Добавление: добавлена поддержка ArrayBuffer в TextDecoder.prototype.decode()

  • Добавление: добавлена поддержка объекта Buffer в методах crypto.

  • Добавление: добавлена поддержка объекта Buffer в методах fs.

  • Изменение: теперь Hash.prototype.digest() и Hmac.prototype.digest() возвращают экземпляр Buffer вместо байтовой строки, если кодировка не указана.

  • Изменение: теперь fs.readFile() и подобные функции возвращают экземпляр Buffer вместо байтовой строки, если кодировка не указана.

  • Исправление: исправлен обработчик свойства функции prototype при установке значения.

  • Исправление: исправлен обработчик свойства функции constructor при установке значения.

  • Исправление: исправлен String.prototype.indexOf() для байтовых строк.

  • Исправление: исправлен RegExpBuiltinExec() с глобальным флагом и байтовыми строками.

  • Исправление: исправлен RegExp.prototype[Symbol.replace], когда значение замены является функцией.

  • Исправление: исправлен TextDecoder.prototype.decode() с ненулевым смещением TypedArray.

Изменения в njs 0.4.3

Дата выпуска: 11 августа 2020

Ядро:

  • Добавление: добавлен модуль Query String.

  • Добавление: улучшен метод fs.mkdir() для поддержки рекурсивного создания каталогов. Спасибо Artem S. Povalyukhin.

  • Добавление: улучшен метод fs.rmdir() для поддержки рекурсивного удаления каталогов. Спасибо Artem S. Povalyukhin.

  • Добавление: представлен декодер UTF-8 в соответствии со спецификацией кодирования WHATWG.

  • Добавление: добавлена реализация TextDecoder() и TextEncoder().

  • Исправление: исправлен разбор оператора return без точки с запятой.

  • Исправление: исправлен njs_number_to_int32() для платформ с прямым порядком байтов (big-endian).

  • Исправление: исправлен модульный тест на платформах с прямым порядком байтов (big-endian).

  • Исправление: исправлен разбор литералов регулярных выражений с символами «=».

  • Исправление: исправлены пре/пост-инкремент/декремент в операциях присваивания.

Изменения в njs 0.4.2

Дата выпуска: 07 июля 2020

Ядро:

  • Добавление: добавлен RegExp.prototype[Symbol.replace].

  • Добавление: представлена трассировка стека с точностью до строки.

  • Добавление: добавлен %TypedArray%.prototype.sort().

  • Добавление: расширен модуль fs. Добавлены mkdir(), readdir(), rmdir() и подобные функции.

  • Улучшение: рефакторинг парсера.

  • Исправление: исправлено описание TypeScript API для HTTP-заголовков.

  • Исправление: исправлено описание TypeScript API для типа NjsByteString.

  • Исправление: исправлен String.prototype.repeat() в соответствии со спецификацией.

  • Исправление: исправлен String.prototype.replace() в соответствии со спецификацией.

  • Исправление: исправлен разбор флагов для литералов регулярных выражений.

  • Исправление: исправлена генерация индексов для глобальных объектов в генераторе.

  • Исправление: исправлен %TypedArray%.prototype.copyWithin() с ненулевым байтовым смещением.

  • Исправление: исправлен Array.prototype.splice() для разреженных массивов.

  • Исправление: исправлен Array.prototype.reverse() для разреженных массивов.

  • Исправление: исправлен Array.prototype.sort() для разреженных массивов.

Изменения в njs 0.4.1

Дата выпуска: 19 мая 2020

Модули nginx:

  • Добавление: добавлена поддержка многозначных заголовков в r.headersIn{}.

  • Добавление: представлен API raw headers: r.rawHeadersIn[] и r.rawHeadersOut[].

  • Добавление: добавлено описание API для TypeScript.

Ядро:

  • Исправление: исправлен Array.prototype.slice() для разреженных массивов.

Изменения в njs 0.4.0

Дата выпуска: 23 апреля 2020

Модули nginx:

  • Добавление: добавлена поддержка многозначных заголовков в r.headersOut{}.

  • Добавление: добавлена директива js_import для http и stream.

  • Улучшение: улучшен обход r.headersOut{} со специальными заголовками.

  • Улучшение: улучшен обход r.headersOut{} с дубликатами.

  • Изменение: теперь обработчик свойства r.responseBody возвращает undefined вместо генерации исключения, если тело ответа недоступно.

Ядро:

  • Добавление: добавлена поддержка аргументов скрипта в CLI.

  • Добавление: преобразование внешних значений в нативные объекты JS.

  • Исправление: исправлено разыменование NULL-указателя в обработчике свойства __proto__.

  • Исправление: исправлена обработка отсутствия символа новой строки в конце скрипта.

  • Исправление: исправлен конструктор RegExp() с пустым шаблоном и непустыми флагами.

  • Исправление: исправлен String.prototype.replace(), когда функция возвращает не строку.

  • Исправление: исправлено чтение псевдофайлов в fs.

Изменения в njs 0.3.9

Дата выпуска: 03 марта 2020

Модули nginx:

  • Добавление: добавлен автономный режим для r.subrequest(). Ответы на автономные подзапросы игнорируются. В отличие от обычных подзапросов, автономный подзапрос можно создать внутри обработчика переменной.

Ядро:

  • Добавление: добавлен API promises для модуля fs. Спасибо Artem S. Povalyukhin.

  • Добавление: расширен модуль fs. Добавлены access(), symlink(), unlink(), realpath() и подобные функции. Спасибо Artem S. Povalyukhin.

  • Улучшение: представлены эффективные по памяти обычные массивы.

  • Улучшение: рефакторинг лексера.

  • Исправление: исправлено сопоставление нативных функций в трассировках стека.

  • Исправление: исправлен вызов обратных вызовов в модуле fs. Спасибо Artem S. Povalyukhin.

  • Исправление: исправлен Object.getOwnPropertySymbols().

  • Исправление: исправлена ошибка heap-buffer-overflow в njs_json_append_string().

  • Исправление: исправлены encodeURI() и decodeURI() в соответствии со спецификацией.

  • Исправление: исправлен Number.prototype.toPrecision().

  • Исправление: исправлена обработка аргумента space в JSON.stringify().

  • Исправление: исправлен JSON.stringify() с объектами Number() и String().

  • Исправление: исправлено экранирование Unicode в JSON.stringify() в соответствии со спецификацией.

  • Исправление: исправлен импорт ненативных модулей. Спасибо 洪志道 (Hong Zhi Dao).

  • Исправление: исправлен njs.dump() с экземпляром Date() в контейнере.

Изменения в njs 0.3.8

Дата выпуска: 21 января 2020

Модули nginx:

  • Добавление: добавлена поддержка Promise для r.subrequest(). Если колбэк не указан, r.subrequest() возвращает обычный объект Promise, который разрешается в объект ответа подзапроса.

  • Изменение: теперь обработчик свойства r.parent возвращает undefined вместо генерации исключения, если родительский объект недоступен.

Ядро:

  • Возможность: добавлена поддержка Promise. Реализовано в соответствии со спецификацией за исключением: Promise.all(), Promise.allSettled(), Promise.race().

  • Возможность: добавлена начальная поддержка типизированных массивов (Typed-arrays). Спасибо Tiago Natel de Moura.

  • Возможность: добавлена поддержка ArrayBuffer. Спасибо Tiago Natel de Moura.

  • Возможность: добавлена начальная поддержка Symbol. Спасибо Артему С. Повалюхину.

  • Возможность: добавлена поддержка внешних объектов для JSON.stringify().

  • Возможность: добавлен Object.is(). Спасибо Артему С. Повалюхину.

  • Возможность: добавлен Object.setPrototypeOf(). Спасибо Артему С. Повалюхину.

  • Возможность: добавлен оператор нулевого слияния (nullish coalescing).

  • Исправление: исправлен Object.getPrototypeOf() в соответствии со спецификацией.

  • Исправление: исправлен Object.prototype.valueOf() в соответствии со спецификацией.

  • Исправление: исправлен JSON.stringify() с непечатаемыми значениями и функцией замены (replacer).

  • Исправление: исправлен оператор in в соответствии со спецификацией.

  • Исправление: исправлен Object.defineProperties() в соответствии со спецификацией.

  • Исправление: исправлен Object.create() в соответствии со спецификацией. Спасибо Артему С. Повалюхину.

  • Исправление: исправлен Number.prototype.toString(radix) при включенном fast-math.

  • Исправление: исправлены свойства экземпляра RegExp().

  • Исправление: исправлена ошибка сегментации при импорте. Спасибо 洪志道 (Hong Zhi Dao).

Изменения в njs 0.3.7

Дата выпуска: 19 ноября 2019

Модули nginx:

  • Улучшение: переработана итерация по внешним объектам.

Ядро:

  • Возможность: добавлен Object.assign().

  • Возможность: добавлен Array.prototype.copyWithin().

  • Возможность: добавлена поддержка меток в console.time().

  • Изменение: удален console.help() из CLI.

  • Улучшение: конструкторы и объекты верхнего уровня перемещены в глобальный объект.

  • Улучшение: валидация аргументов для скрипта configure.

  • Улучшение: переработаны методы JSON.

  • Исправление: исправлено переполнение буфера кучи (heap-buffer-overflow) в функции njs_array_reverse_iterator(). Были затронуты следующие функции: Array.prototype.lastIndexOf(), Array.prototype.reduceRight().

  • Исправление: исправлен слот [[Prototype]] объекта NativeErrors.

  • Исправление: исправлены свойства NativeError.prototype.message.

  • Исправление: добавлено преобразование значения this в объект в Array.prototype functions.

  • Исправление: исправлен итератор для функций Array.prototype.find() и Array.prototype.findIndex().

  • Исправление: исправлены Array.prototype.includes() и Array.prototype.join() с аргументом undefined.

  • Исправление: исправлено свойство constructor объектов Hash и Hmac.

  • Исправление: исправлено свойство __proto__ геттеров и сеттеров.

  • Исправление: исправлено форматирование объекта Date в строку.

  • Исправление: исправлена обработка аргументов NaN и -0 в Math.min() и Math.max().

  • Исправление: исправлен Math.round() в соответствии со спецификацией.

  • Исправление: повторно реализованы функции bound в соответствии со спецификацией.

Изменения в njs 0.3.6

Дата выпуска: 22 октября 2019

Модули nginx:

  • Улучшение: получение специальных заголовков из r.headersIn{}.

Ядро:

  • Возможность: добавлена поддержка нового Function().

  • Возможность: добавлен Number.prototype.toFixed().

  • Возможность: добавлен Number.prototype.toPrecision().

  • Возможность: добавлен Number.prototype.toExponential().

  • Улучшение: свойство prototype экземпляров функций сделано доступным для записи.

  • Улучшение: ограничение глубины рекурсии во время компиляции.

  • Улучшение: перемещение глобальных функций в глобальный объект.

  • Исправление: исправлена мутация прототипа для объектных литералов.

  • Исправление: исправлено переполнение буфера кучи (heap-buffer-overflow) при разборе литералов регулярных выражений.

  • Исправление: исправлено переполнение целых чисел (integer-overflow) при разборе экспоненты числовых литералов.

  • Исправление: исправлен parseFloat().

  • Исправление: исправлены функции Array.prototype в соответствии со спецификацией. Были исправлены следующие функции: every, includes, indexOf, filter, find, findIndex, forEach, lastIndexOf, map, pop, push, reduce, reduceRight, shift, some, unshift.

  • Исправление: исправлена обработка дескрипторов доступа в Object.freeze().

  • Исправление: исправлен String.prototype.replace(), когда первый аргумент не является строкой.

  • Исправление: исправлена ошибка stack-use-after-scope в Array.prototype.map().

  • Исправление: формат Date.prototype.toUTCString() приведен в соответствие с ES9.

  • Исправление: исправлено переполнение буфера в Number.prototype.toString(radix).

  • Исправление: исправлен Regexp.prototype.test() для регулярных выражений с обратными ссылками.

  • Исправление: исправлен Array.prototype.map() для объектов с несуществующими значениями.

  • Исправление: исправлены Array.prototype.pop() и shift() для разреженных объектов.

  • Исправление: исправлен Date.UTC() в соответствии со спецификацией.

  • Исправление: исправлен конструктор Date() в соответствии со спецификацией.

  • Исправление: исправлен тип Date.prototype. Спасибо Артему С. Повалюхину.

  • Исправление: исправлен Date.prototype.setTime(). Спасибо Артему С. Повалюхину.

  • Исправление: исправлено количество аргументов по умолчанию, ожидаемое встроенными функциями.

  • Исправление: исправлены свойства caller и arguments экземпляра функции. Спасибо Артему С. Повалюхину.

Изменения в njs 0.3.5

Дата выпуска: 15 августа 2019

Ядро:

  • Исправление: исправлен импорт модулей с использованием require(). Ошибка появилась в 0.3.4.

  • Исправление: исправлен [[SetPrototypeOf]].

Изменения в njs 0.3.4

Дата выпуска: 13 августа 2019

Ядро:

  • Возможность: добавлены сокращенные методы Object и вычисляемые имена свойств. Спасибо 洪志道 (Hong Zhi Dao) и Артему С. Повалюхину.

  • Возможность: добавлена поддержка литералов геттеров/сеттеров. Спасибо 洪志道 (Hong Zhi Dao) и Артему С. Повалюхину.

  • Возможность: добавлен fs.renameSync().

  • Возможность: добавлены String.prototype.trimEnd() и String.prototype.trimStart().

  • Улучшение: добавлена поддержка memory-sanitizer.

  • Улучшение: таблицы регистра символов Unicode обновлены до версии 12.1.

  • Улучшение: добавлена валидация UTF8 для строковых литералов.

  • Исправление: исправлено чтение файлов нулевого размера в fs.readFileSync().

  • Исправление: расширен список пробельных символов в String.prototype.trim().

  • Исправление: исправлено использование неинициализированного значения в String.prototype.padStart().

  • Исправление: исправлен String.prototype.replace() для строк замены $0 и $&.

  • Исправление: исправлен String.prototype.replace() для байтовых строк с аргументом-регулярным выражением.

  • Исправление: исправлено глобальное сопоставление в String.prototype.replace() с аргументом-регулярным выражением.

  • Исправление: исправлен Array.prototype.slice() для примитивных типов.

  • Исправление: исправлено переполнение буфера кучи (heap-buffer-overflow) при импорте модуля.

  • Исправление: исправлено экранирование символов UTF-8.

  • Исправление: исправлены Object.values() и Object.entries() для разделяемых объектов.

  • Исправление: исправлен доступ к неинициализированной памяти в String.prototype.match().

  • Исправление: исправлен String.prototype.match() для байтовых строк с аргументом-регулярным выражением.

  • Исправление: исправлен Array.prototype.lastIndexOf() с неопределенными (undefined) аргументами.

  • Исправление: исправлен String.prototype.substring() с пустой подстрокой.

  • Исправление: исправлен недопустимый доступ к памяти в String.prototype.substring().

  • Исправление: исправлен String.fromCharCode() для кодовых точек больше 65535 и NaN.

  • Исправление: исправлены String.prototype.toLowerCase() и String.prototype.toUpperCase().

  • Исправление: исправлен конструктор Error() без аргументов.

  • Исправление: исправлен оператор in для значений с дескрипторами доступа.

  • Исправление: исправлен Object.defineProperty() для небулевых свойств дескриптора.

  • Исправление: исправлен Error.prototype.toString() со свойствами со строками UTF8.

  • Исправление: исправлен Error.prototype.toString() с нестроковыми значениями для name и message.

Изменения в njs 0.3.3

Дата выпуска: 25 июня 2019

Модули nginx:

  • Улучшение: получение специальных заголовков ответа в r.headersOut{}.

  • Улучшение: работа с неизвестными методами в r.subrequest().

  • Улучшение: добавлена поддержка null в качестве второго аргумента r.subrequest().

  • Исправление: исправлена обработка пустой цепочки вывода в фильтре тела потока.

Ядро:

  • Возможность: добавлена поддержка геттеров/сеттеров свойств во время выполнения. Спасибо 洪志道 (Hong Zhi Dao) и Артему С. Повалюхину.

  • Возможность: добавлен глобальный объект process.

  • Возможность: большинство встроенных свойств и методов сделаны доступными для записи.

  • Возможность: добавлена обобщенная реализация Array.prototype.fill().

  • Исправление: исправлено переполнение целых чисел (integer-overflow) в String.prototype.concat().

  • Исправление: исправлена установка свойств объектов.

  • Исправление: исправлен Array.prototype.toString().

  • Исправление: исправлен Date.prototype.toJSON().

  • Исправление: исправлена перезапись свойства «constructor» встроенных прототипов.

  • Исправление: исправлена обработка недопустимых суррогатных пар в строках.

  • Исправление: исправлена обработка недопустимых суррогатных пар в строках JSON.

  • Исправление: исправлено переполнение буфера кучи (heap-buffer-overflow) в toUpperCase() и toLowerCase().

  • Исправление: исправлено экранирование одиночных закрывающих квадратных скобок в конструкторе RegExp().

  • Исправление: исправлена обработка символов нулевого байта внутри строк шаблонов RegExp.

  • Исправление: исправлен String.prototype.toBytes() для строк ASCII.

  • Исправление: исправлено логическое значение (truth value) чисел JSON в JSON.parse().

  • Исправление: исправлено использование неинициализированного значения (use-of-uninitialized-value) в njs_string_replace_join().

  • Исправление: исправлен parseInt('-0'). Спасибо Артему С. Повалюхину.

Изменения в njs 0.3.2

Дата выпуска: 21 мая 2019

Ядро:

  • Возможность: добавлена поддержка шаблонных литералов. Спасибо 洪志道 (Hong Zhi Dao) и Артему С. Повалюхину.

  • Возможность: выполнение команды из аргументов командной строки.

  • Возможность: добавлена поддержка объекта RegExp groups (ES9).

  • Возможность: добавлена поддержка определений функций с блочной областью видимости.

  • Возможность: добавлена поддержка сборки с библиотекой GNU Readline.

  • Возможность: свойства length, name и большинство встроенных методов сделаны настраиваемыми (configurable).

  • Возможность: все свойства конструктора сделаны настраиваемыми (configurable).

  • Исправление: исправлен Regexp.prototype.exec() для регулярных выражений только с поддержкой Unicode.

  • Исправление: исправлен njs_vm_value_dump() для пустых строковых значений.

  • Исправление: исправлен конструктор RegExp для аргументов со значением регулярного выражения.

  • Исправление: исправлен обход цепочки прототипов при итерации по объекту.

  • Исправление: исправлено переполнение в Array.prototype.concat().

  • Исправление: исправлено вычисление длины для строки UTF-8 с экранированными символами.

  • Исправление: исправлен разбор суррогатной пары, представленной в виде escape-последовательностей UTF-16.

  • Исправление: исправлена обработка квантификатора «*» для String.prototype.match().

  • Исправление: исправлен конструктор Date() с одним аргументом.

  • Исправление: исправлено расширение массивов.

  • Исправление: исправлено переполнение буфера кучи (heap-buffer-overflow) в String.prototype.replace().

  • Исправление: исправлено переполнение буфера кучи (heap-buffer-overflow) в String.prototype.lastIndexOf().

  • Исправление: исправлен разбор литералов регулярных выражений с экранированным обратным слэшем и обратным слэшем в квадратных скобках.

  • Исправление: исправлены литералы регулярных выражений с одиночными закрывающими скобками.

  • Исправление: исправлен доступ к неинициализированной памяти (uninitialized-memory-access) в Object.defineProperties().

  • Исправление: исправлена обработка квантификатора «*» для String.prototype.replace().

  • Исправление: исправлен Array.prototype.slice() для байтовых строк с недопустимым UTF8.

  • Исправление: исправлен String.prototype.split() для байтовых строк с недопустимым UTF8.

  • Исправление: исправлена обработка пустых блочных инструкций.

Изменения в njs 0.3.1

Дата выпуска: 16 апреля 2019

Ядро:

  • Добавление: добавлена поддержка стрелочных функций. Спасибо 洪志道 (Hong Zhi Dao) и Артему С. Повалюхину.

  • Добавление: добавлен Object.getOwnPropertyNames(). Спасибо Артему С. Повалюхину.

  • Добавление: добавлен Object.getOwnPropertyDescriptors(). Спасибо Артему С. Повалюхину.

  • Добавление: дескриптор аксессора __proto__ у экземпляров Object теперь является изменяемым.

  • Добавление: добавлена поддержка shebang в CLI.

  • Добавление: добавлена поддержка выполнения в режиме модуля в CLI. В глобальном режиме модуля this недоступен.

  • Исправление: исправлено определение editline.

  • Исправление: исправлен Function.prototype.bind(). Спасибо 洪志道 (Hong Zhi Dao).

  • Исправление: исправлена проверка дублирования параметров у функций. Спасибо 洪志道 (Hong Zhi Dao).

  • Исправление: исправлено объявление функции с именем, совпадающим с именем переменной. Спасибо 洪志道 (Hong Zhi Dao).

  • Улучшение: код, связанный с парсингом объектов, переменных и функций, подвергся рефакторингу. Спасибо 洪志道 (Hong Zhi Dao).

  • Улучшение: улучшен вывод больших значений в console.log().

  • Улучшение: вывод строк в console.log() приведен в соответствие со спецификацией (без экранирования и кавычек).

  • Улучшение: использование ES6-версии ToInt32(), ToUint32(), ToLength().

Изменения в njs 0.3.0

Дата выпуска: 26 марта 2019

Модули nginx:

  • Добавление: добавлена директива js_path для http и stream.

  • Изменение: возврат значения undefined вместо пустых строк для отсутствующих свойств в следующих объектах: r.args{}, r.headersIn{}, r.headersOut{}, r.variables{}, s.variables{}.

  • Изменение: возврат значения undefined вместо выброса исключения для r.requestBody, когда тело запроса недоступно.

  • Исправление: исправлен сбой при итерации по r.args{}, когда в паре «ключ-значение» отсутствовало значение.

Ядро:

  • Добавление: добавлена начальная поддержка модулей ES6. Поддерживаются инструкции импорта по умолчанию и экспорта по умолчанию. Спасибо 洪志道 (Hong Zhi Dao).

  • Добавление: добавлен Object.prototype.propertyIsEnumerable().

  • Добавление: вывод имени файла и имени функции в выводе дизассемблера.

  • Исправление: исправлены повторные объявления функций в интерактивной оболочке. Спасибо 洪志道 (Hong Zhi Dao).

  • Исправление: исправлен парсинг литералов RegExp.

  • Исправление: исправлена установка длины строки UTF8 в fs.readFileSync().

  • Исправление: исправлен nxt_file_dirname() для путей без компонента каталога.

Изменения в njs 0.2.8

Дата выпуска: 26 февраля 2019

Модули nginx:

  • Изменение: свойства HTTP-запроса, признанные устаревшими в 0.2.2, удалены.

  • Добавление: добавлена поддержка операции delete в r.headersOut{}.

  • Добавление: добавлена поддержка установки переменных nginx.

  • Исправление: исправлен r.subrequest() для пустого значения тела.

  • Улучшение: установка специальных заголовков ответа в r.headersOut{}.

Ядро:

  • Добавление: добавлена поддержка меток.

  • Добавление: добавлен метод setImmediate().

  • Добавление: добавлена поддержка сокращенных имен свойств для литералов Object.

  • Исправление: исправлен Function.prototype.bind().

  • Исправление: исправлен парсинг строковых литералов, содержащих символы перевода строки.

  • Исправление: исправлен номер строки при сообщении об ошибках ссылки на переменные.

  • Исправление: исправлено создание длинных строк UTF8.

  • Исправление: исправлена установка специальных заголовков ответа в String.prototype.split() для строк Unicode.

  • Исправление: исправлено переполнение буфера кучи в String.prototype.split().

  • Исправление: исправлен Array.prototype.fill(). Спасибо Артему С. Повалюхину.

  • Улучшение: код, связанный с вызовом функций, подвергся рефакторингу. Спасибо 洪志道 (Hong Zhi Dao).

  • Улучшение: код, связанный с переменными, подвергся рефакторингу. Спасибо 洪志道 (Hong Zhi Dao).

  • Улучшение: парсер подвергся рефакторингу. Спасибо 洪志道 (Hong Zhi Dao).

  • Улучшение: вывод имен файлов в исключениях.

Изменения в njs 0.2.7

Дата выпуска: 25 декабря 2018

Ядро:

  • Добавление: синтаксис rest-параметров (деструктуризация не поддерживается). Спасибо Александру Пыщеву.

  • Добавление: добавлен метод Object.entries().

  • Добавление: добавлен метод Object.values().

  • Улучшение: генератор кода переработан и упрощен.

  • Исправление: исправлена автоматическая вставка точки с запятой.

  • Исправление: исправлено выражение присваивания из составного присваивания.

  • Исправление: исправлено сравнение байтовых строк и строк UTF8.

  • Исправление: исправлен тип переменной итерации в for-in со значениями массивов.

  • Исправление: исправлена сборка на платформах без librt.

  • Исправление: устранены различные ошибки.

Изменения в njs 0.2.6

Дата выпуска: 27 ноября 2018

Ядро:

  • Добавление: встроенные прототипы теперь изменяемы.

  • Добавление: глобальный объект теперь изменяем.

  • Добавление: методы console.time() и console.timeEnd().

  • Добавление: разрешено повторное объявление переменных и функций.

  • Добавление: расширено соответствие спецификации Object.defineProperty().

  • Добавление: добавлен тихий режим для CLI для обработки простых выражений из stdin.

  • Добавление: представлена компактная форма трассировки стека для обработки переполнений стека.

  • Улучшение: улучшены формулировки для различных исключений.

  • Исправление: исправлена обработка значений замыканий.

  • Исправление: исправлен оператор равенства для различных типов значений.

  • Исправление: исправлена обработка ключевого слова this в различных областях видимости.

  • Исправление: исправлена обработка необъектных значений в Object.keys().

  • Исправление: исправлен парсинг инструкции throw внутри инструкции if.

  • Исправление: исправлен парсинг перевода строки после инструкции throw.

  • Исправление: исправлен парсинг инструкций в инструкции if без перевода строки.

  • Исправление: исправлено переполнение размера uint32_t в njs_array_expand().

  • Исправление: исправлен оператор typeof для типа object_value.

  • Исправление: устранены различные ошибки.

Изменения в njs 0.2.5

Дата выпуска: 30 октября 2018

Модули nginx:

  • Исправление: исправлен подсчет ожидающих событий в модуле stream.

  • Исправление: исправлен s.off() в модуле stream.

  • Исправление: исправлена обработка фрагментов данных в js_filter в модуле stream.

  • Исправление: исправлен геттер http status и contentType в модуле http.

  • Исправление: исправлены геттеры ответа http и родительского запроса в модуле http.

Ядро:

  • Добавление: поддержка объекта arguments.

  • Добавление: поддержка нецелых дробных чисел.

  • Улучшение: обработка значений, не являющихся массивами, в Array.prototype.slice().

  • Исправление: исправлен сеттер Array.prototype.length

  • Исправление: исправлен njs_array_alloc() для длины > 2**31.

  • Исправление: обработка целочисленного переполнения в njs_array_alloc() на 32-битных архитектурах.

  • Исправление: исправлено сообщение об ошибке несоответствия размера кода.

  • Исправление: исправлен оператор delete в цикле.

  • Исправление: исправлен Object.getOwnPropertyDescriptor() для сложного объекта (унаследованного от значений Array и string).

  • Исправление: исправлен Object.prototype.hasOwnProperty() для свойств, не являющихся объектами

  • Исправление: устранены различные ошибки.

Изменения в njs 0.2.4

Дата выпуска: 18 сентября 2018

Модули nginx:

  • Изменение: обработчики модуля stream подверглись рефакторингу.

    Новые методы и свойства: s.on(), s.off(), s.allow(), s.done(), s.decline(), s.deny().

    Удалены свойства объекта Stream: s.OK, s.ABORT, s.AGAIN, s.DECLINED, s.ERROR (заменены на s.allow(), s.done(), s.deny()).

    s.buffer (для чтения заменено аргументом data соответствующего колбэка, для записи используйте s.send()).

    s.fromUpstream (заменено колбэком для соответствующего события).

    s.eof (заменено на flags.last).

Ядро:

  • Добавление: добавлен Function.prototype.length.

  • Добавление: представлен режим изолированной среды (sandboxing).

  • Улучшение: добавлены строки исключений там, где это необходимо.

  • Улучшение: улучшены формулировки для исключений приведения примитивных типов.

  • Исправление: выбрасывание TypeError при попытках изменить замороженные свойства.

  • Исправление: исправлен Object.defineProperty() для существующих свойств.

  • Исправление: учет атрибута enumerable при итерации с помощью for in.

  • Исправление: учет атрибута writable для обработчиков свойств.

  • Исправление: исправлена обработка исключений в аргументах функции.

  • Исправление: исправлен Object.prototype.toString для различных типов значений.

  • Исправление: исправлен конструктор Object() для аргументов объектных типов.

  • Исправление: исправлено сравнение объектов и строк.

  • Исправление: исправлен String.slice() для аргументов undefined.

  • Исправление: устранены различные ошибки.

Изменения в njs 0.2.3

Дата выпуска: 31 июля 2018

Модули nginx:

  • Исправление: создание подзапроса из объекта Reply вызывало ошибку сегментации.

  • Исправление: получение свойства parent основного объекта HTTP Request вызывало ошибку сегментации.

Ядро:

  • Добавление: добавлено понятное строковое представление (pretty print) для значений.

  • Добавление: корректный вывод чисел с плавающей точкой.

  • Добавление: корректный парсинг чисел с плавающей точкой.

  • Добавление: метод String.bytesFrom() (декодирование hex, base64, base64url в байтовую строку).

  • Добавление: методы String.padStart() и String.padEnd().

  • Добавление: добавлена поддержка двоичных литералов.

  • Улучшение: добавлена информация о недопустимой лексеме при парсинге чисел.

  • Улучшение: разрешен верхний регистр для O в значениях восьмеричных литералов.

  • Улучшение: добавлена поддержка нескольких аргументов в console.log().

  • Исправление: исправлено применение call() к методам внешних значений.

  • Исправление: исправлен оператор сложения, применяемый к объекту.

  • Исправление: исправлена обработка исключений в njs_vm_value_to_ext_string().

  • Исправление: исправлен Number() с аргументами boolean, null и undefined.

  • Исправление: исправлена обработка ошибок при установке нечислового Array.length.

  • Исправление: исправлено автодополнение для глобальных объектов.

  • Исправление: устранены различные ошибки.

Изменения в njs 0.2.2

Дата выпуска: 19 июня 2018

Модули nginx:

  • Изменение: свойства HTTP Response и Reply объединены в HTTP Request. Новые элементы Request:

    • req.status (res.status)

    • req.parent (reply.parent)

    • req.requestBody (req.body)

    • req.responseBody (reply.body)

    • req.headersIn (req.headers)

    • req.headersOut (res.headers)

    • req.sendHeader() (res.sendHeader())

    • req.send() (res.send())

    • req.finish() (res.finish())

    • req.return() (res.return())

    Устаревшие элементы Request:

    • req.body (используйте req.requestBody или req.responseBody)

    • req.headers (используйте req.headersIn или req.headersOut)

    • req.response

    Устаревшие элементы Response:

    • res.contentLength (используйте req.headersOut['Content-Length'])

    • res.contentType (используйте req.headersOut['Content-Type'])

    Устаревшие свойства будут удалены в следующих релизах.

  • Добавление: метод HTTP internalRedirect().

Ядро:

  • Исправление: исправлено переполнение буфера в куче в crypto.createHmac().

Изменения в njs 0.2.1

Дата выпуска: 31 мая 2018

Модули nginx:

  • Добавление: геттер тела HTTP-запроса.

  • Улучшение: виртуальная машина njs перенесена в конфигурацию main.

  • Улучшение: улучшено логирование для директив js_set и js_content.

  • Улучшение: установка кода статуса 500 по умолчанию в обработчике js_content

  • Улучшение: добавлена отладочная информация для возвращаемого кода статуса в обработчике js_content

  • Исправление: исправлено логирование ошибок в js_include.

Ядро:

  • Добавление: добавлен сеттер длины массива.

  • Улучшение: публичный заголовочный файл cleanup. njscript.h переименован в njs.h.

  • Исправление: исправлен криптографический метод update() после вызова digest().

  • Исправление: исправлен crypto.createHmac() для ключей с размером <= размер алгоритма и > 64.

  • Исправление: исправлен JSON.stringify() для массивов с пустыми ячейками.

  • Исправление: исправлен тип исключения для неподдерживаемых типов в JSON.stringify().

  • Исправление: исправлена обработка неопределённых аргументов функций.

  • Исправление: исправлена обработка отсутствующего arg для Object.getOwnPropertyDescriptor().

  • Исправление: исправлена обработка свойств в Object.getOwnPropertyDescriptor().

  • Исправление: исправлен флаг доступности для записи свойства Array.length.

  • Исправление: исправлен тип возвращаемого значения clearTimeout().

  • Исправление: исправлен njs_vm_external_bind().

  • Исправление: исправлены различные ошибки.

Изменения в njs 0.2.0

Дата выпуска: 03 апреля 2018

  • Добавление: вывод версии njs через CLI.

  • Добавление: текстовое описание для исключений преобразования типов.

  • Добавление: методы setTimeout() и clearTimeout().
  • Добавление: кодировки hex, base64, base64url для байтовых строк.

  • Добавление: методы Crypto в стиле Node.js.

  • Добавление: методы warn() и error() для HTTP и stream.

  • Добавление: метод HTTP subrequest().

  • Добавление: метод HTTP return().

  • Исправление: исправлены различные ошибки в ядре и интерактивной оболочке.

Изменения в njs 0.1.15

Дата выпуска: 20 ноября 2017

  • Добавление: объекты Error, EvalError, InternalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError.

  • Добавление: поддержка восьмеричных литералов.

  • Добавление: методы доступа к File system в стиле Node.js: fs.readFile(), fs.readFileSync(), fs.appendFile(), fs.appendFileSync(), fs.writeFile(), fs.writeFileSync().

  • Добавление: модули nginx выводят трассировку стека при возникновении исключения.

  • Исправление: исправлены различные ошибки.

Изменения в njs 0.1.14

Дата выпуска: 09 октября 2017

  • Добавление: объект JSON.

  • Добавление: автодополнение на уровне объектов в интерактивной оболочке.

  • Добавление: различные улучшения скрипта настройки конфигурации.

  • Исправление: исправлены различные ошибки в ядре и интерактивной оболочке.

Изменения в njs 0.1.13

Дата выпуска: 31 августа 2017

  • Добавление: методы console.log() и console.help() в интерактивной оболочке.

  • Добавление: интерактивная оболочка выводит трассировку стека при возникновении исключения.

  • Добавление: интерактивная оболочка по умолчанию при доступности libedit.

  • Исправление: обработка больших файлов из stdin в режиме командной строки.

  • Исправление: улучшено обнаружение editline.

Изменения в njs 0.1.12

Дата выпуска: 08 августа 2017

  • Добавление: интерактивная оболочка.

  • Исправление: в Object.isSealed().

Изменения в njs 0.1.11

Дата выпуска: 27 июня 2017

  • Добавление: методы Object.keys(), Object.prototype.hasOwnProperty().

  • Добавление: методы Object.defineProperty(), Object.defineProperties(), Object.getOwnPropertyDescriptor().

  • Добавление: методы Object.getPrototypeOf(), Object.prototype.isPrototypeOf().

  • Добавление: методы Object.preventExtensions(), Object.isExtensible(), Object.freeze(), Object.isFrozen(), Object.seal(), Object.isSealed().

  • Добавление: поддержка литералов в экспоненциальной записи (3.35e10).

  • Добавление: поддержка шестнадцатеричных литералов (0x1123).

  • Исправление: обработка больших индексов массивов.

  • Исправление: в parseInt() и Date.parse().

Изменения в njs 0.1.10

Дата выпуска: 04 апреля 2017

  • Добавление: вложенные функции и замыкания функций.

  • Добавление: методы Array.of(), Array.prototype.fill(), Array.prototype.find(), Array.prototype.findIndex().

  • Исправление: исправлены различные ошибки и ошибки сегментации.

Изменения в njs 0.1.9

Дата выпуска: 01 февраля 2017

  • Исправление: глобальные переменные не инициализировались при использовании njs в nginx.

Изменения в njs 0.1.8

Дата выпуска: 24 января 2017

  • Изменение: принудительно включен режим strict, переменные должны объявляться явно.

  • Добавление: поддержка объявления переменных в циклах for и for-in.

  • Исправление: исправлены глобальная область видимости и область видимости функций.

  • Исправление: теперь цикл for-in не отбрасывает последнее значение переменной свойства.

  • Исправление: исправлены различные ошибки и ошибки сегментации.

Изменения в njs 0.1.7

Дата выпуска: 27 декабря 2016

  • Изменение: директива js_include запрещена на уровнях server и location.

  • Добавление: операторы возведения в степень.

  • Исправление: исправлены различные ошибки и ошибки сегментации.

Изменения в njs 0.1.6

Дата выпуска: 13 декабря 2016

  • Изменение: директива js_set запрещена на уровнях server и location.

  • Добавление: методы Math стандарта ES6.

  • Исправление: исправлены различные ошибки и ошибки сегментации.

© 2002-2021 Igor Sysoev
© 2011-2026 Nginx, Inc.
Licensed under the BSD License.
https://nginx.org/en/docs/njs/changes.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API