Changes
Changes with njs 0.7.3
Release Date: 12 April 2022
Core:
-
Feature: added support of module resolution callback. This feature allows the host environment to control how imported modules are loaded.
-
Bugfix: fixed backtraces while traversing imported user modules.
-
Bugfix: fixed
Array.prototype.concat()
whenthis
is a slow array. -
Bugfix: fixed frame allocation from an awaited frame.
-
Bugfix: fixed allocation of large array literals.
-
Bugfix: fixed interpreter when
toString
conversion fails.
Changes with njs 0.7.2
Release Date: 25 January 2022
Core:
-
Bugfix: fixed
Array.prototype.join()
when array is changed while iterating. -
Bugfix: fixed
Array.prototype.slice()
when array is changed while iterating. -
Bugfix: fixed
Array.prototype.concat()
when array is changed while iterating. -
Bugfix: fixed
Array.prototype.reverse()
when array is changed while iterating. -
Bugfix: fixed
Buffer.concat()
with subarrays. Thanks to Sylvain Etienne. -
Bugfix: fixed type confusion bug while resolving promises.
-
Bugfix: fixed
Function.prototype.apply()
with large array arguments. -
Bugfix: fixed recursive
async
function calls. -
Bugfix: fixed function redeclaration. The bug was introduced in 0.7.0.
Changes with njs 0.7.1
Release Date: 28 December 2021
nginx modules:
-
Change: the js_include directive deprecated since 0.4.0 was removed.
-
Change: PCRE/PCRE2-specific code was moved to the modules. This ensures that njs uses the same RegExp library as nginx.
Core:
-
Bugfix: fixed
decodeURI()
anddecodeURIComponent()
with invalid byte strings. The bug was introduced in 0.4.3. -
Bugfix: fixed heap-use-after-free in
await
frame. The bug was introduced in 0.7.0. -
Bugfix: fixed WebCrypto
sign()
andverify()
methods with OpenSSL 3.0. -
Bugfix: fixed exception throwing when RegExp match fails. The bug was introduced in 0.1.15.
-
Bugfix: fixed catching of exception thrown in
try
block ofasync
function. The bug was introduced in 0.7.0. -
Bugfix: fixed execution of
async
function in synchronous context. The bug was introduced in 0.7.0. -
Bugfix: fixed function redeclaration in CLI when interactive mode is on. The bug was introduced in 0.6.2.
-
Bugfix: fixed
typeof
operator withDataView
object. -
Bugfix: eliminated information leak in
Buffer.from()
.
Changes with njs 0.7.0
Release Date: 19 October 2021
nginx modules:
Core:
-
Feature: introduced
Async/Await
implementation. -
Feature: added WebCrypto API implementation.
-
Bugfix: fixed copying of closures for declared functions. The bug was introduced in 0.6.0.
-
Bugfix: fixed unhandled
promise
rejection in handle events. -
Bugfix: fixed Response.headers getter in Fetch API.
Changes with njs 0.6.2
Release Date: 31 August 2021
nginx modules:
-
Bugfix: fixed CPU hog when
js_filter
is registered in both directions.
Core:
-
Feature: introduced
AggregateError
implementation. -
Feature: added remaining
Promise
constructor methods. The following methods were added:Promise.all()
,Promise.allSettled()
,Promise.any()
,Promise.race()
. -
Improvement: removed recursion from code generator.
-
Bugfix: fixed rest parameter parsing without binding identifier.
-
Bugfix: fixed resolve/reject callback for
Promise.prototype.finally()
. -
Bugfix: fixed
%TypedArray%.prototype.join()
with detached buffer. -
Bugfix: fixed memory leak in interactive shell.
Changes with njs 0.6.1
Release Date: 29 June 2021
-
Bugfix: fixed
RegExpBuiltinExec()
with UTF-8 only regexps. The bug was introduced in 0.4.2. -
Bugfix: fixed parsing of export default declaration with non-assignment expressions. Thanks to Artem S. Povalyukhin.
Changes with njs 0.6.0
Release Date: 15 June 2021
Core:
-
Feature: added
let
andconst
declaration support. -
Feature: added
RegExp.prototype[Symbol.split]
. -
Feature: added sticky flag support for RegExp.
-
Bugfix: fixed heap-buffer-overflow in
String.prototype.lastIndexOf()
. -
Bugfix: fixed
RegExp.prototype.test()
according to the specification. -
Bugfix: fixed
String.prototype.split()
according to the specification. -
Bugfix: fixed use-of-uninitialized-value while tracking rejected promises.
-
Bugfix: fixed
njs.dump()
for objects with circular references.
Changes with njs 0.5.3
Release Date: 30 March 2021
nginx modules:
Changes with njs 0.5.2
Release Date: 09 March 2021
nginx modules:
-
Feature: added the
js_body_filter
directive. -
Feature: introduced the
s.status
property for Stream Session object.
Core:
-
Feature: added
njs.on
(exit
) callback support. -
Bugfix: fixed property descriptor reuse for not extensible objects. Thanks to Artem S. Povalyukhin.
-
Bugfix: fixed
Object.freeze()
and friends according to the specification. Thanks to Artem S. Povalyukhin. -
Bugfix: fixed
Function()
in CLI mode. -
Bugfix: fixed for-in iteration of typed array values. Thanks to Artem S. Povalyukhin.
Changes with njs 0.5.1
Release Date: 16 February 2021
nginx modules:
-
Feature: introduced
ngx.fetch()
method implementing Fetch API.The following properties and methods of
Response
object are implemented:arrayBuffer()
,bodyUsed
,json()
,headers
,ok
,redirect
,status
,statusText
,text()
,type
,url
.Notable limitations: only the
http://
scheme is supported, redirects are not handled.In collaboration with 洪志道 (Hong Zhi Dao).
-
Feature: added the
js_header_filter
directive. -
Bugfix: fixed processing buffered data in body filter in stream module.
Core:
-
Bugfix: fixed safe mode bypass in
Function
constructor. -
Bugfix: fixed
Date.prototype.toISOString()
with invalid date values.
Changes with njs 0.5.0
Release Date: 01 December 2020
nginx modules:
-
Feature: introduced global
ngx
object.The following methods were added:
The following properties were added:
-
ngx.INFO
,ngx.WARN
,ngx.ERR
.
-
-
Feature: added support for
Buffer
object where string is expected. -
Feature: added Buffer version of existing properties.
The following properties were added:
-
r.requestBuffer
(r.requestBody
),r.responseBuffer
(r.responseBody
),r.rawVariables
(r.variables
),s.rawVariables
(s.variables
).
The following events were added in the stream module:
-
upstream
(upload),downstream
(download).
-
-
Improvement: added aliases to existing properties.
The following properties were added:
-
Improvement: throwing an exception in
r.internalRedirect()
for a subrequest. -
Bugfix: fixed promise
r.subrequest()
witherror_page
redirect. -
Bugfix: fixed
promise
events handling.
Core:
-
Feature: added
TypeScript
definitions for built-in modules. Thanks to Jakub Jirutka. -
Feature: tracking unhandled
promise
rejection. -
Feature: added initial iterator support. Thanks to Artem S. Povalyukhin.
-
Improvement:
TypeScript
definitions are refactored. Thanks to Jakub Jirutka. -
Improvement: added forgotten support for
Object.prototype.valueOf()
inBuffer.from()
. -
Bugfix: fixed heap-use-after-free in
JSON.parse()
. -
Bugfix: fixed heap-use-after-free in
JSON.stringify()
. -
Bugfix: fixed
JSON.stringify()
for arrays resizable via getters. -
Bugfix: fixed heap-buffer-overflow for
RegExp.prototype[Symbol.replace]
. -
Bugfix: fixed returned value for
Buffer.prototype.write*
functions. -
Bugfix: fixed
querystring.stringify()
. Thanks to Artem S. Povalyukhin. -
Bugfix: fixed the catch handler for
Promise.prototype.finally()
. -
Bugfix: fixed
querystring.parse()
.
Changes with njs 0.4.4
Release Date: 29 September 2020
nginx modules:
-
Bugfix: fixed location merge.
-
Bugfix: fixed
r.httpVersion
for HTTP/2.
Core:
-
Feature: added support for numeric separators (ES12).
-
Feature: added remaining methods for
%TypedArray%.prototype
. The following methods were added:every()
,filter()
,find()
,findIndex()
,forEach()
,includes()
,indexOf()
,lastIndexOf()
,map()
,reduce()
,reduceRight()
,reverse()
,some()
. -
Feature: added
%TypedArray%
remaining methods. The following methods were added:from()
,of()
. -
Feature: added
DataView
object. -
Feature: added
Buffer
object implementation. -
Feature: added support for
ArrayBuffer
inTextDecoder.prototype.decode()
-
Feature: added support for
Buffer
object incrypto
methods. -
Feature: added support for
Buffer
object infs
methods. -
Change:
Hash.prototype.digest()
andHmac.prototype.digest()
now return aBuffer
instance instead of a byte string when encoding is not provided. -
Change:
fs.readFile()
and friends now return aBuffer
instance instead of a byte string when encoding is not provided. -
Bugfix: fixed function
prototype
property handler while setting. -
Bugfix: fixed function
constructor
property handler while setting. -
Bugfix: fixed
String.prototype.indexOf()
for byte strings. -
Bugfix: fixed
RegExpBuiltinExec()
with a global flag and byte strings. -
Bugfix: fixed
RegExp.prototype[Symbol.replace]
the when replacement value is a function. -
Bugfix: fixed
TextDecoder.prototype.decode()
with non-zeroTypedArray
offset.
Changes with njs 0.4.3
Release Date: 11 August 2020
Core:
-
Feature: added
Query String
module. -
Feature: improved
fs.mkdir()
to support recursive directory creation. Thanks to Artem S. Povalyukhin. -
Feature: improved
fs.rmdir()
to support recursive directory removal. Thanks to Artem S. Povalyukhin. -
Feature: introduced UTF-8 decoder according to WHATWG encoding spec.
-
Feature: added
TextDecoder()
andTextEncoder()
implementation. -
Bugfix: fixed parsing return statement without semicolon.
-
Bugfix: fixed
njs_number_to_int32()
for big-endian platforms. -
Bugfix: fixed unit test on big-endian platforms.
-
Bugfix: fixed regexp-literals parsing with “
=
” characters. -
Bugfix: fixed pre/post increment/decrement in assignment operations.
Changes with njs 0.4.2
Release Date: 07 July 2020
Core:
-
Feature: added
RegExp.prototype[Symbol.replace]
. -
Feature: introduced line level backtrace.
-
Feature: added
%TypedArray%.prototype.sort()
. -
Feature: extended
fs
module. Addedmkdir()
,readdir()
,rmdir()
, and friends. -
Improvement: parser refactoring.
-
Bugfix: fixed TypedScript API description for HTTP headers.
-
Bugfix: fixed TypedScript API description for
NjsByteString
type. -
Bugfix: fixed
String.prototype.repeat()
according to the specification. -
Bugfix: fixed
String.prototype.replace()
according to the specification. -
Bugfix: fixed parsing of flags for regexp literals.
-
Bugfix: fixed index generation for global objects in generator.
-
Bugfix: fixed
%TypedArray%.prototype.copyWithin()
with nonzero byte offset. -
Bugfix: fixed
Array.prototype.splice()
for sparse arrays. -
Bugfix: fixed
Array.prototype.reverse()
for sparse arrays. -
Bugfix: fixed
Array.prototype.sort()
for sparse arrays.
Changes with njs 0.4.1
Release Date: 19 May 2020
nginx modules:
-
Feature: added support for multi-value headers in
r.headersIn{}
. -
Feature: introduced
raw headers
API:r.rawHeadersIn{}
andr.rawHeadersOut{}
. -
Feature: added TypeScript API description.
Core:
-
Bugfix: fixed
Array.prototype.slice()
for sparse arrays.
Changes with njs 0.4.0
Release Date: 23 April 2020
nginx modules:
-
Feature: added support for multi-value headers in
r.headersOut{}
. -
Improvement: improved iteration over
r.headersOut{}
with special headers. -
Improvement: improved iteration over
r.headersOut{}
with duplicates. -
Change:
r.responseBody
property handler now returnsundefined
instead of throwing an exception if the response body is not available.
Core:
-
Feature: added script arguments support in CLI.
-
Feature: converting externals values to native js objects.
-
Bugfix: fixed NULL-pointer dereference in
__proto__
property handler. -
Bugfix: fixed handling of no-newline at the end of the script.
-
Bugfix: fixed
RegExp()
constructor with empty pattern and non-empty flags. -
Bugfix: fixed
String.prototype.replace()
when function returns non-string. -
Bugfix: fixed reading of pseudofiles in
fs
.
Changes with njs 0.3.9
Release Date: 03 March 2020
nginx modules:
-
Feature: added detached mode for
r.subrequest()
. Responses to detached subrequests are ignored. Unlike ordinary subrequests, a detached subrequest can be created inside a variable handler.
Core:
-
Feature: added
promises
API forfs
module. Thanks to Artem S. Povalyukhin. -
Feature: extended
fs
module. Addedaccess()
,symlink()
,unlink()
,realpath()
, and friends. Thanks to Artem S. Povalyukhin. -
Improvement: introduced memory-efficient ordinary arrays.
-
Improvement: lexer refactoring.
-
Bugfix: fixed matching of native functions in backtraces.
-
Bugfix: fixed callback invocations in
fs
module. Thanks to Artem S. Povalyukhin. -
Bugfix: fixed
Object.getOwnPropertySymbols()
. -
Bugfix: fixed heap-buffer-overflow in
njs_json_append_string()
. -
Bugfix: fixed
encodeURI()
anddecodeURI()
according to the specification. -
Bugfix: fixed
Number.prototype.toPrecision()
. -
Bugfix: fixed handling of space argument in
JSON.stringify()
. -
Bugfix: fixed
JSON.stringify()
withNumber()
andString()
objects. -
Bugfix: fixed Unicode Escaping in
JSON.stringify()
according to specification. -
Bugfix: fixed non-native module importing. Thanks to 洪志道 (Hong Zhi Dao).
-
Bugfix: fixed
njs.dump()
with theDate()
instance in a container.
Changes with njs 0.3.8
Release Date: 21 January 2020
nginx modules:
-
Feature: added
Promise
support forr.subrequest()
. If a callback is not provided,r.subrequest()
returns an ordinaryPromise
object that resolves to a subrequest response object. -
Change:
r.parent
property handler now returnsundefined
instead of throwing an exception if a parent object is not available.
Core:
-
Feature: added
Promise
support. Implemented according to the specification without:Promise.all()
,Promise.allSettled()
,Promise.race()
. -
Feature: added initial Typed-arrays support. Thanks to Tiago Natel de Moura.
-
Feature: added
ArrayBuffer
support. Thanks to Tiago Natel de Moura. -
Feature: added initial
Symbol
support. Thanks to Artem S. Povalyukhin. -
Feature: added externals support for
JSON.stringify()
. -
Feature: added
Object.is()
. Thanks to Artem S. Povalyukhin. -
Feature: added
Object.setPrototypeOf()
. Thanks to Artem S. Povalyukhin. -
Feature: introduced nullish coalescing operator.
-
Bugfix: fixed
Object.getPrototypeOf()
according to the specification. -
Bugfix: fixed
Object.prototype.valueOf()
according to the specification. -
Bugfix: fixed
JSON.stringify()
with unprintable values and replacer function. -
Bugfix: fixed operator
in
according to the specification. -
Bugfix: fixed
Object.defineProperties()
according to the specification. -
Bugfix: fixed
Object.create()
according to the specification. Thanks to Artem S. Povalyukhin. -
Bugfix: fixed
Number.prototype.toString(radix)
when fast-math is enabled. -
Bugfix: fixed
RegExp()
instance properties. -
Bugfix: fixed import segfault. Thanks to 洪志道 (Hong Zhi Dao).
Changes with njs 0.3.7
Release Date: 19 November 2019
nginx modules:
-
Improvement: refactored iteration over external objects.
Core:
-
Feature: added
Object.assign()
. -
Feature: added
Array.prototype.copyWithin()
. -
Feature: added support for labels in
console.time()
. -
Change: removed
console.help()
from CLI. -
Improvement: moved constructors and top-level objects to global object.
-
Improvement: arguments validation for configure script.
-
Improvement: refactored JSON methods.
-
Bugfix: fixed heap-buffer-overflow in
njs_array_reverse_iterator()
function. The following functions were affected:Array.prototype.lastIndexOf()
,Array.prototype.reduceRight()
. -
Bugfix: fixed
[[Prototype]]
slot ofNativeErrors
. -
Bugfix: fixed
NativeError.prototype.message
properties. -
Bugfix: added conversion of
this
value to object inArray.prototype functions
. -
Bugfix: fixed iterator for
Array.prototype.find()
andArray.prototype.findIndex()
functions. -
Bugfix: fixed
Array.prototype.includes()
andArray.prototype.join()
withundefined
argument. -
Bugfix: fixed
constructor
property ofHash
andHmac
objects. -
Bugfix: fixed
__proto__
property of getters and setters. -
Bugfix: fixed
Date
object string formatting. -
Bugfix: fixed handling of
NaN
and-0
arguments inMath.min()
andMath.max()
. -
Bugfix: fixed
Math.round()
according to the specification. -
Bugfix: reimplemented
bound
functions according to the specification.
Changes with njs 0.3.6
Release Date: 22 October 2019
nginx modules:
-
Improvement: getting special headers from
r.headersIn{}
.
Core:
-
Feature: added new
Function()
support. -
Feature: added
Number.prototype.toFixed()
. -
Feature: added
Number.prototype.toPrecision()
. -
Feature: added
Number.prototype.toExponential()
. -
Improvement: making
prototype
property of function instances writable. -
Improvement: limiting recursion depth while compiling.
-
Improvement: moving global functions to the global object.
-
Bugfix: fixed prototype mutation for object literals.
-
Bugfix: fixed heap-buffer-overflow while parsing regexp literals.
-
Bugfix: fixed integer-overflow while parsing exponent of number literals.
-
Bugfix: fixed
parseFloat()
. -
Bugfix: fixed
Array.prototype
functions according to the specification. The following functions were fixed:every
,includes
,indexOf
,filter
,find
,findIndex
,forEach
,lastIndexOf
,map
,pop
,push
,reduce
,reduceRight
,shift
,some
,unshift
. -
Bugfix: fixed handing of accessor descriptors in
Object.freeze()
. -
Bugfix: fixed
String.prototype.replace()
when first argument is not a string. -
Bugfix: fixed stack-use-after-scope in
Array.prototype.map()
. -
Bugfix:
Date.prototype.toUTCString()
format was aligned to ES9. -
Bugfix: fixed buffer overflow in
Number.prototype.toString(radix)
. -
Bugfix: fixed
Regexp.prototype.test()
for regexps with backreferences. -
Bugfix: fixed
Array.prototype.map()
for objects with nonexistent values. -
Bugfix: fixed
Array.prototype.pop()
andshift()
for sparse objects. -
Bugfix: fixed
Date.UTC()
according to the specification. -
Bugfix: fixed
Date()
constructor according to the specification. -
Bugfix: fixed type of
Date.prototype
. Thanks to Artem S. Povalyukhin. -
Bugfix: fixed
Date.prototype.setTime()
. Thanks to Artem S. Povalyukhin. -
Bugfix: fixed default number of arguments expected by built-in functions.
-
Bugfix: fixed
caller
andarguments
properties of a function instance. Thanks to Artem S. Povalyukhin.
Changes with njs 0.3.5
Release Date: 15 August 2019
Core:
-
Bugfix: fixed module importing using
require()
. The bug was introduced in 0.3.4. -
Bugfix: fixed
[[SetPrototypeOf]]
.
Changes with njs 0.3.4
Release Date: 13 August 2019
Core:
-
Feature: added
Object
shorthand methods and computed property names. Thanks to 洪志道 (Hong Zhi Dao) and Artem S. Povalyukhin. -
Feature: added getter/setter literal support. Thanks to 洪志道 (Hong Zhi Dao) and Artem S. Povalyukhin.
-
Feature: added
fs.renameSync()
. -
Feature: added
String.prototype.trimEnd()
andString.prototype.trimStart()
. -
Improvement: added memory-sanitizer support.
-
Improvement: Unicode case tables updated to version 12.1.
-
Improvement: added UTF8 validation for string literals.
-
Bugfix: fixed reading files with zero size in
fs.readFileSync()
. -
Bugfix: extended the list of space separators in
String.prototype.trim()
. -
Bugfix: fixed using of uninitialized value in
String.prototype.padStart()
. -
Bugfix: fixed
String.prototype.replace()
for$0
and$&
replacement string. -
Bugfix: fixed
String.prototype.replace()
for byte strings with regex argument. -
Bugfix: fixed global match in
String.prototype.replace()
with regexp argument. -
Bugfix: fixed
Array.prototype.slice()
for primitive types. -
Bugfix: fixed heap-buffer-overflow while importing module.
-
Bugfix: fixed UTF-8 character escaping.
-
Bugfix: fixed
Object.values()
andObject.entries()
for shared objects. -
Bugfix: fixed uninitialized memory access in
String.prototype.match()
. -
Bugfix: fixed
String.prototype.match()
for byte strings with regex argument. -
Bugfix: fixed
Array.prototype.lastIndexOf()
with undefined arguments. -
Bugfix: fixed
String.prototype.substring()
with empty substring. -
Bugfix: fixed invalid memory access in
String.prototype.substring()
. -
Bugfix: fixed
String.fromCharCode()
for code points more than65535
andNaN
. -
Bugfix: fixed
String.prototype.toLowerCase()
andString.prototype.toUpperCase()
. -
Bugfix: fixed
Error()
constructor with no arguments. -
Bugfix: fixed
in
operator for values with accessor descriptors. -
Bugfix: fixed
Object.defineProperty()
for non-boolean descriptor props. -
Bugfix: fixed
Error.prototype.toString()
with UTF8 string properties. -
Bugfix: fixed
Error.prototype.toString()
with non-string values forname
andmessage
.
Changes with njs 0.3.3
Release Date: 25 June 2019
nginx modules:
-
Improvement: getting of special response headers in
r.headersOut{}
. -
Improvement: working with unknown methods in
r.subrequest()
. -
Improvement: added support for null as a second argument of
r.subrequest()
. -
Bugfix: fixed processing empty output chain in stream body filter.
Core:
-
Feature: added runtime support for property getter/setter. Thanks to 洪志道 (Hong Zhi Dao) and Artem S. Povalyukhin.
-
Feature: added
process
global object. -
Feature: writable most of built-in properties and methods.
-
Feature: added generic implementation of
Array.prototype.fill()
. -
Bugfix: fixed integer-overflow in
String.prototype.concat()
. -
Bugfix: fixed setting of object properties.
-
Bugfix: fixed
Array.prototype.toString()
. -
Bugfix: fixed
Date.prototype.toJSON()
. -
Bugfix: fixed overwriting “constructor” property of built-in prototypes.
-
Bugfix: fixed processing of invalid surrogate pairs in strings.
-
Bugfix: fixed processing of invalid surrogate pairs in JSON strings.
-
Bugfix: fixed heap-buffer-overflow in
toUpperCase()
andtoLowerCase()
. -
Bugfix: fixed escaping lone closing square brackets in
RegExp()
constructor. -
Bugfix: fixed handling zero byte characters inside RegExp pattern strings.
-
Bugfix: fixed
String.prototype.toBytes()
for ASCII strings. -
Bugfix: fixed truth value of JSON numbers in
JSON.parse()
. -
Bugfix: fixed use-of-uninitialized-value in
njs_string_replace_join()
. -
Bugfix: fixed
parseInt('-0')
. Thanks to Artem S. Povalyukhin.
Changes with njs 0.3.2
Release Date: 21 May 2019
Core:
-
Feature: added support for template literals. Thanks to 洪志道 (Hong Zhi Dao) and Artem S. Povalyukhin.
-
Feature: executing command from command line arguments.
-
Feature: added support for RegExp
groups
object (ES9). -
Feature: added block scoped function definitions support.
-
Feature: added support for building with GNU Readline library.
-
Feature: made configurable
length
,name
, and most of built-in methods. -
Feature: made all constructor properties configurable.
-
Bugfix: fixed
Regexp.prototype.exec()
for Unicode-only regexps. -
Bugfix: fixed
njs_vm_value_dump()
for empty string values. -
Bugfix: fixed RegExp constructor for regexp value arguments.
-
Bugfix: fixed walking over prototypes chain during iteration over an object.
-
Bugfix: fixed overflow in
Array.prototype.concat()
. -
Bugfix: fixed length calculation for UTF-8 string with escape characters.
-
Bugfix: fixed parsing surrogate pair presents as UTF-16 escape sequences.
-
Bugfix: fixed processing the “*” quantifier for
String.prototype.match()
. -
Bugfix: fixed
Date()
constructor with one argument. -
Bugfix: fixed arrays expansion.
-
Bugfix: fixed heap-buffer-overflow in
String.prototype.replace()
. -
Bugfix: fixed heap-buffer-overflow in
String.prototype.lastIndexOf()
. -
Bugfix: fixed regexp literals parsing with escaped backslash and backslash in square brackets.
-
Bugfix: fixed regexp literals with lone closing brackets.
-
Bugfix: fixed uninitialized-memory-access in
Object.defineProperties()
. -
Bugfix: fixed processing the “*” quantifier for
String.prototype.replace()
. -
Bugfix: fixed
Array.prototype.slice()
for UTF8-invalid byte strings. -
Bugfix: fixed
String.prototype.split()
for UTF8-invalid byte strings. -
Bugfix: fixed handling of empty block statements.
Changes with njs 0.3.1
Release Date: 16 April 2019
Core:
-
Feature: added arrow functions support. Thanks to 洪志道 (Hong Zhi Dao) and Artem S. Povalyukhin.
-
Feature: added
Object.getOwnPropertyNames()
. Thanks to Artem S. Povalyukhin. -
Feature: added
Object.getOwnPropertyDescriptors()
. Thanks to Artem S. Povalyukhin. -
Feature: making
__proto__
accessor descriptor ofObject
instances mutable. -
Feature: added shebang support in CLI.
-
Feature: added support for module mode execution in CLI. In module mode global, this is unavailable.
-
Bugfix: fixed editline detection.
-
Bugfix: fixed
Function.prototype.bind()
. Thanks to 洪志道 (Hong Zhi Dao). -
Bugfix: fixed checking of duplication of parameters for functions. Thanks to 洪志道 (Hong Zhi Dao).
-
Bugfix: fixed function declaration with the same name as a variable. Thanks to 洪志道 (Hong Zhi Dao).
-
Improvement: code related to parsing of objects, variables and functions is refactored. Thanks to 洪志道 (Hong Zhi Dao).
-
Improvement: large-value output improved in
console.log()
. -
Improvement: string output improved in
console.log()
in a compliant way (without escaping and quotes). -
Improvement: using ES6 version of
ToInt32()
,ToUint32()
,ToLength()
.
Changes with njs 0.3.0
Release Date: 26 March 2019
nginx modules:
-
Change: returning undefined value instead of empty strings for absent properties in the following objects:
r.args{}
,r.headersIn{}
,r.headersOut{}
,r.variables{}
,s.variables{}
. -
Change: returning undefined value instead of throwing an exception for
r.requestBody
when request body is unavailable. -
Bugfix: fixed crash while iterating over
r.args{}
when a value is absent in a key-value pair.
Core:
-
Feature: added initial ES6 modules support. Default import and default export statements are supported. Thanks to 洪志道 (Hong Zhi Dao).
-
Feature: added
Object.prototype.propertyIsEnumerable()
. -
Feature: reporting file name and function name in disassembler output.
-
Bugfix: fixed function redeclarations in interactive shell. Thanks to 洪志道 (Hong Zhi Dao).
-
Bugfix: fixed RegExp literals parsing.
-
Bugfix: fixed setting length of UTF8 string in
fs.readFileSync()
. -
Bugfix: fixed
nxt_file_dirname()
for paths with no dir component.
Changes with njs 0.2.8
Release Date: 26 February 2019
nginx modules:
-
Change: properties of HTTP request deprecated in 0.2.2 are removed.
-
Feature: added support for delete operation in
r.headersOut{}
. -
Feature: added support for setting nginx variables.
-
Bugfix: fixed
r.subrequest()
for empty body value. -
Improvement: setting special response headers in
r.headersOut{}
.
Core:
-
Feature: added labels support.
-
Feature: added
setImmediate()
method. -
Feature: added support for shorthand property names for Object literals.
-
Bugfix: fixed
Function.prototype.bind()
. -
Bugfix: fixed parsing of string literals containing newline characters.
-
Bugfix: fixed line number in reporting variable reference errors.
-
Bugfix: fixed creation of long UTF8 strings.
-
Bugfix: fixed setting special response headers in
String.prototype.split()
for Unicode strings. -
Bugfix: fixed heap-buffer-overflow in
String.prototype.split()
. -
Bugfix: fixed
Array.prototype.fill()
. Thanks to Artem S. Povalyukhin. -
Improvement: code related to function invocation is refactored. Thanks to 洪志道 (Hong Zhi Dao).
-
Improvement: code related to variables is refactored. Thanks to 洪志道 (Hong Zhi Dao).
-
Improvement: parser is refactored. Thanks to 洪志道 (Hong Zhi Dao).
-
Improvement: reporting filenames in exceptions.
Changes with njs 0.2.7
Release Date: 25 December 2018
Core:
-
Feature: rest parameters syntax (destructuring is not supported). Thanks to Alexander Pyshchev.
-
Feature: added
Object.entries()
method. -
Feature: added
Object.values()
method. -
Improvement: code generator refactored and simplified.
-
Bugfix: fixed automatic semicolon insertion.
-
Bugfix: fixed assignment expression from compound assignment.
-
Bugfix: fixed comparison of Byte and UTF8 strings.
-
Bugfix: fixed type of iteration variable in for-in with array values.
-
Bugfix: fixed building on platforms without librt.
-
Bugfix: miscellaneous bugs have been fixed.
Changes with njs 0.2.6
Release Date: 27 November 2018
Core:
-
Feature: making built-in prototypes mutable.
-
Feature: making global object mutable.
-
Feature:
console.time()
andconsole.timeEnd()
methods. -
Feature: allowing variables and functions to be redeclared.
-
Feature: extending
Object.defineProperty()
spec conformance. -
Feature: introduced quiet mode for CLI to handle simple expressions from stdin.
-
Feature: introduced compact form of backtraces to handle stack overflows.
-
Improvement: improved wording for various exceptions.
-
Bugfix: fixed closure values handling.
-
Bugfix: fixed equality operator for various value types.
-
Bugfix: fixed handling of “this” keyword in various scopes.
-
Bugfix: fixed handling non-object values in
Object.keys()
. -
Bugfix: fixed parsing of throw statement inside
if
statement. -
Bugfix: fixed parsing of newline after throw statement.
-
Bugfix: fixed parsing of statements in if statement without newline.
-
Bugfix: fixed size
uint32_t
overflow innjs_array_expand()
. -
Bugfix: fixed
typeof
operator forobject_value
type. -
Bugfix: miscellaneous bugs have been fixed.
Changes with njs 0.2.5
Release Date: 30 October 2018
nginx modules:
-
Bugfix: fixed counting pending events in stream module.
-
Bugfix: fixed
s.off()
in stream module. -
Bugfix: fixed processing of data chunks in
js_filter
in stream module. -
Bugfix: fixed http
status
andcontentType
getter in http module. -
Bugfix: fixed http response and parent getters in http module.
Core:
-
Feature: arguments object support.
-
Feature: non-integer fractions support.
-
Improvement: handling non-array values in
Array.prototype.slice()
. -
Bugfix: fixed
Array.prototype.length
setter -
Bugfix: fixed
njs_array_alloc()
for length > 2**31. -
Bugfix: handling int overflow in
njs_array_alloc()
on 32bit archs. -
Bugfix: fixed code size mismatch error message.
-
Bugfix: fixed delete operator in a loop.
-
Bugfix: fixed
Object.getOwnPropertyDescriptor()
for complex object (inherited fromArray
andstring
values). -
Bugfix: fixed
Object.prototype.hasOwnProperty()
for non-object properties -
Bugfix: miscellaneous bugs have been fixed.
Changes with njs 0.2.4
Release Date: 18 September 2018
nginx modules:
-
Change: stream module handlers refactored.
New methods and properties:
s.on()
,s.off()
,s.allow()
,s.done()
,s.decline()
,s.deny()
.Removed properties of the Stream object:
s.OK
,s.ABORT
,s.AGAIN
,s.DECLINED
,s.ERROR
(replaced withs.allow()
,s.done()
,s.deny()
).s.buffer
(for reading replaced with data argument of the corresponding callback, for writing uses.send()
).s.fromUpstream
(replaced with a callback for a corresponding event).s.eof
(replaced withflags.last
).
Core:
-
Feature: added
Function.prototype.length
. -
Feature: introduced sandboxing mode.
-
Improvement: added exception strings where appropriate.
-
Improvement: improved wording for primitive type conversion exception.
-
Bugfix: throwing
TypeError
for attempts to change frozen properties. -
Bugfix: fixed
Object.defineProperty()
for existing properties. -
Bugfix: respecting the enumerable attribute while iterating by for in.
-
Bugfix: respecting writable attribute for property handlers.
-
Bugfix: fixed exception handling in arguments of a function.
-
Bugfix: fixed
Object.prototype.toString
for different value types. -
Bugfix: fixed
Object()
constructor for object types arguments. -
Bugfix: fixed comparison of objects and strings.
-
Bugfix: fixed
String.slice()
for undefined arguments. -
Bugfix: miscellaneous bugs have been fixed.
Changes with njs 0.2.3
Release Date: 31 July 2018
nginx modules:
-
Bugfix: making a subrequest from a
Reply
object caused a segmentation fault. -
Bugfix: getting the parent property of the main HTTP Request object caused a segmentation fault.
Core:
-
Feature: added the pretty string representation for values.
-
Feature: correctly printing floating point numbers.
-
Feature: correctly parsing floating point numbers.
-
Feature:
String.bytesFrom()
method (decodinghex
,base64
,base64url
into a byte string). -
Feature:
String.padStart()
andString.padEnd()
methods. -
Feature: added support of binary literals.
-
Improvement: added information about illegal token in number parsing.
-
Improvement: allowed uppercased
O
in octal literal values. -
Improvement: added support for multiple arguments in
console.log()
. -
Bugfix: fixed applying
call()
to methods of external values. -
Bugfix: fixed addition operator applied to an object.
-
Bugfix: fixed exception handling in
njs_vm_value_to_ext_string()
. -
Bugfix: fixed
Number()
with boolean, null and undefined arguments. -
Bugfix: fixed error handling of setting non-numeric
Array.length
. -
Bugfix: fixed autocompletion for global objects.
-
Bugfix: miscellaneous bugs have been fixed.
Changes with njs 0.2.2
Release Date: 19 June 2018
nginx modules:
-
Change: merged HTTP
Response
andReply
into HTTP Request. New members ofRequest
:-
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()
)
Deprecated members of
Request
:-
req.body
(usereq.requestBody
orreq.responseBody
) -
req.headers
(usereq.headersIn
orreq.headersOut
) -
req.response
Deprecated members of
Response
:-
res.contentLength
(usereq.headersOut
['Content-Length']
) -
res.contentType
(usereq.headersOut
['Content-Type']
)
The deprecated properties will be removed in next releases.
-
-
Feature: HTTP internalRedirect() method.
Core:
-
Bugfix: fixed heap-buffer-overflow in
crypto.createHmac()
.
Changes with njs 0.2.1
Release Date: 31 May 2018
nginx modules:
-
Feature: HTTP request body getter.
-
Improvement: moved njs vm to the
main
configuration. -
Improvement: improved logging for js_set and js_content directives.
-
Improvement: setting status code to 500 by default in the js_content handler
-
Improvement: added the debug for the returned status code in js_content handler
-
Bugfix: fixed error logging in js_include.
Core:
-
Feature: added array length setter.
-
Improvement: public header
cleanup. njscript.h
is renamed tonjs.h
. -
Bugfix: fixed crypto
update()
method afterdigest()
is called. -
Bugfix: fixed
crypto.createHmac()
for keys with size <= alg size and > 64. -
Bugfix: fixed
JSON.stringify()
for arrays with empty cells. -
Bugfix: fixed exception type for unsupported types in
JSON.stringify()
. -
Bugfix: fixed handling of undefined arguments of functions.
-
Bugfix: fixed handling of missing
arg
ofObject.getOwnPropertyDescriptor()
. -
Bugfix: fixed handling of properties in
Object.getOwnPropertyDescriptor()
. -
Bugfix: fixed the writeable flag of
Array.length
property. -
Bugfix: fixed return value type of
clearTimeout()
. -
Bugfix: fixed
njs_vm_external_bind()
. -
Bugfix: miscellaneous bugs have been fixed.
Changes with njs 0.2.0
Release Date: 03 April 2018
-
Feature: reporting njs version by CLI.
-
Feature: textual description for type converting exceptions.
-
Feature:
setTimeout()
andclearTimeout()
methods. -
Feature: Byte string to
hex
,base64
,base64url
encodings. -
Feature: Node.js style
Crypto
methods. -
Feature: HTTP and stream
warn()
anderror()
methods. -
Feature: HTTP
subrequest()
method. -
Feature: HTTP
return()
method. -
Bugfix: miscellaneous bugs have been fixed in the core and interactive shell.
Changes with njs 0.1.15
Release Date: 20 November 2017
-
Feature:
Error
,EvalError
,InternalError
,RangeError
,ReferenceError
,SyntaxError
,TypeError
,URIError
objects. -
Feature: octal literals support.
-
Feature: Node.js style
File system
access methods:fs.readFile()
,fs.readFileSync()
,fs.appendFile()
,fs.appendFileSync()
,fs.writeFile()
,fs.writeFileSync()
. -
Feature: nginx modules print backtrace on exception.
-
Bugfix: miscellaneous bugs have been fixed.
Changes with njs 0.1.14
Release Date: 09 October 2017
-
Feature: JSON object.
-
Feature: object level completions in interactive shell.
-
Feature: various configure improvements.
-
Bugfix: miscellaneous bugs have been fixed in the core and interactive shell.
Changes with njs 0.1.13
Release Date: 31 August 2017
-
Feature:
console.log()
andconsole.help()
methods in interactive shell. -
Feature: interactive shell prints backtrace on exception.
-
Feature: interactive shell by default if
libedit
is available. -
Bugfix: processing of large files from
stdin
in command line mode. -
Bugfix: improved
editline
detection.
Changes with njs 0.1.12
Release Date: 08 August 2017
-
Feature: Interactive shell.
-
Bugfix: in
Object.isSealed()
.
Changes with njs 0.1.11
Release Date: 27 June 2017
-
Feature:
Object.keys()
,Object.prototype.hasOwnProperty()
methods. -
Feature:
Object.defineProperty()
,Object.defineProperties()
,Object.getOwnPropertyDescriptor()
methods. -
Feature:
Object.getPrototypeOf()
,Object.prototype.isPrototypeOf()
methods. -
Feature:
Object.preventExtensions()
,Object.isExtensible()
,Object.freeze()
,Object.isFrozen()
,Object.seal()
,Object.isSealed()
methods. -
Feature: scientific notation (
3.35e10
) literals support. -
Feature: hexadecimal (
0x1123
) literals support. -
Bugfix: processing of large array indexes.
-
Bugfix: in
parseInt()
andDate.parse()
.
Changes with njs 0.1.10
Release Date: 04 April 2017
-
Feature: nested functions and function closures.
-
Feature:
Array.of()
,Array.prototype.fill()
,Array.prototype.find()
,Array.prototype.findIndex()
methods. -
Bugfix: miscellaneous bugs and segmentation faults have been fixed.
Changes with njs 0.1.9
Release Date: 01 February 2017
-
Bugfix: global variables were not initialized when njs was used in nginx.
Changes with njs 0.1.8
Release Date: 24 January 2017
-
Change: the
strict
mode is enforced, variables must be explicitly declared. -
Feature:
for
andfor-in
loops support variable declaration. -
Bugfix: global and function scopes have been fixed.
-
Bugfix: now
for-in
loop does not discard the last value of property variable. -
Bugfix: miscellaneous bugs and segmentation faults have been fixed.
Changes with njs 0.1.7
Release Date: 27 December 2016
-
Change: the js_include directive has been disabled at server and location levels.
-
Feature: exponentiation operators.
-
Bugfix: miscellaneous bugs and segmentation faults have been fixed.
Changes with njs 0.1.6
Release Date: 13 December 2016
-
Change: the js_set directive has been disabled at server and location levels.
-
Feature: ES6
Math
methods. -
Bugfix: miscellaneous bugs and segmentation faults have been fixed.