Node v12.17.0 (LTS)

Michaël Zasso

Notable Changes

ECMAScript Modules - --experimental-modules flag removal

As of Node.js 12.17.0, the --experimental-modules flag is no longer necessary to use ECMAScript modules (ESM). However, the ESM implementation in Node.js remains experimental. As per our stability index: “The feature is not subject to Semantic Versioning rules. Non-backward compatible changes or removal may occur in any future release.” Users should be cautious when using the feature in production environments.

Unlike Node.js 14, using ESM will still emit a runtime experimental warning, either when a module is used a the application's entrypoint or the first time dynamic import() is called.

Please keep in mind that the implementation of ESM in Node.js differs from the developer experience you might be familiar with. Most transpilation workflows support features such as named exports from CommonJS module imports, optional file extensions or JSON modules that the Node.js ESM implementation does not support. It is highly likely that modules from transpiled environments will require a certain degree of refactoring to work in Node.js. It is worth mentioning that many of our design decisions were made with two primary goals. Spec compliance and Web Compatibility. It is our belief that the current implementation offers a future proof model to authoring ESM modules that paves the path to Universal JavaScript. Please read more in our documentation.

The ESM implementation in Node.js is still experimental but we do believe that we are getting very close to being able to call ESM in Node.js “stable”. Removing the flag is a huge step in that direction.

We expect to remove the warning Node.js 12 later this year, possibly in late October, when Node.js 14 will become LTS.

AsyncLocalStorage API (experimental)

The AsyncLocalStorage class has been introduced in the Async Hooks module.

This API allows keeping a context across asynchronous operations. For instance, if a sequence id is stored within an instance of AsyncLocalStorage for each HTTP request entering in a server, it will be possible to retrieve this id without having access the current HTTP request:

const http = require('http');
const { AsyncLocalStorage } = require('async_hooks');

const asyncLocalStorage = new AsyncLocalStorage();

function logWithId(msg) {
  const id = asyncLocalStorage.getStore();
  console.log(`${id !== undefined ? id : '-'}: `, msg);
}

let idSeq = 0;
http
  .createServer((req, res) => {
    asyncLocalStorage.run(idSeq++, () => {
      logWithId('start');
      // Imagine any chain of async operations here.
      setImmediate(() => {
        logWithId('finish');
        res.end();
      });
    });
  })
  .listen(8080);

In this example, the logWithId function will always know what the current request id is, even when there are multiple requests in parallel.

What can this API be used for

Use cases of this API include:

  • Logging
  • User identification
  • Performance tracking
  • Error tracking and handling
  • Much more!

Note: This API is still experimental and some methods might change in future releases of Node.js

Contributed by Vladimir de Turckheim - #26540.

REPL previews

If further input is predicable, a suggestion is inserted as preview.

The REPL now supports previews similar to the Chrome DevTools console. An input suggestion is inserted as preview in case further input is predicable. The suggestion may be accepted by either pressing <TAB> or <RIGHT> at the end of the input. On top of that, output is previewed when entering variable names or function calls that have no side effect.

image image

Check the preview in action and try it out on your own. Just access the REPL on your terminal by starting the Node.js executable without any further command.

Contributed by Ruben Bridgewater - #30907, #30811.

The REPL supports bi-directional reverse-i-search similar to ZSH. It is triggered with <ctrl> + R to search backwards and <ctrl> + S to search forwards.

Entries are accepted as soon as any button is pressed that doesn't correspond with the reverse search. Cancelling is possible by pressing escape or <ctrl> + C.

Changing the direction immediately searches for the next entry in the expected direction from the current position on.

image

Reverse-i-search in action.

Contributed by Ruben Bridgewater - #31006.

It is now possible to access former history entries very fast by writing the first characters of the formerly entered code you are looking for. Then push <UP> or <DOWN> to go through the history entries that start with those characters.

It works similar to the Fish Shell substring-based history search.

Contributed by Ruben Bridgewater - #31112.

Error monitoring

Monitoring error events

It is now possible to monitor 'error' events on an EventEmitter without consuming the emitted error by installing a listener using the symbol EventEmitter.errorMonitor:

const myEmitter = new MyEmitter();

myEmitter.on(EventEmitter.errorMonitor, err => {
  MyMonitoringTool.log(err);
});

myEmitter.emit('error', new Error('whoops!'));
// Still throws and crashes Node.js

Contributed by Gerhard Stoebich - #30932.

Monitoring uncaught exceptions

It is now possible to monitor 'uncaughtException' events without overriding the default behavior that exits the process by installing an 'uncaughtExceptionMonitor' listener:

process.on('uncaughtExceptionMonitor', (err, origin) => {
  MyMonitoringTool.logSync(err, origin);
});

// Intentionally cause an exception, but do not catch it.
nonexistentFunc();
// Still crashes Node.js

Contributed by Gerhard Stoebich - #31257.

File system APIs

New function: fs.readv

This new function (along with its sync and promisified versions) takes an array of ArrayBufferView elements and will write the data it reads sequentially to the buffers.

Contributed by Sk Sajidul Kadir - #32356.

Optional parameters in fs.read

A new overload is available for fs.read (along with its sync and promisified versions), which allows to optionally pass any of the offset, length and position parameters.

Contributed by Lucas Holmquist - #31402.

Console groupIndentation option

The Console constructor (require('console').Console) now supports different group indentations.

This is useful in case you want different grouping width than 2 spaces.

const { Console } = require('console');
const customConsole = new Console({
  stdout: process.stdout,
  stderr: process.stderr,
  groupIndentation: 10,
});

customConsole.log('foo');
// 'foo'
customConsole.group();
customConsole.log('foo');
//           'foo'

Contributed by rickyes - #32964.

maxStringLength option for util.inspect()

It is now possible to limit the length of strings while inspecting objects. This is possible by passing through the maxStringLength option similar to:

const { inspect } = require('util');

const string = inspect(['a'.repeat(1e8)], { maxStringLength: 10 });

console.log(string);
// "[ 'aaaaaaaaaa'... 99999990 more characters ]"

