Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v8.4.0 proposal #14811

Merged
merged 97 commits into from
Aug 15, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
97 commits
Select commit Hold shift + click to select a range
7203924
util: implement %o and %O as formatting specifiers
gla5001 Jul 31, 2017
96147c9
test: read proper inspector message size
bzoz Aug 2, 2017
d89f9f8
inspector: allow require in Runtime.evaluate
Sep 28, 2016
f73f659
test: mitigate RegEx exceeding 80 chars
thelostone-mc Aug 3, 2017
71f2e76
test: use ciphers supported by shared OpenSSL
kapouer Aug 1, 2017
5e2cce5
n-api: optimize number API performance
jasongin Jul 19, 2017
2ee3320
test: improve multiple timers tests
jasnell Aug 4, 2017
ef8ac7b
stream: support readable/writableHWM for Duplex
guymguym Aug 4, 2017
935d34b
test: fix test-readline-interface
Azard Aug 7, 2017
574cc37
benchmark: remove unused parameters
nishijayaraj Aug 5, 2017
55aba6a
test: replace indexOf with includes
maasencioh Aug 4, 2017
30837b3
test: improve check in test-os
Trott Aug 7, 2017
06ba2da
test: fix conversion of microseconds in test
nickstanish Aug 9, 2017
a0e05e8
tools: fix tools/addon-verify.js
danbev Jul 3, 2017
e07dfff
doc: remove undef NDEBUG from addons.md
danbev Jul 3, 2017
4e15a6b
doc: fix order of AtExit callbacks in addons.md
danbev Jul 3, 2017
8433b1a
lib: use Timer.now() in readline module
Trott Aug 8, 2017
c94f346
net: use rest parameters instead of arguments
tniessen Jun 5, 2017
d3b0722
doc: add docs for AssertionError
Jul 16, 2017
5874272
test: set module loading error for aix
prakaashkpk Jul 27, 2017
2716b62
async_hooks: CHECK that resource is not empty
addaleax Aug 8, 2017
d604173
doc: clarify the position argument for fs.read
dcharbonnier Aug 3, 2017
9888bb1
doc: improve fs.read() doc text
Trott Aug 4, 2017
5d99d7d
test: add block scoping to test-readline-interface
Trott Aug 3, 2017
3f1bb0a
test: split out load-sensitive readline tests
Trott Aug 8, 2017
033773c
src: add overlooked handle to cleanup
addaleax Aug 10, 2017
0bc3124
test: properly order freeing resources in cctest
addaleax Aug 10, 2017
8ff2a5c
Revert "test: add DISABLED_ prefix to commented out test"
addaleax Aug 10, 2017
a781bb4
Revert "test: disable MultipleEnvironmentsPerIsolate"
addaleax Aug 10, 2017
c5ee34e
encoding: rudimentary TextDecoder support w/o ICU
TimothyGu Jul 30, 2017
977e228
test: make test-tls-connect checks more strict
Trott Aug 8, 2017
139b088
benchmark: Correct constructor for freelist
gareth-ellis Aug 4, 2017
2d806f4
deps: cherry-pick f19b889 from V8 upstream
alexkozy Aug 1, 2017
029567a
inspector: support extra contexts
eugeneo Apr 24, 2017
7eb9f6f
test: make totalLen snake case
danbev Aug 11, 2017
b87fae9
src: remove duplicate loop
addaleax Aug 10, 2017
d7d22ea
src: add comments for cares library init refcount
addaleax Aug 10, 2017
9bbbf12
test: remove redundant `using` in cctest
XadillaX Aug 10, 2017
0eab77c
test: allow inspector to reopen with same port
gibfahn Jul 17, 2017
917ace2
n-api: add napi_get_node_version
addaleax Aug 8, 2017
ee2ae0f
doc: expanded description of buffer.slice
vishal7201 Aug 9, 2017
f83827d
src: use local isolate instead of args.GetIsolate
danbev Aug 11, 2017
82c63a5
test: add test-benchmark-arrays
Trott Aug 10, 2017
9237ef8
src: avoid creating local data variable
danbev Aug 10, 2017
1c00875
repl: include folder extensions in autocomplete
not-an-aardvark Aug 10, 2017
1168410
util: improve util.inspect performance
BridgeAR Jul 26, 2017
a6539ec
assert: optimize code path for deepEqual Maps
BridgeAR Jul 26, 2017
0de63e6
doc: fix docs style in intl.md
watilde Aug 9, 2017
20fb690
doc: fix docs style in util.md
watilde Aug 9, 2017
268a1ff
src: mention that node options are space-separated
Aug 9, 2017
b3c1c6f
benchmark: fix and extend assert benchmarks
BridgeAR Jun 28, 2017
4811fea
doc: add missing `changes:` metadata for streams
addaleax Aug 13, 2017
9e51802
doc: add missing `changes:` metadata for util
addaleax Aug 13, 2017
e0001dc
http: move utcDate to internal/http.js
jasnell Oct 17, 2016
e84c9d7
tls: add tlsSocket.disableRenegotiation()
jasnell Nov 4, 2016
fef2aa7
deps: add nghttp2 dependency
jasnell Jul 17, 2017
9623ee0
http2: introducing HTTP/2
jasnell Jul 17, 2017
3eb61b0
http2: add tests and benchmarks
jasnell Jul 17, 2017
a49146e
http2: remove redundant return in test
jasnell Jul 17, 2017
e8cc193
http2: fix documentation nits
jasnell Jul 17, 2017
be716d0
doc: include http2.md in all.md
jasnell Jul 17, 2017
9d752d5
test: fix flakiness in test-http2-client-upload
jasnell Jul 18, 2017
97f622b
test: fix flaky test-http2-client-unescaped-path on osx
jasnell Jul 18, 2017
cd0f4c6
http2: fix abort when client.destroy inside end event
jasnell Jul 19, 2017
2620769
http2: refinement and test for socketError
jasnell Jul 19, 2017
61696f1
http2: fix socketOnTimeout and a segfault
jasnell Jul 19, 2017
8f3bbd9
http2: add range support for respondWith{File|FD}
jasnell Jul 22, 2017
b778838
http2: doc and fixes to the Compatibility API
mcollina Jul 24, 2017
7824fa0
http2: make writeHead behave like HTTP/1.
mcollina Jul 24, 2017
26e1f8e
http2: address initial pr feedback
jasnell Jul 31, 2017
3e5b07a
http2: refactor trailers API
jasnell Jul 31, 2017
9a4be4a
http2: get trailers working with the compat api
jasnell Jul 31, 2017
174ab6f
http2: use static allocated arrays
jasnell Aug 1, 2017
33b03b2
http2: minor cleanup
jasnell Aug 1, 2017
b43caf9
http2: fix documentation errors
jasnell Aug 1, 2017
f46c50b
http2: add some doc detail for invalid header chars
jasnell Aug 1, 2017
efd929e
http2: fix compilation error after V8 update
jasnell Aug 3, 2017
6a30448
http2: fix linting after rebase
jasnell Aug 3, 2017
723d1af
http2: fix flakiness in timeout
jasnell Aug 3, 2017
47bf705
http2: rename some nghttp2 stream flags
kjin Aug 5, 2017
dbb9c37
test: add crypto check to http2 tests
danbev Aug 7, 2017
1e7ddb2
doc: explain browser support of http/2 without SSL
giltayar Aug 7, 2017
af85b6e
doc: fix http2 sample code for http2.md
kakts Aug 7, 2017
dd6444d
src,http2: DRY header/trailer handling code up
addaleax Aug 8, 2017
66788fc
test: increase http2 coverage
michaalbert Aug 8, 2017
92c37fe
http2: improve perf of passing headers to C++
addaleax Aug 9, 2017
59d1d56
src: remove unused http2_socket_buffer from env
addaleax Aug 10, 2017
8a0d101
http2: use per-environment buffers
addaleax Aug 10, 2017
c5740f9
http2: name padding buffer fields
addaleax Aug 10, 2017
e4854fc
test: use regular expressions in throw assertions
vincentcn Jul 17, 2017
ac1b81a
lib: move deprecationWarned var
danbev Aug 11, 2017
6d9f94f
test: cover all HTTP methods that parser supports
oantoro Aug 11, 2017
230cb55
doc: fix header level typo
refack Aug 9, 2017
621c03a
doc: delint
refack Aug 9, 2017
1d40850
http2: fix [kInspect]() output for Http2Stream
evanlucas Aug 10, 2017
dd521d0
deps,tools: add missing nghttp2 license
addaleax Aug 13, 2017
56a0577
2017-08-15, Version 8.4.0 (Current)
addaleax Aug 13, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 57 additions & 7 deletions LICENSE
Original file line number Diff line number Diff line change
Expand Up @@ -487,8 +487,32 @@ The externally maintained libraries used by Node.js are:

