body { background: white; color: black; font-family: sans-serif; line-height: 1.4em; text-align: center; margin: 0; padding: 0; } #banner { background: black; color: #F2F2F2; line-height: 1.2em; padding: .3em 0; box-shadow: 0 5px 10px black; } #banner a { color: #00B140; } #main { text-align: left; margin: 0 auto; min-width: 32em; max-width: 64em; } #menu { float: right; width: 11em; padding: 0 .5em 1em .5em; border-left: 2px solid #DDD; } #content { margin-right: 13.5em; padding: 0 .2em 0 1.5em; } h1 { display: block; font-size: 3em; text-align: left; height: .7em; margin: 0; margin-bottom: .5em; } h1 img { width: 100%; } h2 { text-align: center; } p { text-align: justify; } table.news p { margin-top: 0; } table.news td { vertical-align: baseline; } table.news .date { text-align: right; padding-right: 0.5em; white-space: nowrap; } table.donors td { vertical-align: baseline; } table.donors li { text-align: left; } div.directive { background: #F2F2F2; line-height: 1em; margin: 1em 0 1em -1em; padding: .7em .7em .7em 1em; border-top: 2px solid #DDD; } div.directive th { padding-left: 0; padding-right: .5em; vertical-align: baseline; text-align: left; font-weight: normal; } div.directive td { vertical-align: baseline; } div.directive pre { padding: 0; margin: 0; } div.directive p { margin: .5em 0 0 .1em; font-size: .8em; } a.notrans { color: gray; text-decoration:none; } span.initial { font-size: 200%; float: left; padding-right: 10pt;} ul, ol { margin: .5em 0 1em 1em; padding: 0 .5em; } ol { list-style-position: inside; } li { text-align: justify; padding: .5em 0 0 1px; } .compact li { padding-top: 0; } dl { margin: .5em 0 1em 0; } dt { margin: .5em 0; } .compact dt { margin-bottom: .2em; } dd { margin-left: 1.5em; padding-left: 1px; text-align: justify; } td.list { background: #F2F2F2; } blockquote { margin: 1em 0 1em 1em; padding: .5em; } li blockquote, dd blockquote { margin: .7em 0; } blockquote.note { border: 1px dotted #999; line-height: 1.2em; text-align: justify; } blockquote.example { line-height: 1em; border-left: 1px solid #BBB; } blockquote.example pre { padding: 0; margin: 0; } sup { font-size: 50%; } .video { position: relative; padding-bottom: 56.25%; overflow: hidden; } .video iframe, .video object, .video embed { position: absolute; top:0; left:0; width:100%; height:100%; }
Release Date: 16 April 2024
nginx modules:
Feature:
the Server
header for outgoing header can be set.
Improvement:
validating URI and args arguments in
r.subrequest()
.
Improvement: checking for duplicate js_set variables.
Bugfix:
fixed
clear()
method of a shared dictionary without a timeout
introduced in 0.8.3.
Bugfix:
fixed
r.send()
method of a shared dictionary without a timeout
with Buffer
argument.
Core:
Feature:
added QuickJS
engine support in CLI.
Bugfix:
fixed
atob()
with non-padded base64
strings.
Release Date: 07 February 2024
nginx modules:
Bugfix:
fixed
Headers.set()
.
Bugfix:
fixed
js_set
with Buffer
values.
Bugfix:
fixed
clear()
method of a shared dictionary when a timeout is not specified.
Bugfix: fixed stub_status statistics when js_periodic is enabled.
Core:
Bugfix: fixed building with libxml2 2.12 and later.
Bugfix:
fixed Date
constructor for overflows
and with NaN
values.
Bugfix:
fixed underflow in
querystring.parse()
.
Bugfix:
fixed potential buffer overread in
String.prototype.match()
.
Bugfix:
fixed parsing of for-in
loops.
Bugfix: fixed parsing of hexadecimal, octal, and binary literals with no digits.
Release Date: 24 October 2023
nginx modules:
Feature:
introduced
console object.
The following methods were introduced:
error()
,
info()
,
log()
,
time()
,
timeEnd()
,
warn()
.
Bugfix:
fixed
HEAD
response handling with large Content-Length in
Fetch API.
Bugfix:
fixed
items()
method for a shared dictionary.
Bugfix:
fixed
delete()
method for a shared dictionary.
Core:
Feature:
extended
fs
module.
Added
fs.existsSync()
.
Bugfix:
fixed
xml
module.
Broken XML exception handling in
xml.parse()
method was fixed.
Bugfix:
fixed
Regexp.prototype.exec()
with global regexp and Unicode input.
Release Date: 12 September 2023
nginx modules:
Feature:
introduced the js_periodic
directive for
http
and
stream
that allows specifying a JS handler to run at regular intervals.
Feature:
implemented
items()
method of a
shared dictionary.
The method returns all the non-expired key-value pairs.
Bugfix:
fixed
size()
and
keys()
methods of a
shared dictionary.
Bugfix:
fixed erroneous exception in
r.internalRedirect()
introduced in 0.8.0.
Core:
Bugfix:
fixed incorrect order of keys in
Object.getOwnPropertyNames()
.
Release Date: 06 July 2023
nginx modules:
Change: removed special treatment of forbidden headers in Fetch API introduced in 0.7.10.
Change:
removed deprecated since 0.5.0
r.requestBody
and
r.responseBody
in
http
module.
Change:
throwing an exception in
r.internalRedirect()
while filtering in
http
module.
Feature:
introduced more global
nginx
properties:
ngx.build
,
ngx.conf_file_path
,
ngx.error_log_path
,
ngx.prefix
,
ngx.version
,
ngx.version_number
,
and
ngx.worker_id
.
Feature:
introduced the js_shared_dict_zone
directive for
http
and
stream
that allows declaring a dictionary shared between worker processes.
Feature:
introduced global
nginx.shared
methods and properties for working with shared dictionaries.
Improvement: added compile-time options to disable njs modules. For example, to disable libxslt-related code:
NJS_LIBXSLT=NO ./configure .. --add-module=/path/to/njs/module
Bugfix:
fixed
r.status
setter when filtering in
http
module.
Bugfix:
fixed setting of Location header in
http
module.
Core:
Change:
native methods are provided with retval
argument.
This change breaks compatibility with C extension for njs
requiring the modification of the code.
Change:
non-compliant deprecated String methods were removed.
The following methods were removed:
String.bytesFrom()
,
String.prototype.fromBytes()
,
String.prototype.fromUTF8()
,
String.prototype.toBytes()
,
String.prototype.toUTF8()
,
String.prototype.toString(
.
encoding
)
Change: removed support for building with GNU readline.
Feature:
added ES13-compliant Array
methods:
Array.from()
,
Array.prototype.toSorted()
,
Array.prototype.toSpliced()
,
Array.prototype.toReversed()
.
Feature:
added ES13-compliant TypedArray
methods:
%TypedArray%.prototype.toSorted()
,
%TypedArray%.prototype.toSpliced()
,
%TypedArray%.prototype.toReversed()
.
Feature:
added
CryptoKey
properties in
WebCrypto API.
The following properties were added:
algorithm
,
extractable
,
type
,
usages
.
Bugfix:
fixed retval
of
сrypto.getRandomValues()
.
Bugfix: fixed evaluation of computed property names with function expressions.
Bugfix: fixed implicit name for a function expression declared in arrays.
Bugfix:
fixed parsing of for-in
loops.
Bugfix:
fixed
Date.parse()
with ISO-8601 format and UTC time offset.
Release Date: 10 April 2023
nginx modules:
Bugfix:
fixed Headers()
constructor in
Fetch API.
Core:
Feature:
added
Hash.copy()
method in
crypto module.
Feature: added zlib module.
Improvement:
added support for
export {name as default}
statement.
Bugfix:
fixed Number
constructor according to the spec.
Release Date: 09 March 2023
nginx modules:
Core:
Feature: added XMLNode API to modify XML documents.
Change:
removed XML_PARSE_DTDVALID
during parsing of an XML document
due to security implications.
The issue was introduced in 0.7.10.
When XML_PARSE_DTDVALID
is enabled,
libxml2
parses and executes external entities present inside an XML document.
Bugfix:
fixed the detection of await
in arguments.
Bugfix:
fixed Error()
instance dumping
when “name
” prop is not primitive.
Bugfix:
fixed array instance with a getter
property dumping.
Bugfix:
fixed njs_object_property()
with
NJS_WHITEOUT
properties.
Bugfix:
fixed func
instance dumping
with “name
” as getter.
Bugfix: fixed attaching of a stack to an error object.
Bugfix:
fixed String.prototype.replace()
with replacement
containing “$'
”, “$`
”.
Release Date: 07 February 2023
nginx modules:
Feature:
added
Request
,
Response
,
and
Headers
ctors in
Fetch API.
Bugfix: fixed nginx logger callback for calls in the master process.
Core:
Feature: added signal support in CLI.
Feature:
added
xml
module for working with XML documents.
Feature:
extended support for symmetric and asymmetric keys in WebCrypto.
Most notably JWK
format for
importKey()
was added.
Feature:
extended support for symmetric and asymmetric keys in
WebCrypto API.
Most notably JWK
format for
importKey()
was added.
generateKey()
and
exportKey()
were also implemented.
Feature:
added
String.prototype.replaceAll()
.
Bugfix:
fixed for(expr1;
conditional syntax error handling.
Bugfix:
Object.values()
and
Object.entries()
with external objects.
Bugfix:
fixed RegExp.prototype[@@replace]()
.
Release Date: 17 November 2022
nginx modules:
Bugfix:
fixed
Fetch
Response prototype reinitialization.
When at least one js_import
directive was declared in both
HTTP
and
Stream,
ngx.fetch()
returned inapproriate response in Stream.
The bug was introduced in 0.7.7.
Core:
Bugfix:
fixed String.prototype.replace(re)
if re.exec()
returns non-flat array.
Bugfix:
fixed Array.prototype.fill()
when start
object changes this
.
Bugfix:
fixed description for
fs.mkdir()
and
fs.rmdir()
methods.
Bugfix:
fixed %TypedArray%.prototype.set(s)
when s
element changes this
.
Bugfix:
fixed Array.prototype.splice(s,d)
when d
resizes this
during eval.
Bugfix:
fixed for-in
loop with left and right hand side expressions.
Release Date: 25 October 2022
nginx modules:
Feature: added js_preload_object directive.
Feature:
added
ngx.conf_prefix
property.
Feature:
added
s.sendUpstream()
and
s.sendDownstream()
in
stream module.
Feature:
added support for HEAD
method in
Fetch API.
Improvement:
improved async
callback support for
s.send()
in
stream module.
Core:
Feature:
added name
instance property for a function object.
Feature:
added
njs.memoryStats
object.
Bugfix:
fixed
String.prototype.trimEnd()
with unicode string.
Bugfix:
fixed Object.freeze()
with fast arrays.
Bugfix:
fixed Object.defineProperty()
with fast arrays.
Bugfix:
fixed async
token as a property name of an object.
Bugfix: fixed property set instruction when key modifies base binding.
Bugfix: fixed complex assignments.
Bugfix: fixed handling of unhandled promise rejection.
Bugfix: fixed process.env when duplicate environ variables are present.
Bugfix: fixed double declaration detection in modules.
Bugfix: fixed bound function calls according to the spec.
Bugfix:
fixed break label for if
statement.
Bugfix: fixed labeled empty statements.
Release Date: 30 August 2022
nginx modules:
Feature: the number of nginx configuration contexts where js directives can be specified is extended.
HTTP:
the js_import,
js_path,
js_set, and
js_var directives
are allowed in
server
and location
contexts.
The js_content,
js_body_filter and
js_header_filter
are allowed in
if context.
Stream:
the js_import,
js_path,
js_set, and
js_var
are allowed in
server
context.
Feature:
added
r.internal
property.
Bugfix: fixed reading response body in Fetch API.
Bugfix: fixed js_fetch_timeout in stream.
Bugfix:
fixed socket leak with 0
fetch timeout.
Core:
Feature:
extended
fs
module.
Added
fs.openSync()
,
fs.promises.open()
,
fs.fstatSync()
,
fs.readSync()
,
fs.writeSync()
.
The following properties of
FileHandle
are implemented:
fd
,
read()
,
stat()
,
write()
,
close()
.
Bugfix:
fixed parseInt()
,
parseFloat()
,
Symbol.for()
with no arguments.
Release Date: 19 July 2022
nginx modules:
Feature:
improved
r.args{}
object.
Added support for multiple arguments with the same key.
Added case sensitivity for keys.
Keys and values are percent-decoded now.
Bugfix:
fixed
r.headersOut{}
setter for special headers.
Core:
Feature:
added Symbol.for()
and Symbol.keyfor()
.
Bugfix: fixed large non-decimal literals.
Bugfix:
fixed Unicode argument trimming in parseInt()
.
Bugfix:
fixed break
instruction
in try-catch
block.
Bugfix:
fixed async
function declaration in CLI.
Release Date: 21 June 2022
nginx modules:
Change: adapting to changes in nginx header structures.
Bugfix:
fixed
r.headersOut{}
special getters when value is absent.
Change:
returning undefined value instead of an empty string for
Content-Type
when the header is absent.
Core:
Bugfix: fixed catching of the exception thrown from an awaited function.
Bugfix: fixed function value initialization.
Bugfix: fixed interpreter when await fails.
Bugfix: fixed typed-array constructor when source array is changed while iterating.
Bugfix:fixed
String.prototype.replace()
with byte strings.
Bugfix: fixed template literal from producing byte-strings.
Bugfix: fixed array iterator with sparse arrays.
Bugfix: fixed memory free while converting a flat array to a slow array.
Bugfix:
properly handling NJS_DECLINE
in
promise
native functions.
Bugfix:
fixed working with an array-like object in
Promise.all()
and friends.
Release Date: 24 May 2022
nginx modules:
Feature: added extended directives for configuring Fetch API. The following directives were added for http and stream:
Change:
r.internalRedirect()
now accepts escaped URIs.
Bugfix: fixed Response parsing with more than 8 headers in Fetch API.
Core:
Feature:
added
njs.version_number
property.
Feature: added compatibility with BoringSSL for WebCrypto API.
Bugfix:
fixed
Array.prototype.sort()
when arr size is changed in a comparator.
Bugfix:
fixed
Array.prototype.slice()
with slow this
argument.
Bugfix:
fixed aggregation methods of Promise
ctor
with array-like object.
Bugfix:
fixed String.prototype.lastIndexOf()
with Unicode string as this
.
Bugfix:
fixed
JSON.parse()
when reviver
function is provided.
Bugfix:
fixed
Object.defineProperty()
when a recursive descriptor is provided.
Bugfix:
fixed Array.prototype.fill()
for typed-arrays.
Bugfix: making function expression binding immutable according to the specs.
Bugfix:
fixed redefinition of special props in
Object.defineProperty()
.
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()
when this
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.
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.
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()
and
decodeURIComponent()
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()
and
verify()
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
of async
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 with
DataView
object.
Bugfix: eliminated information leak in Buffer.from()
.
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.
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.
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.
Release Date: 15 June 2021
Core:
Feature:
added
let
and
const
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.
Release Date: 30 March 2021
nginx modules:
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.
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.
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()
with
error_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()
in
Buffer.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()
.
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
in
TextDecoder.prototype.decode()
Feature:
added support for Buffer
object in
crypto
methods.
Feature:
added support for Buffer
object in
fs
methods.
Change:
Hash.prototype.digest()
and
Hmac.prototype.digest()
now return a Buffer
instance instead of a byte string when
encoding is not provided.
Change:
fs.readFile()
and friends now return a Buffer
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-zero TypedArray
offset.
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()
and
TextEncoder()
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.
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.
Added
mkdir()
,
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.
Release Date: 19 May 2020
nginx modules:
Feature:
added support for multi-value headers in
r.headersIn{}
.
Feature:
introduced raw headers
API:
r.rawHeadersIn[]
and
r.rawHeadersOut[]
.
Feature: added TypeScript API description.
Core:
Bugfix:
fixed Array.prototype.slice()
for sparse arrays.
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 returns
undefined
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
.
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 for
fs
module.
Thanks to Artem S. Povalyukhin.
Feature:
extended fs
module.
Added
access()
,
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()
and
decodeURI()
according to the specification.
Bugfix:
fixed Number.prototype.toPrecision()
.
Bugfix:
fixed handling of space argument in
JSON.stringify()
.
Bugfix:
fixed
JSON.stringify()
with
Number()
and
String()
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 the
Date()
instance in a container.
Release Date: 21 January 2020
nginx modules:
Feature:
added Promise
support for
r.subrequest()
.
If a callback is not provided,
r.subrequest()
returns an ordinary
Promise
object
that resolves to a subrequest response object.
Change:
r.parent
property handler now returns
undefined
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).
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 of NativeErrors
.
Bugfix:
fixed
NativeError.prototype.message
properties.
Bugfix:
added conversion of
this
value to object in
Array.prototype functions
.
Bugfix:
fixed iterator for
Array.prototype.find()
and
Array.prototype.findIndex()
functions.
Bugfix:
fixed
Array.prototype.includes()
and
Array.prototype.join()
with
undefined
argument.
Bugfix:
fixed constructor
property of
Hash
and
Hmac
objects.
Bugfix:
fixed __proto__
property of getters and setters.
Bugfix:
fixed Date
object string formatting.
Bugfix:
fixed handling of
NaN
and -0
arguments in
Math.min()
and
Math.max()
.
Bugfix:
fixed Math.round()
according to the specification.
Bugfix:
reimplemented bound
functions
according to the specification.
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()
and
shift()
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
and
arguments
properties of a function instance.
Thanks to Artem S. Povalyukhin.
Release Date: 15 August 2019
Core:
Bugfix:
fixed module importing using require()
.
The bug was introduced in 0.3.4.
Bugfix:
fixed
[[SetPrototypeOf]]
.
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()
and
String.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()
and
Object.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 than 65535
and NaN
.
Bugfix:
fixed
String.prototype.toLowerCase()
and
String.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 for name
and message
.
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()
and
toLowerCase()
.
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.
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.
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
of Object
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()
.
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.
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.
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.
Release Date: 27 November 2018
Core:
Feature: making built-in prototypes mutable.
Feature: making global object mutable.
Feature:
console.time()
and
console.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
in njs_array_expand()
.
Bugfix:
fixed typeof
operator
for object_value
type.
Bugfix: miscellaneous bugs have been fixed.
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
and
contentType
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 from
Array
and
string
values).
Bugfix:
fixed
Object.prototype.hasOwnProperty()
for non-object properties
Bugfix: miscellaneous bugs have been fixed.
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 with
s.allow()
,
s.done()
,
s.deny()
).
s.buffer
(for reading replaced with data argument of
the corresponding callback, for writing use
s.send()
).
s.fromUpstream
(replaced with a callback for a corresponding event).
s.eof
(replaced with
flags.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.
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
(decoding hex
,
base64
,
base64url
into a byte string).
Feature:
String.padStart()
and
String.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.
Release Date: 19 June 2018
nginx modules:
Change:
merged HTTP Response
and Reply
into HTTP Request.
New members of 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()
)
Deprecated members of Request
:
req.body
(use req.requestBody
or req.responseBody
)
req.headers
(use req.headersIn
or req.headersOut
)
req.response
Deprecated members of Response
:
res.contentLength
(use
req.headersOut
['Content-Length']
)
res.contentType
(use req.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()
.
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 to
njs.h
.
Bugfix:
fixed crypto update()
method after
digest()
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
of
Object.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.
Release Date: 03 April 2018
Feature: reporting njs version by CLI.
Feature: textual description for type converting exceptions.
setTimeout()
and
clearTimeout()
methods.
Feature:
Byte string to
hex
,
base64
,
base64url
encodings.
Feature:
Node.js style
Crypto
methods.
Feature:
HTTP and stream
warn()
and
error()
methods.
Feature:
HTTP subrequest()
method.
Feature:
HTTP return()
method.
Bugfix: miscellaneous bugs have been fixed in the core and interactive shell.
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.
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.
Release Date: 31 August 2017
Feature:
console.log()
and
console.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.
Release Date: 08 August 2017
Feature: Interactive shell.
Bugfix:
in Object.isSealed()
.
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()
and
Date.parse()
.
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.
Release Date: 01 February 2017
Bugfix: global variables were not initialized when njs was used in nginx.
Release Date: 24 January 2017
Change:
the strict
mode is enforced,
variables must be explicitly declared.
Feature:
for
and
for-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.
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.
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.