Contributed by rosaxny - #32392.

Stable N-API release 6

The following N-API features are now stable as part of the N-API 6 release:

Stable diagnostic reports

The Diagnostic Report feature is now stable and supports a new --report-compact flag to write the reports in a compact, single-line JSON format, more easily consumable by log processing systems than the default multi-line format designed for human consumption.

Increase of the default server headers timeout

The default value of server.headersTimeout for http and https servers was increased from 40000 to 60000 (60 seconds). This to accomodate for systems like AWS ELB that have a timeout of 60 seconds.

Contributed by Tim Costa - #30071.

Other changes

  • cli:
    • Added a --trace-sigint CLI flag that will print the current execution stack on SIGINT (legendecas) #29207.
  • crypto:
    • Various crypto APIs now support Diffie-Hellman secrets (Tobias Nießen) #31178.
  • dns:
    • Added the dns.ALL flag, that can be passed to dns.lookup() with dns.V4MAPPED to return resolved IPv6 addresses as well as IPv4 mapped IPv6 addresses (murgatroid99) #32183.
  • module
    • Added a new experimental API to interact with Source Map V3 data (Benjamin Coe) #31132.
  • worker:
    • Added support for passing a transferList along with workerData to the Worker constructor (Juan José Arboleda) #32278.

Commits

Semver-minor commits

  • [a35e88caf5] - (SEMVER-MINOR) async_hooks: merge run and exit methods (Andrey Pechkurov) #31950
  • [3eb34068a2] - (SEMVER-MINOR) async_hooks: prevent sync methods of async storage exiting outer context (Stephen Belanger) #31950
  • [22db34caa7] - (SEMVER-MINOR) async_hooks: add sync enterWith to ALS (Stephen Belanger) #31945
  • [16e8b11708] - (SEMVER-MINOR) async_hooks: introduce async-context API (Vladimir de Turckheim) #26540
  • [f7adfcc1df] - (SEMVER-MINOR) async_hooks: add executionAsyncResource (Matteo Collina) #30959
  • [984ae304f2] - (SEMVER-MINOR) build: make --without-report a no-op (Colin Ihrig) #32242
  • [e67b97ee53] - (SEMVER-MINOR) cli: allow --huge-max-old-generation-size in NODE_OPTIONS (Anna Henningsen) #32251
  • [154b18ffca] - (SEMVER-MINOR) console: support console constructor groupIndentation option (rickyes) #32964
  • [40253cc1c8] - (SEMVER-MINOR) crypto: add crypto.diffieHellman (Tobias Nießen) #31178
  • [1977136a19] - (SEMVER-MINOR) crypto: add DH support to generateKeyPair (Tobias Nießen) #31178
  • [9f85585b13] - (SEMVER-MINOR) crypto: add key type 'dh' (Tobias Nießen) #31178
  • [6ffe4ed3b5] - (SEMVER-MINOR) deps: upgrade to libuv 1.37.0 (Colin Ihrig) #32866
  • [2d7a7592ec] - (SEMVER-MINOR) deps: upgrade to libuv 1.36.0 (Colin Ihrig) #32866
  • [ae83f0f993] - (SEMVER-MINOR) deps: upgrade to libuv 1.35.0 (Colin Ihrig) #32204
  • [b7d264edaf] - (SEMVER-MINOR) dns: add dns.ALL hints flag constant (murgatroid99) #32183
  • [fd2486ea44] - (SEMVER-MINOR) doc: update stability of report features (Colin Ihrig) #32242
  • [90d35adccd] - (SEMVER-MINOR) doc,lib,src,test: make --experimental-report a nop (Colin Ihrig) #32242
  • [93226a5097] - (SEMVER-MINOR) esm: unflag --experimental-modules (Guy Bedford) #29866
  • [8c497f8969] - (SEMVER-MINOR) events: allow monitoring error events (Gerhard Stoebich) #30932
  • [a100709fa8] - (SEMVER-MINOR) fs: make parameters optional for readSync (Lucas Holmquist) #32460
  • [6601fac06a] - (SEMVER-MINOR) fs: add fs.readv() (Sk Sajidul Kadir) #32356
  • [16a913f702] - (SEMVER-MINOR) fs: make fs.read params optional (Lucas Holmquist) #31402
  • [7260ede9e6] - (SEMVER-MINOR) fs: return first folder made by mkdir recursive (Benjamin Coe) #31530
  • [a15e712ef6] - (SEMVER-MINOR) fs: allow overriding fs for streams (Robert Nagy) #29083
  • [b5983213c1] - (SEMVER-MINOR) lib: add option to disable __proto__ (Gus Caplan) #32279
  • [784fb8f08c] - (SEMVER-MINOR) module: add API for interacting with source maps (Benjamin Coe) #31132
  • [e22d853c5d] - (SEMVER-MINOR) n-api: define release 6 (Gabriel Schulhof) #32058
  • [f56c4dd933] - (SEMVER-MINOR) n-api: add napi_get_all_property_names (himself65) #30006
  • [9eeee0d9f2] - (SEMVER-MINOR) perf_hooks: add property flags to GCPerformanceEntry (Kirill Fomichev) #29547
  • [5ec9295034] - (SEMVER-MINOR) process: report ArrayBuffer memory in memoryUsage() (Anna Henningsen) #31550
  • [de3603f0a6] - (SEMVER-MINOR) process: allow monitoring uncaughtException (Gerhard Stoebich) #31257
  • [cf28afeeb6] - (SEMVER-MINOR) readline,repl: improve history up/previous (Ruben Bridgewater) #31112
  • [a0eb3e4ed2] - (SEMVER-MINOR) readline,repl: skip history entries identical to the current line (Ruben Bridgewater) #31112
  • [d7e153bddb] - (SEMVER-MINOR) readline,repl: add substring based history search (Ruben Bridgewater) #31112
  • [936c85c309] - (SEMVER-MINOR) repl: implement reverse search (Ruben Bridgewater) #31006
  • [bf9ff16412] - (SEMVER-MINOR) repl: add completion preview (Ruben Bridgewater) #30907
  • [b14440fb5c] - (SEMVER-MINOR) repl: support previews by eager evaluating input (Ruben Bridgewater) #30811
  • [0b310df532] - (SEMVER-MINOR) src: unconditionally include report feature (Colin Ihrig) #32242
  • [394487e3e8] - (SEMVER-MINOR) src: create a getter for kernel version (Juan José Arboleda) #31732
  • [4ec25b4865] - (SEMVER-MINOR) src,cli: support compact (one-line) JSON reports (Sam Roberts) #32254
  • [b038ad91f5] - (SEMVER-MINOR) src,lib: make ^C print a JS stack trace (legendecas) #29207
  • [6348fae690] - (SEMVER-MINOR) tls: expose SSL_export_keying_material (simon) #31814
  • [6aa3869688] - (SEMVER-MINOR) util: add maxStrLength option to inspect function (unknown) #32392
  • [eda6665799] - (SEMVER-MINOR) vm: add code cache support for SourceTextModule (Gus Caplan) #31278
  • [5c81b8d814] - (SEMVER-MINOR) wasi: add returnOnExit option (Colin Ihrig) #32101
  • [ca4e65273f] - (SEMVER-MINOR) worker: support MessagePort to workers data (Juan José Arboleda) #32278
  • [217e3dfea6] - (SEMVER-MINOR) worker: allow URL in Worker constructor (Antoine du HAMEL) #31664
  • [ab8f38b551] - (SEMVER-MINOR) worker: add ability to take heap snapshot from parent thread (Anna Henningsen) #31569