- libuv, located at deps/uv, is licensed as follows:
"""
libuv is part of the Node project: http://nodejs.org/
libuv may be distributed alone under Node's license:
libuv is licensed for use as follows:

====
Copyright (c) 2015-present libuv project contributors.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
====

This license applies to parts of libuv originating from the
https://github.com/joyent/libuv repository:

====

Expand Down Expand Up @@ -537,7 +561,7 @@ The externally maintained libraries used by Node.js are:

- OpenSSL, located at deps/openssl, is licensed as follows:
"""
Copyright (c) 1998-2016 The OpenSSL Project. All rights reserved.
Copyright (c) 1998-2017 The OpenSSL Project. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
Expand Down Expand Up @@ -677,9 +701,9 @@ The externally maintained libraries used by Node.js are:
- zlib, located at deps/zlib, is licensed as follows:
"""
zlib.h -- interface of the 'zlib' general purpose compression library
version 1.2.8, April 28th, 2013
version 1.2.11, January 15th, 2017

Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler

This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
Expand Down Expand Up @@ -1017,8 +1041,7 @@ The externally maintained libraries used by Node.js are:

- ESLint, located at tools/eslint, is licensed as follows:
"""
ESLint
Copyright jQuery Foundation and other contributors, https://jquery.org/
Copyright JS Foundation and other contributors, https://js.foundation

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down Expand Up @@ -1070,3 +1093,30 @@ The externally maintained libraries used by Node.js are:
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
"""

- nghttp2, located at deps/nghttp2, is licensed as follows:
"""
The MIT License