Semver-patch commits

  • [06d607d50f] - async_hooks: fix ctx loss after nested ALS calls (Andrey Pechkurov) #32085
  • [96d1f14005] - async_hooks: add store arg in AsyncLocalStorage (Andrey Pechkurov) #31930
  • [b4ca132254] - async_hooks: executionAsyncResource matches in hooks (Gerhard Stoebich) #31821
  • [02f99d289d] - buffer: add type check in bidirectionalIndexOf (Gerhard Stoebich) #32770
  • [b53193a33b] - buffer: mark pool ArrayBuffer as untransferable (Anna Henningsen) #32759
  • [b555a772cc] - build: fix vcbuild error for missing Visual Studio (Thomas) #32658
  • [6f1931de25] - build: remove .git folders when testing V8 (Richard Lau) #32877
  • [c0805f0cab] - build: add configure flag to build V8 with DCHECKs (Anna Henningsen) #32787
  • [60660c35ee] - build: use same flags as V8 for ASAN (Matheus Marchini) #32776
  • [26fee8b323] - build: remove .txt files from .gitignore (Rich Trott) #32710
  • [70eaba12a1] - build: remove node_report option in node.gyp (Colin Ihrig) #32242
  • [e765d597fd] - build: add missing comma in node.gyp (Colin Ihrig) #31959
  • [49ddd36f13] - build: fix building with ninja (Richard Lau) #32071
  • [e097980cfe] - build: warn upon --use-largepages config option (Gabriel Schulhof) #31103
  • [c3efd2cb9a] - build: switch realpath to pwd (Benjamin Coe) #31095
  • [0190a62f58] - build: re-introduce --use-largepages as no-op (Gabriel Schulhof)
  • [e2a090b693] - build: enable loading internal modules from disk (Gus Caplan) #31321
  • [c4da682437] - cli, report: move --report-on-fatalerror to stable (Colin Ihrig) #32496
  • [e05c29db3f] - cluster: fix error on worker disconnect/destroy (Santiago Gimeno) #32793
  • [d217b792bc] - cluster: removed unused addressType argument from constructor (Yash Ladha) #32963
  • [71bccdde76] - crypto: check DiffieHellman p and g params (Ben Noordhuis) #32739
  • [c1b767471a] - crypto: generator must be int32 in DiffieHellman() (Ben Noordhuis) #32739
  • [4236175878] - crypto: key size must be int32 in DiffieHellman() (Ben Noordhuis) #32739
  • [0847bc3788] - crypto: simplify exportKeyingMaterial (Tobias Nießen) #31922
  • [907252d4cf] - crypto: improve errors in DiffieHellmanGroup (Tobias Nießen) #31445
  • [30633acf20] - crypto: assign and use ERR_CRYPTO_UNKNOWN_CIPHER (Tobias Nießen) #31437
  • [5dab489d50] - crypto: simplify DH groups (Tobias Nießen) #31178
  • [5c0232a632] - deps: backport ICU-21081 for ICU 67.x (constexpr) (Steven R. Loomis) #33337
  • [2d76ae7497] - deps: update to ICU 67.1 (Michaël Zasso) #33337
  • [e073da095e] - deps: update to uvwasi 0.0.8 (Colin Ihrig) #33078
  • [eb33d523da] - deps: V8: backport 3f8dc4b2e5ba (Ujjwal Sharma) #32993
  • [56313daff6] - deps: V8: cherry-pick e1eac1b16c96 (Milad Farazmand) #32974
  • [65db9b210d] - deps: fix zlib compilation for CPUs without SIMD features (Anna Henningsen) #32627
  • [1b53e179b8] - deps: update zlib to upstream d7f3ca9 (Sam Roberts) #31800
  • [9a89718410] - deps: move zlib maintenance info to guides (Sam Roberts) #31800
  • [9e33f97c4e] - deps: switch to chromium's zlib implementation (Brian White) #31201
  • [322a9986fe] - dgram: make UDPWrap more reusable (Anna Henningsen) #31871
  • [ea4302bd46] - errors: drop pronouns from ERR_WORKER_PATH message (Colin Ihrig) #32285
  • [daf1d842cc] - esm: improve commonjs hint on module not found (Daniele Belardi) #31906
  • [7410e8d63a] - esm: port loader code to JS (Anna Henningsen) #32201
  • [3241aee0f7] - events: convert errorMonitor to a normal property (Gerhard Stoebich) #31848
  • [2093f13333] - fs: update validateOffsetLengthRead in utils.js (daemon1024) #32896
  • [9c18838e8e] - fs: remove unnecessary else statement (Jesus Hernandez) #32662
  • [6d6bb2a3dc] - fs: use finished over destroy w/ cb (Robert Nagy) #32809
  • [bde08377a1] - fs: fix fs.read when passing null value (himself65) #32479
  • [ebd9090240] - http: disable headersTimeout check when set to zero (Paolo Insogna) #33307
  • [a3decf5e59] - http: simplify sending header (Robert Nagy) #33200
  • [12b8345db8] - http, async_hooks: remove unneeded reference to wrapping resource (Gerhard Stoebich) #32054
  • [d60988161d] - http,https: increase server headers timeout (Tim Costa) #30071
  • [d883024884] - http2: wait for secureConnect before initializing (Benjamin Coe) #32958
  • [79e95e49f7] - inspector: only write coverage in fully bootstrapped Environments (Joyee Cheung) #32960
  • [9570644194] - lib: cosmetic change to builtinLibs list for maintainability (James M Snell) #33106
  • [6356ad42ab] - lib: fix validateport error message when allowZero is false (rickyes) #32861
  • [698e21b346] - lib: add warning on dynamic import es modules (Juan José Arboleda) #30720
  • [4dba3fcafd] - lib: unnecessary const assignment for class (Yash Ladha) #32962
  • [84571cec7e] - lib: remove unnecesary else block (David Daza) #32644
  • [5885b37bcc] - lib: created isValidCallback helper (Yash Ladha) #32665
  • [5b1c34651e] - lib: removed unused error code (Yash Ladha) #32481
  • [965452dbad] - lib: replace Array to ArrayIsArray by primordials (himself65) #32258
  • [434ca8766a] - lib: move isLegalPort to validators, refactor (James M Snell) #31851
  • [65ebfb2f12] - lib: delete dead code in SourceMap (Justin Ridgewell) #31512
  • [b1f08b8359] - module: no type module resolver side effects (Guy Bedford) #33086
  • [a1fa180079] - module: partial doc removal of --experimental-modules (Myles Borins) #32915
  • [195043f910] - module: refactor condition (Myles Borins) #32989
  • [1811a10415] - module: exports not exported for null resolutions (Guy Bedford) #32838
  • [3dc3772bb0] - module: improve error for invalid package targets (Myles Borins) #32052
  • [6489a5b1d8] - module: fix memory leak when require error occurs (Qinhui Chen) #32837
  • [b62910c851] - module: expose exports conditions to loaders (Jan Krems) #31303
  • [b62db597af] - module: port source map sort logic from chromium (Benjamin Coe) #31927
  • [4d7f9869f3] - n-api: simplify uv_idle wrangling (Ben Noordhuis) #32997
  • [d08be9c8ca] - n-api: fix false assumption on napi_async_context structures (legendecas) #32928
  • [fbd39436a0] - n-api: fix comment on expected N-API version (Michael Dawson) #32236
  • [d50fe6c1ea] - path: fix comment grammar (thecodrr) #32942
  • [8dcb22f735] - perf_hooks: remove unnecessary assignment when name is undefined (rickyes) #32910
  • [f537377957] - process: fix two overflow cases in SourceMap VLQ decoding (Justin Ridgewell) #31490
  • [7582bce58d] - readline: improve unicode support and tab completion (Ruben Bridgewater) #31288
  • [5231c84396] - readline: move charLengthLeft() and charLengthAt() (Ruben Bridgewater) #31112
  • [03efa716f0] - readline: improve getStringWidth() (Ruben Bridgewater) #31112
  • [e894eeb22d] - readline: set null as callback return in case there's no error (Ruben Bridgewater) #31006
  • [3946cadf89] - readline: small refactoring (Ruben Bridgewater) #31006
  • [0bafe087e4] - readline: update ansi-regex (Ruben Bridgewater) #30907
  • [4e9e4402c5] - readline,repl: support tabs properly (Ruben Bridgewater) #31112
  • [3903aec0b4] - repl: align preview with the actual executed code (Ruben Bridgewater) #32154
  • [709d3e5eb3] - repl: eager-evaluate input in parens (Shelley Vohr) #31943
  • [ce5c9d771c] - repl: do not preview while pasting code (Ruben Bridgewater) #31315
  • [3867f2095e] - repl: fix preview cursor position (Ruben Bridgewater) #31293
  • [ee40b67413] - repl: change preview default in case of custom eval functions (Ruben Bridgewater) #31259
  • [a4ca3787ea] - repl: activate previews for lines exceeding the terminal columns (Ruben Bridgewater) #31112
  • [a892b4d00c] - repl: improve preview length calculation (Ruben Bridgewater) #31112
  • [9abe0e32d8] - repl: use public getCursorPos() (Colin Ihrig) #31091
  • [85f8654415] - repl: fix preview of lines that exceed the terminal columns (Ruben Bridgewater) #31006
  • [47dfa22adb] - repl: fix preview bug in case of long lines (Ruben Bridgewater) #30907
  • [7131de5f77] - repl: improve completion (Ruben Bridgewater) #30907
  • [61886507ce] - repl: simplify code (Ruben Bridgewater) #30907
  • [9b893e1bee] - repl: simplify repl autocompletion (Ruben Bridgewater) #30907
  • [78dcdee35f] - repl: remove dead code (Ruben Bridgewater) #30907
  • [f588301f2d] - repl,readline: clean up code (Ruben Bridgewater) #31288
  • [8be00314a6] - repl,readline: refactor for simplicity (Ruben Bridgewater) #30907
  • [6eda28c69f] - repl,readline: refactor common code (Ruben Bridgewater) #30907
  • [f945a5e3e1] - report: fix stderr matching for fatal error (gengjiawen) #32699
  • [4b96fc522c] - report: add missing locks for report_on_fatalerror accessors (Anna Henningsen) #32535
  • [c126d28c2e] - report: handle on-fatalerror better (Harshitha KP) #32207
  • [85ef383bc5] - src: remove unused v8 Message namespace (Adrian Estrada) #33180
  • [ffca498ca2] - src: use unique_ptr for CachedData in ContextifyScript::New (Anna Henningsen) #33113
  • [b3f0417830] - src: return undefined when validation err == 0 (James M Snell) #33107
  • [1436977984] - src: crypto::UseSNIContext to use BaseObjectPtr (James M Snell) #33107
  • [6b1e2359c2] - src: separate out NgLibMemoryManagerBase (James M Snell) #33104
  • [8864353c6e] - src: remove unnecessary fully qualified names (rickyes) #33077
  • [62f29534de] - src: add AsyncWrapObject constructor template factory (Stephen Belanger) #33051
  • [08b66f223d] - src: do not compare against wide characters (Christopher Beeson) #32921
  • [60db9afde5] - src: fix empty-named env var assertion failure (Christopher Beeson) #32921
  • [b893c5b7ba] - src: assignment to valid type (Yash Ladha) #32879
  • [846d7bdbbf] - src: delete MicroTaskPolicy namespace (Juan José Arboleda) #32853
  • [05059a2469] - src: use using NewStringType (rickyes) #32843
  • [cf16cb7ed5] - src: fix null deref in AllocatedBuffer::clear (Matt Kulukundis) #32892
  • [0745f8884c] - src: remove validation of unreachable code (Juan José Arboleda) #32818
  • [9c216640d7] - src: elevate v8 namespaces (Nimit) #32872
  • [71bdcaeac7] - src: remove redundant v8::HeapSnapshot namespace (Juan José Arboleda) #32854
  • [bb1481fd23] - src: remove unused using in node_worker.cc (Daniel Bevenius) #32840
  • [8a38726826] - src: ignore GCC -Wcast-function-type for v8.h (Daniel Bevenius) #32679
  • [c26637b7da] - src: remove unused v8 Array namespace (Juan José Arboleda) #32749
  • [c0d3fc28ec] - src: sync access for report and openssl options (Sam Roberts) #32618
  • [9a010a3ea5] - src: munmap(2) upon class instance destructor (Gabriel Schulhof) #32570
  • [06953df051] - src: fix extra includes of "env.h" and "env-inl.h" (Nick Kreeger) #32293
  • [7432d0a170] - src: avoid using elevated v8 namespaces in node_perf.h (James M Snell) #32468
  • [6175a22b87] - src: avoid using elevated v8 namespaces in node_errors.h (James M Snell) #32468
  • [464ff85ddd] - src: remove loop_init_failed_ from Worker class (Anna Henningsen) #32562
  • [9f6ed724e0] - src: clean up worker thread creation code (Anna Henningsen) #32562
  • [73c55d39f3] - src: include AsyncWrap provider strings in snapshot (Anna Henningsen) #32572
  • [29eca36ea8] - src: move JSONWriter into its own file (Anna Henningsen) #32552
  • [8e3dd47db7] - src: handle report options on fatalerror (Sam Roberts) #32497
  • [e0351945bc] - src: refactoring and cleanup of node_i18n (James M Snell) #32438
  • [23f8f35022] - src: unify Linux and FreeBSD large pages implem (Gabriel Schulhof) #32534
  • [16d85d9328] - src: fix compiler warnings in node_report_module (Daniel Bevenius) #32498
  • [58aadcdacf] - src: simplify large pages mapping code (Gabriel Schulhof) #32396
  • [2da974e15e] - src: use single ObjectTemplate for TextDecoder (Anna Henningsen) #32426
  • [8f7f4e5aba] - src: avoid Isolate::GetCurrent() for platform implementation (Anna Henningsen) #32269
  • [df046dec97] - src: add debug option to report large page stats (Gabriel Schulhof) #32331
  • [43e9ae8317] - src: prefer OnScopeLeave over shared_ptr<void> (Anna Henningsen) #32247
  • [2f976d783f] - src: find .text section using dl_iterate_phdr (Gabriel Schulhof) #32244
  • [40c5d58095] - Revert "src: keep main-thread Isolate attached to platform during Dispose" (Anna Henningsen) #31853
  • [51a345674e] - src: handle NULL env scenario (Harshitha KP) #31899
  • [154da1f0d3] - src: add missing namespace using statements in node_watchdog.h (legendecas) #32117
  • [83c47b6079] - src: introduce node_sockaddr (James M Snell) #32070
  • [c979aeaf26] - src: improve handling of internal field counting (James M Snell) #31960
  • [38de40ac50] - src: do not unnecessarily re-assign uv handle data (Anna Henningsen) #31696
  • [e204dba3f3] - src: pass resource object along with InternalMakeCallback (Anna Henningsen) #32063
  • [ffefb059e2] - src: move InternalCallbackScope to StartExecution (Shelley Vohr) #31944
  • [178c682ad1] - src: start the .text section with an asm symbol (Gabriel Schulhof) #31981
  • [809d8b5036] - src: include large pages source unconditionally (Gabriel Schulhof) #31904
  • [5ea3d60db1] - src: use __executable_start for linux hugepages (Ben Noordhuis) #31547
  • [1e95bb85a9] - src: make large_pages node.cc include conditional (Denys Otrishko) #31078
  • [6dcb868a0a] - src: make --use-largepages a runtime option (Gabriel Schulhof) #30954
  • [f3fb6a11fe] - src: change GetStringWidth's expand_emoji_sequence option default (Ruben Bridgewater) #31112
  • [4f6300f804] - src: improve GetColumnWidth performance (Ruben Bridgewater) #31112
  • [98297b92f5] - src: inline SetSNICallback (Anna Henningsen) #30548
  • [ce8d8c06ac] - src: use BaseObjectPtr to store SNI context (Anna Henningsen) #30548
  • [c86883e4fe] - stream: add null check in Readable.from (Pranshu Srivastava) #32873
  • [5df8ab16f2] - stream: close iterator in Readable.from (Vadzim Zieńka) #32844
  • [c8b4ab0978] - stream: fix readable state awaitDrain increase in recursion (ran) #27572
  • [becbe9e246] - tls: move getAllowUnauthorized to internal/options (James M Snell) #32917
  • [dec8a21cc8] - tls: provide default cipher list from command line (Anna Henningsen) #32760
  • [8961d33aff] - tls: add memory tracking support to SSLWrap (Anna Henningsen) #30548
  • [1b41829828] - util: improve unicode support (Ruben Bridgewater) #31319
  • [a0b1a06fff] - util: add todo comments for inspect to add unicode support (Ruben Bridgewater) #31112
  • [e0e8a9af6f] - util,readline: NFC-normalize strings before getStringWidth (Anna Henningsen) #33052
  • [6a9f867e56] - vm: throw error when duplicated exportNames in SyntheticModule (himself65) #32810
  • [02de66a110] - vm: lazily initialize primordials for vm contexts (Joyee Cheung) #31738
  • [843a54fd33] - wasi: use free() to release preopen array (Anna Henningsen) #33110
  • [7f845e614b] - wasi: update start() behavior to match spec (Colin Ihrig) #33073
  • [e1fe0b66b5] - wasi: rename __wasi_unstable_reactor_start() (Colin Ihrig) #33073
  • [7c723af3ae] - wasi: clean up options validation (Denys Otrishko) #31797
  • [9ce6e363f4] - worker: fix process.env var empty key access (Christopher Beeson) #32921
  • [57cd7d2faa] - worker: fix type check in receiveMessageOnPort (Anna Henningsen) #32745
  • [ade4ec6f9a] - worker: runtime error on pthread creation (Harshitha KP) #32344