Copyright (c) 2012, 2014, 2015, 2016 Tatsuhiro Tsujikawa
Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
"""
6 changes: 6 additions & 0 deletions benchmark/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,12 @@ directory, see [the guide on benchmarks](../doc/guides/writing-and-running-bench
Benchmarks for the <code>http</code> subsystem.
</td>
</tr>
<tr>
<td>http2</td>
<td>
Benchmarks for the <code>http2</code> subsystem.
</td>
</tr>
<tr>
<td>misc</td>
<td>
Expand Down
55 changes: 54 additions & 1 deletion benchmark/_http-benchmarkers.js
Original file line number Diff line number Diff line change
Expand Up @@ -111,10 +111,63 @@ class TestDoubleBenchmarker {
}
}

/**
* HTTP/2 Benchmarker
*/
class H2LoadBenchmarker {
constructor() {
this.name = 'h2load';
this.executable = 'h2load';
const result = child_process.spawnSync(this.executable, ['-h']);
this.present = !(result.error && result.error.code === 'ENOENT');
}

create(options) {
const args = [];
if (typeof options.requests === 'number')
args.push('-n', options.requests);
if (typeof options.clients === 'number')
args.push('-c', options.clients);
if (typeof options.threads === 'number')
args.push('-t', options.threads);
if (typeof options.maxConcurrentStreams === 'number')
args.push('-m', options.maxConcurrentStreams);
if (typeof options.initialWindowSize === 'number')
args.push('-w', options.initialWindowSize);
if (typeof options.sessionInitialWindowSize === 'number')
args.push('-W', options.sessionInitialWindowSize);
if (typeof options.rate === 'number')
args.push('-r', options.rate);
if (typeof options.ratePeriod === 'number')
args.push(`--rate-period=${options.ratePeriod}`);
if (typeof options.duration === 'number')
args.push('-T', options.duration);
if (typeof options.timeout === 'number')
args.push('-N', options.timeout);
if (typeof options.headerTableSize === 'number')
args.push(`--header-table-size=${options.headerTableSize}`);
if (typeof options.encoderHeaderTableSize === 'number') {
args.push(
`--encoder-header-table-size=${options.encoderHeaderTableSize}`);
}
const scheme = options.scheme || 'http';
const host = options.host || '127.0.0.1';
args.push(`${scheme}://${host}:${options.port}${options.path}`);
const child = child_process.spawn(this.executable, args);
return child;
}

processResults(output) {
const rex = /(\d+(?:\.\d+)) req\/s/;
return rex.exec(output)[1];
}
}

const http_benchmarkers = [
new WrkBenchmarker(),
new AutocannonBenchmarker(),
new TestDoubleBenchmarker()
new TestDoubleBenchmarker(),
new H2LoadBenchmarker()
];

const benchmarkers = {};
Expand Down
35 changes: 29 additions & 6 deletions benchmark/assert/deepequal-buffer.js
Original file line number Diff line number Diff line change
@@ -1,39 +1,62 @@
'use strict';
const common = require('../common.js');
const assert = require('assert');

const bench = common.createBenchmark(main, {
n: [1e3],
len: [1e2],
method: ['strict', 'nonstrict']
n: [1e5],
len: [1e2, 1e4],
method: [
'deepEqual',
'deepStrictEqual',
'notDeepEqual',
'notDeepStrictEqual'
]
});

function main(conf) {
const n = +conf.n;
const len = +conf.len;
var i;

const data = Buffer.allocUnsafe(len);
const data = Buffer.allocUnsafe(len + 1);
const actual = Buffer.alloc(len);
const expected = Buffer.alloc(len);
const expectedWrong = Buffer.alloc(len + 1);
data.copy(actual);
data.copy(expected);
data.copy(expectedWrong);

switch (conf.method) {
case 'strict':
case 'deepEqual':
bench.start();
for (i = 0; i < n; ++i) {
// eslint-disable-next-line no-restricted-properties
assert.deepEqual(actual, expected);
}
bench.end(n);
break;
case 'nonstrict':
case 'deepStrictEqual':
bench.start();
for (i = 0; i < n; ++i) {
assert.deepStrictEqual(actual, expected);
}
bench.end(n);
break;
case 'notDeepEqual':
bench.start();
for (i = 0; i < n; ++i) {
// eslint-disable-next-line no-restricted-properties
assert.notDeepEqual(actual, expectedWrong);
}
bench.end(n);
break;
case 'notDeepStrictEqual':
bench.start();
for (i = 0; i < n; ++i) {
assert.notDeepStrictEqual(actual, expectedWrong);
}
bench.end(n);
break;
default:
throw new Error('Unsupported method');
}
Expand Down
73 changes: 73 additions & 0 deletions benchmark/assert/deepequal-object.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
'use strict';

const common = require('../common.js');
const assert = require('assert');

const bench = common.createBenchmark(main, {
n: [1e6],
size: [1e2, 1e3, 1e4],
method: [
'deepEqual',
'deepStrictEqual',
'notDeepEqual',
'notDeepStrictEqual'
]
});

function createObj(source, add = '') {
return source.map((n) => ({
foo: 'yarp',
nope: {
bar: `123${add}`,
a: [1, 2, 3],
baz: n
}
}));
}

function main(conf) {
const size = +conf.size;
// TODO: Fix this "hack"
const n = (+conf.n) / size;
var i;

const source = Array.apply(null, Array(size));
const actual = createObj(source);
const expected = createObj(source);
const expectedWrong = createObj(source, '4');

switch (conf.method) {
case 'deepEqual':
bench.start();
for (i = 0; i < n; ++i) {
// eslint-disable-next-line no-restricted-properties
assert.deepEqual(actual, expected);
}
bench.end(n);
break;
case 'deepStrictEqual':
bench.start();
for (i = 0; i < n; ++i) {
assert.deepStrictEqual(actual, expected);
}
bench.end(n);
break;
case 'notDeepEqual':
bench.start();
for (i = 0; i < n; ++i) {
// eslint-disable-next-line no-restricted-properties
assert.notDeepEqual(actual, expectedWrong);
}
bench.end(n);
break;
case 'notDeepStrictEqual':
bench.start();
for (i = 0; i < n; ++i) {
assert.notDeepStrictEqual(actual, expectedWrong);
}
bench.end(n);
break;
default:
throw new Error('Unsupported method');
}
}
Loading