Documentation commits

Other commits

  • [cdf4f4875d] - benchmark: use let instead of var in worker (Daniele Belardi) #31794
  • [c572218552] - benchmark: use let instead of var in util (Daniele Belardi) #31794
  • [862aeae238] - benchmark: use let instead of var in url (Daniele Belardi) #31794
  • [e68c21f079] - benchmark: use let instead of var in tls (Daniele Belardi) #31794
  • [f3ef8946d0] - benchmark: use let instead of var in timers (Daniele Belardi) #31794
  • [33858fa917] - benchmark: use let instead of var in run.js (Daniele Belardi) #31794
  • [a05f22647a] - benchmark: use let instead of var in dns (Daniele Belardi) #31794
  • [2d7c52d729] - benchmark: use let instead of var in common.js (Daniele Belardi) #31794
  • [d205bc91d4] - benchmark: use const instead of var in async_hooks (Daniele Belardi) #31794
  • [d7f1add038] - benchmark: add no-var rule in .eslintrc.yaml (Daniele Belardi) #31794
  • [b4a6351634] - benchmark: remove special test entries (Ruben Bridgewater) #31755
  • [71397885b2] - benchmark: add test and all options and improve errors" (Ruben Bridgewater) #31755
  • [011e3dec00] - benchmark: refactor helper into a class (Ruben Bridgewater) #31755
  • [cf2ca11828] - Revert "benchmark: refactor helper into a class" (Anna Henningsen) #31722
  • [ef80c02794] - Revert "benchmark: remove special test entries" (Anna Henningsen) #31722
  • [3861c69b02] - benchmark: fix error on server close in AsyncLocalStorage benchmark (Andrey Pechkurov) #32503
  • [daf6e1702f] - benchmark: use let instead of var in zlib (Daniele Belardi) #31794
  • [6b02359dbf] - test: update c8 ignore comment (Benjamin Coe) #33151
  • [d7b13abbf8] - test: skip memory usage tests when ASAN is enabled (Anna Henningsen) #33129
  • [238353839c] - test: move test-process-title to sequential (Anna Henningsen) #33150
  • [13cae34484] - test: fix out-of-bound reads from invalid sizeof usage (Anna Henningsen) #33115
  • [08e01a12d0] - test: add missing calls to napi_async_destroy (Anna Henningsen) #33114
  • [3015887019] - test: check args on SourceTextModule cachedData (Juan José Arboleda) #32956
  • [dad82173cd] - test: mark test flaky on freebsd (Sam Roberts) #32849
  • [4ab6643abb] - test: flaky test-stdout-close-catch on freebsd (Sam Roberts) #32849
  • [60550f35ac] - test: refactor test-async-hooks-constructor (himself65) #33063
  • [83520451cc] - test: remove timers-blocking-callback (Jeremiah Senkpiel) #32870
  • [579f68c5fd] - test: better error validations for event-capture (Adrian Estrada) #32771
  • [dacd27927a] - test: refactor events tests for invalid listeners (Adrian Estrada) #32769
  • [4c67568148] - test: test-async-wrap-constructor prefer forEach (Daniel Estiven Rico Posada) #32631
  • [0bae243438] - test: mark test-child-process-fork-args as flaky on Windows (Andrey Pechkurov) #32950
  • [f181b5996a] - test: changed function to arrow function (Nimit) #32875
  • [68e3954d1a] - test: replace console.log/error() with debuglog (daemon1024) #32692
  • [c566906789] - test: only detect uname on supported os (Xu Meng) #32833
  • [50130f0e23] - test: mark cpu-prof-dir-worker flaky on all (Sam Roberts) #32828
  • [96c93113a8] - test: replace equal with strictEqual (Jesus Hernandez) #32727
  • [e839a71ca8] - test: mark test-worker-prof flaky on arm (Sam Roberts) #32826
  • [44ca47904d] - test: mark test-http2-reset-flood flaky on all (Sam Roberts) #32825
  • [271b309c91] - test: cover node entry type in perf_hooks (Julian Duque) #32751
  • [769ac24eba] - test: use symlinks to copy shells (John Kleinschmidt) #32129
  • [b3ac840b97] - test: save test file in temporary directory (Luigi Pinca) #32670
  • [c5e0615942] - test: refactor test-worker (himself65) #32509
  • [8eb6807dfe] - test: replace flag expose_internals to expose-internals (Juan José Arboleda) #32542
  • [5598dd14df] - test: fix a typo on test-fs-read-optional-params (himself65) #32461
  • [30207985cc] - test: als variant of test-timers-clearImmediate (Harshitha KP) #32303
  • [e3baee6c3d] - test: refactoring / cleanup on child-process tests (James M Snell) #32078
  • [6a0bc83370] - test: remove common.skipIfReportDisabled() (Colin Ihrig) #32242
  • [4a08b85fc8] - test: make test-memory-usage predictable (Matheus Marchini) #32239
  • [efc844d00d] - test: verify that WASI errors are rethrown (Colin Ihrig) #32157
  • [10ee89a8d5] - test: refactor and simplify test-repl-preview (Ruben Bridgewater) #32154
  • [5a8e54b6de] - test: refactor all benchmark tests to use the new test option (Ruben Bridgewater) #31755
  • [d1d22fa86e] - test: add secp224k1 check in crypto-dh-stateless (Daniel Bevenius) #31715
  • [8a044cb9ae] - test: fix flaky parallel/test-repl-history-navigation test (Ruben Bridgewater) #31708
  • [2fc72cac97] - test: fix flaky test-trace-sigint-on-idle (Anna Henningsen) #31645
  • [a4ee930d71] - test: improve logged errors (Ruben Bridgewater) #31425
  • [4aaf4075e9] - test: show child stderr output in largepages test (Ben Noordhuis) #31612
  • [2508e1321f] - test: add new scenario for async-local storage (Harshitha KP) #32082
  • [52a11544cf] - test: add GC test for disabled AsyncLocalStorage (Andrey Pechkurov) #31995
  • [98ece74dc7] - test: improve disable AsyncLocalStorage test (Andrey Pechkurov) #31998
  • [e5a64e5def] - test: fix flaky test-memory-usage (Anna Henningsen) #31602
  • [02ec03ce27] - test: cover property n-api null cases (Gabriel Schulhof) #31488
  • [733002b081] - test: skip keygen tests on arm systems (Tobias Nießen) #31178
  • [5e5d053585] - test: add repl tests to verify unicode support in previews (Ruben Bridgewater) #31112
  • [f1624bbafa] - test: add multiple repl preview tests (Ruben Bridgewater) #30907
  • [9dcf137623] - test,benchmark: fix test-benchmark-zlib (Rich Trott) #31538
  • [94e4847142] - tools: bump remark-preset-lint-node to 1.15.0 (Rich Trott) #33157
  • [58bd92aa26] - tools: update [email protected] (Rich Trott) #33072
  • [b9d9c24cfc] - tools: update broken types in type parser (Colin Ihrig) #33068
  • [3dafc1460d] - tools: fix mkcodecache when run with ASAN (Anna Henningsen) #32850
  • [1c010b41a1] - tools: update ESLint to 7.0.0-rc.0 (himself65) #33062
  • [5f79ab2239] - tools: remove unused code in doc generation tool (Rich Trott) #32913
  • [576a62688f] - tools: decrease timeout in test.py (Anna Henningsen) #32868
  • [9cf9cb436b] - tools: remove prefer-common-expectserror lint rule (Colin Ihrig) #31147

Windows 32-bit Installer: https://nodejs.org/dist/v12.17.0/node-v12.17.0-x86.msi
Windows 64-bit Installer: https://nodejs.org/dist/v12.17.0/node-v12.17.0-x64.msi
Windows 32-bit Binary: https://nodejs.org/dist/v12.17.0/win-x86/node.exe
Windows 64-bit Binary: https://nodejs.org/dist/v12.17.0/win-x64/node.exe
macOS 64-bit Installer: https://nodejs.org/dist/v12.17.0/node-v12.17.0.pkg
macOS 64-bit Binary: https://nodejs.org/dist/v12.17.0/node-v12.17.0-darwin-x64.tar.gz
Linux 64-bit Binary: https://nodejs.org/dist/v12.17.0/node-v12.17.0-linux-x64.tar.xz
Linux PPC LE 64-bit Binary: https://nodejs.org/dist/v12.17.0/node-v12.17.0-linux-ppc64le.tar.xz
Linux s390x 64-bit Binary: https://nodejs.org/dist/v12.17.0/node-v12.17.0-linux-s390x.tar.xz
AIX 64-bit Binary: https://nodejs.org/dist/v12.17.0/node-v12.17.0-aix-ppc64.tar.gz
SmartOS 64-bit Binary: https://nodejs.org/dist/v12.17.0/node-v12.17.0-sunos-x64.tar.xz
ARMv7 32-bit Binary: https://nodejs.org/dist/v12.17.0/node-v12.17.0-linux-armv7l.tar.xz
ARMv8 64-bit Binary: https://nodejs.org/dist/v12.17.0/node-v12.17.0-linux-arm64.tar.xz
Source Code: https://nodejs.org/dist/v12.17.0/node-v12.17.0.tar.gz
Other release files: https://nodejs.org/dist/v12.17.0/
Documentation: https://nodejs.org/docs/v12.17.0/api/

SHASUMS

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

a775eb37dd9bd020b5d96673390e2aa43e59953f50fda59acf1f56f3dde01716  node-v12.17.0-aix-ppc64.tar.gz
8c3b9459462b8adaa10549f4da6a5ff5cdfaf7140a8a8020a87cc96d79022cc0  node-v12.17.0-darwin-x64.tar.gz
bcd4c49389a6cbd2320d5bac3802273fcfc512ede88e659fbdec98d61ed26054  node-v12.17.0-darwin-x64.tar.xz
26e0563d944672ca8c5e7e2afdff8cc85250943f0ac6dd4691006bf71e232f15  node-v12.17.0-headers.tar.gz
6d45d920d3736459d78c42d9387344b6ca052fda84d91a764adc61353f0ae9b6  node-v12.17.0-headers.tar.xz
498eda4d6089544ec7be795fd43cb5e9ff5e7f25fc10f0ce81646990ff3163b7  node-v12.17.0-linux-arm64.tar.gz
54a0dbb203ff1700341d258cefa304bd31044bf0226e9e59a0de1128418cb5aa  node-v12.17.0-linux-arm64.tar.xz
983aa90deb81381d22189698189018813f3ae261c26bc4ddbca89d9073220f4b  node-v12.17.0-linux-armv7l.tar.gz
2c3ffb284ab4e3654481e2fcb11efdda01070c47f76f03dad93611e9c1968e38  node-v12.17.0-linux-armv7l.tar.xz
1b442db6f807c593c95986fe17775d1ffd4d073c213d2d9b9be71f09f70076b6  node-v12.17.0-linux-ppc64le.tar.gz
558492787d9aba23fa4f88acfff8ad63e3d55043a08175db5c350c7e5224ec1b  node-v12.17.0-linux-ppc64le.tar.xz
74125f1f38efd246d5cf780f79273cb2a943bd9e3e14e2e1058e30fa7206e307  node-v12.17.0-linux-s390x.tar.gz
ad1351b6e1278218f107b56a4fbd28c745a70bb470ee1c681d08d05b750cda3e  node-v12.17.0-linux-s390x.tar.xz
582b66031fafdb77b0c897eaac522d55721df49555fe45de7bc207af443c4f73  node-v12.17.0-linux-x64.tar.gz
988653492a4f422fb112421c5c9d1c140146b665b480c2b24c66fffdd0b88a88  node-v12.17.0-linux-x64.tar.xz
66140cc7b78e9e171d6f15f979516c55750039749d473d7b258cafa1a1fe571c  node-v12.17.0.pkg
ae828b1b1970eccc062b8c9997bab9a0124c945a34ca6ccc61c8ae25d8484f6a  node-v12.17.0-sunos-x64.tar.gz
f7441afd3aedb9537f557c8c17ad8ad91d5384c647bf8848ebdf9bb1448b313c  node-v12.17.0-sunos-x64.tar.xz
6198f2db36b2c76933d96919dd11e283620c3af2c2b39c2795301bc9c9ee73db  node-v12.17.0.tar.gz
ca6d9e86a7fffc95f0ac6424ae242ed03026ed1f15a96ed5ac5ae3603f6f4e33  node-v12.17.0.tar.xz
1749c9dcfceb29ad0c6ffa447f86d96efec8f97823b3b5e17940de9043113ca3  node-v12.17.0-win-x64.7z
f3a64dc6ad48577f1f81521aa144c028beb7e353d0fcd05d7b420a72a84f50fc  node-v12.17.0-win-x64.zip
d79026437e764fa090b562ca504dd6596601105b14fc564d54da4e23a1f52c06  node-v12.17.0-win-x86.7z
9ae66ef3abb38c54679d8a5d971870353a80f466a24404b5d8b880e049f5fb8c  node-v12.17.0-win-x86.zip
fcf7abaafd5dede76104527d064f88ec1f2d2131dc9a0f5387fe2c0abbd1ba94  node-v12.17.0-x64.msi
9bcf24b14c84799ee48b9a9e6bb83058e434fbb1a61d9fb59918a0c296164d26  node-v12.17.0-x86.msi
0a4e6c7abdadfeaad7391402dc7422fb3d8cfc19f4092c8ea0510e2a5b34ccfb  win-x64/node.exe
29a84d0c0dc7cc97cb3fe6aaad31cfba88ba33b662bd73187d442a7a5b86406b  win-x64/node.lib
1b9eafae94f66a4e6a7b3924990cbd0a3d757027836275a955e268bfec3b6a68  win-x64/node_pdb.7z
bdd8d911115c0cdf9669fa6d1410c4bef7489128c5c2e2a92ba5af0b4ae4db11  win-x64/node_pdb.zip
14a9f90e98b9a06d7b28f58177561b80105b476fc2884be4c9c09bac0254f75c  win-x86/node.exe
eefe19a12b21ddfece8e1c59ad7ba33b8255b66e7a23d93ddadb6a87f0f58275  win-x86/node.lib
947913d99689b970f5bc2a655feed9c391cbdf4210a156ebe2ad9893ce28ddc5  win-x86/node_pdb.7z
6869f591537ebb2bf6077ece0407eb684557a51d65f053f65ebd5d1939b08d90  win-x86/node_pdb.zip
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEj8yhP+8dDC6RAI4Jdw96mlrhVgAFAl7NIY0ACgkQdw96mlrh
VgBN+w/+LQFcjNXDBdm+D58IENmtB0gzFbpuuEhECIVnQv4i9m1DifNEWYQ7FQhl
459yYE+4m/b8OfItrU+Yh9hxSX/7hgLVyrkuVjjjNx5f0fuUwNVuUuWyFnkiAfNz
HWnDJ1b8Mw5uUu9q4c65RPGyBY89B1Ttu/RpFdAmlqIVIur98SoWfZucm9VBDoaJ
DT30Z+1OIFt2D//SDF+SXTEkodILcvup5G+0v31HulF2bGKD5yJw9sxLvuhvnTMK
rXl5Dg0onGxvSqtidBDU9UIpatnUkEXAMSWZ0iHob8K+hnT/3bfmB+RdEosI3G4G
QBF65WgijBAAf53R3A2OwNKHz2UtpXmSFDaGmtKxKodhLrTkYTiOWp4wzi4YXkEM
ExYWWIvaxsp+LIYIWqAxBT5SGWe5GIcVQdd14lxyJ5vCFjyGjO1/WqJtG+P/TR2k
elszntQx6yw8hXY/q2Ni/teexH5SwC/gPysLq6a2CWbxV4Qt7Tx4myjM/zPSJmFk
o26X0XVNoA6aoS3AreUA5ESD7BVBN8BP+Ja/hyjwnxYgBs9QkUUclJILLi3U37Kl
fPWpYTFBLacUofvAMrx5fKbaOYiQkFPXhRa3b/Af0mXAq4CctqX2imgEq8FVtry8
dL/3CzosXs26FPnt4iQ39cAHNUWpFGRJLQecqvdoYgErylJHXyI=
=NDuc
-----END PGP SIGNATURE-----