From 281eb707802bc4e47e490873f34ea924966478d1 Mon Sep 17 00:00:00 2001 From: Adrien Joly <531781+adrienjoly@users.noreply.github.com> Date: Fri, 25 Mar 2022 19:12:05 +0100 Subject: [PATCH] feat(TableParser): Add `getCleanMatrix()` method (#113) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem As seen in https://github.com/adrienjoly/npm-pdfreader-example/blob/master/parseTable.js, it's complicated to render a table that was parsed from a PDF file using `TableParser`. The existing `getMatrix()` method returned a 3-dimension matrix instead of a 2-dimension one, because there can be more than one textual item per column. (e.g. when a word is splitted into 2 items, for some reason) ## Proposed solution Add a `getCleanMatrix()` method that returns a 2-dimension matrix that can be used with `console.table()`. ## Example of use ```js // the thresholds were determined manually, based on the horizontal position (x) for column headers const colThresholds = [6.8, 9.5, 13.3, 16.7, 18.4, 28, 32, 36, Infinity]; const columnQuantitizer = (item) => { return colThresholds.findIndex( (colThreshold) => parseFloat(item.x) < colThreshold ); }; const table = new lib.TableParser(); new PdfReader().parseFileItems("./test/sample-table.pdf", (err, item) => { if (err) console.error(err); else if (!item) { console.table(table.getCleanMatrix({ collisionSeparator: "" })); // 👈 } else if (item.text) { table.processItem(item, columnQuantitizer(item)); } }); ``` ## Result As displayed with `console.table(cleanMatrix)`: ``` ┌─────────┬───────────────────┬───────────┬──────────────┬──────────────┬─────────┬──────────────────────────┬─────────────┬─────────────┬────────┐ │ (index) │ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ ├─────────┼───────────────────┼───────────┼──────────────┼──────────────┼─────────┼──────────────────────────┼─────────────┼─────────────┼────────┤ │ 0 │ 'Version' │ 'LTS' │ 'Date' │ 'V8' │ 'npm' │ 'NODE_MODULE_VERSION[1]' │ │ │ │ │ 1 │ 'Node.js 17.1.0' │ │ '2021-11-09' │ '9.5.172.25' │ '8.1.2' │ '102' │ 'Downloads' │ 'Changelog' │ 'Docs' │ │ 2 │ 'Node.js 17.0.1' │ │ '2021-10-20' │ '9.5.172.21' │ '8.1.0' │ '102' │ 'Downloads' │ 'Changelog' │ 'Docs' │ │ 3 │ 'Node.js 17.0.0' │ │ '2021-10-19' │ '9.5.172.21' │ '8.1.0' │ '102' │ 'Downloads' │ 'Changelog' │ 'Docs' │ │ 4 │ 'Node.js 16.14.2' │ 'Gallium' │ '2022-03-17' │ '9.4.146.24' │ '8.5.0' │ '93' │ 'Downloads' │ 'Changelog' │ 'Docs' │ │ 5 │ 'Node.js 16.14.1' │ 'Gallium' │ '2022-03-16' │ '9.4.146.24' │ '8.5.0' │ '93' │ 'Downloads' │ 'Changelog' │ 'Docs' │ │ 6 │ 'Node.js 16.14.0' │ 'Gallium' │ '2022-02-08' │ '9.4.146.24' │ '8.3.1' │ '93' │ 'Downloads' │ 'Changelog' │ 'Docs' │ │ 7 │ 'Node.js 16.13.2' │ 'Gallium' │ '2022-01-10' │ '9.4.146.24' │ '8.1.2' │ '93' │ 'Downloads' │ 'Changelog' │ 'Docs' │ │ 8 │ 'Node.js 16.13.1' │ 'Gallium' │ '2021-12-01' │ '9.4.146.24' │ '8.1.2' │ '93' │ 'Downloads' │ 'Changelog' │ 'Docs' │ │ 9 │ 'Node.js 16.13.0' │ 'Gallium' │ '2021-10-26' │ '9.4.146.19' │ '8.1.0' │ '93' │ 'Downloads' │ 'Changelog' │ 'Docs' │ │ 10 │ 'Node.js 16.12.0' │ │ '2021-10-20' │ '9.4.146.19' │ '8.1.0' │ '93' │ 'Downloads' │ 'Changelog' │ 'Docs' │ └─────────┴───────────────────┴───────────┴──────────────┴──────────────┴─────────┴──────────────────────────┴─────────────┴─────────────┴────────┘ ``` --- lib/TableParser.js | 14 + test/sample-table.html | 12807 ++++++++++++++++++++++++++++++++++ test/sample-table.pdf | Bin 0 -> 67796 bytes test/snapshots/test.js.md | 125 + test/snapshots/test.js.snap | Bin 2595 -> 3300 bytes test/test.js | 30 + 6 files changed, 12976 insertions(+) create mode 100644 test/sample-table.html create mode 100644 test/sample-table.pdf diff --git a/lib/TableParser.js b/lib/TableParser.js index 3981a57..614ae51 100644 --- a/lib/TableParser.js +++ b/lib/TableParser.js @@ -65,6 +65,7 @@ function getSortedXValues(rows) { return sortAsFloatValues(Object.keys(xSet)); } +/** @returns an 3-dimension matrix: row -> column -> items_collisionning_in_column -> item */ TableParser.prototype.getMatrix = function () { var rows = this.getRows(); var xValues = getSortedXValues(rows); @@ -79,6 +80,19 @@ TableParser.prototype.getMatrix = function () { }); }; +/** + * For use with console.table(). + * @param {String} collisionSeparator separator to use when there are multiple values to join for a given column + * @returns a 2-dimension matrix: row -> column -> value + */ +TableParser.prototype.getCleanMatrix = function ({ collisionSeparator } = {}) { + return this.getMatrix().map((rowColumns) => + rowColumns.map((items) => + items.map((item) => item.text).join(collisionSeparator || "") + ) + ); +}; + function getText(item) { return item.text; } diff --git a/test/sample-table.html b/test/sample-table.html new file mode 100644 index 0000000..020a265 --- /dev/null +++ b/test/sample-table.html @@ -0,0 +1,12807 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
VersionLTSDateV8npm + NODE_MODULE_VERSION + [1] + +
Node.js 17.8.09.6.180.158.5.5102 + + Downloads + + + Changelog + + + Docs + +
Node.js 17.7.29.6.180.158.5.2102 + + Downloads + + + Changelog + + + Docs + +
Node.js 17.7.19.6.180.158.5.2102 + + Downloads + + + Changelog + + + Docs + +
Node.js 17.7.09.6.180.158.5.2102 + + Downloads + + + Changelog + + + Docs + +
Node.js 17.6.09.6.180.158.5.1102 + + Downloads + + + Changelog + + + Docs + +
Node.js 17.5.09.6.180.158.4.1102 + + Downloads + + + Changelog + + + Docs + +
Node.js 17.4.09.6.180.158.3.1102 + + Downloads + + + Changelog + + + Docs + +
Node.js 17.3.19.6.180.158.3.0102 + + Downloads + + + Changelog + + + Docs + +
Node.js 17.3.09.6.180.158.3.0102 + + Downloads + + + Changelog + + + Docs + +
Node.js 17.2.09.6.180.148.1.4102 + + Downloads + + + Changelog + + + Docs + +
Node.js 17.1.09.5.172.258.1.2102 + + Downloads + + + Changelog + + + Docs + +
Node.js 17.0.19.5.172.218.1.0102 + + Downloads + + + Changelog + + + Docs + +
Node.js 17.0.09.5.172.218.1.0102 + + Downloads + + + Changelog + + + Docs + +
Node.js 16.14.2Gallium9.4.146.248.5.093 + + Downloads + + + Changelog + + + Docs + +
Node.js 16.14.1Gallium9.4.146.248.5.093 + + Downloads + + + Changelog + + + Docs + +
Node.js 16.14.0Gallium9.4.146.248.3.193 + + Downloads + + + Changelog + + + Docs + +
Node.js 16.13.2Gallium9.4.146.248.1.293 + + Downloads + + + Changelog + + + Docs + +
Node.js 16.13.1Gallium9.4.146.248.1.293 + + Downloads + + + Changelog + + + Docs + +
Node.js 16.13.0Gallium9.4.146.198.1.093 + + Downloads + + + Changelog + + + Docs + +
Node.js 16.12.09.4.146.198.1.093 + + Downloads + + + Changelog + + + Docs + +
Node.js 16.11.19.4.146.198.0.093 + + Downloads + + + Changelog + + + Docs + +
Node.js 16.11.09.4.146.198.0.093 + + Downloads + + + Changelog + + + Docs + +
Node.js 16.10.09.3.345.197.24.093 + + Downloads + + + Changelog + + + Docs + +
Node.js 16.9.19.3.345.167.21.193 + + Downloads + + + Changelog + + + Docs + +
Node.js 16.9.09.3.345.167.21.193 + + Downloads + + + Changelog + + + Docs + +
Node.js 16.8.09.2.230.217.21.093 + + Downloads + + + Changelog + + + Docs + +
Node.js 16.7.09.2.230.217.20.393 + + Downloads + + + Changelog + + + Docs + +
Node.js 16.6.29.2.230.217.20.393 + + Downloads + + + Changelog + + + Docs + +
Node.js 16.6.19.2.230.217.20.393 + + Downloads + + + Changelog + + + Docs + +
Node.js 16.6.09.2.230.217.19.193 + + Downloads + + + Changelog + + + Docs + +
Node.js 16.5.09.1.269.387.19.193 + + Downloads + + + Changelog + + + Docs + +
Node.js 16.4.29.1.269.367.18.193 + + Downloads + + + Changelog + + + Docs + +
Node.js 16.4.19.1.269.367.18.193 + + Downloads + + + Changelog + + + Docs + +
Node.js 16.4.09.1.269.367.18.193 + + Downloads + + + Changelog + + + Docs + +
Node.js 16.3.09.0.257.257.15.193 + + Downloads + + + Changelog + + + Docs + +
Node.js 16.2.09.0.257.257.13.093 + + Downloads + + + Changelog + + + Docs + +
Node.js 16.1.09.0.257.247.11.293 + + Downloads + + + Changelog + + + Docs + +
Node.js 16.0.09.0.257.177.10.093 + + Downloads + + + Changelog + + + Docs + +
Node.js 15.14.08.6.395.177.7.688 + + Downloads + + + Changelog + + + Docs + +
Node.js 15.13.08.6.395.177.7.688 + + Downloads + + + Changelog + + + Docs + +
Node.js 15.12.08.6.395.177.6.388 + + Downloads + + + Changelog + + + Docs + +
Node.js 15.11.08.6.395.177.6.088 + + Downloads + + + Changelog + + + Docs + +
Node.js 15.10.08.6.395.177.5.388 + + Downloads + + + Changelog + + + Docs + +
Node.js 15.9.08.6.395.177.5.388 + + Downloads + + + Changelog + + + Docs + +
Node.js 15.8.08.6.395.177.5.188 + + Downloads + + + Changelog + + + Docs + +
Node.js 15.7.08.6.395.177.4.388 + + Downloads + + + Changelog + + + Docs + +
Node.js 15.6.08.6.395.177.4.088 + + Downloads + + + Changelog + + + Docs + +
Node.js 15.5.18.6.395.177.3.088 + + Downloads + + + Changelog + + + Docs + +
Node.js 15.5.08.6.395.177.3.088 + + Downloads + + + Changelog + + + Docs + +
Node.js 15.4.08.6.395.177.0.1588 + + Downloads + + + Changelog + + + Docs + +
Node.js 15.3.08.6.395.177.0.1488 + + Downloads + + + Changelog + + + Docs + +
Node.js 15.2.18.6.395.177.0.888 + + Downloads + + + Changelog + + + Docs + +
Node.js 15.2.08.6.395.177.0.888 + + Downloads + + + Changelog + + + Docs + +
Node.js 15.1.08.6.395.177.0.888 + + Downloads + + + Changelog + + + Docs + +
Node.js 15.0.18.6.395.177.0.388 + + Downloads + + + Changelog + + + Docs + +
Node.js 15.0.08.6.395.167.0.288 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.19.1Fermium8.4.371.236.14.1683 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.19.0Fermium8.4.371.236.14.1683 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.18.3Fermium8.4.371.236.14.1583 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.18.2Fermium8.4.371.236.14.1583 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.18.1Fermium8.4.371.236.14.1583 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.18.0Fermium8.4.371.236.14.1583 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.17.6Fermium8.4.371.236.14.1583 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.17.5Fermium8.4.371.236.14.1483 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.17.4Fermium8.4.371.236.14.1483 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.17.3Fermium8.4.371.236.14.1383 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.17.2Fermium8.4.371.236.14.1383 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.17.1Fermium8.4.371.236.14.1383 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.17.0Fermium8.4.371.236.14.1383 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.16.1Fermium8.4.371.196.14.1283 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.16.0Fermium8.4.371.196.14.1183 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.15.5Fermium8.4.371.196.14.1183 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.15.4Fermium8.4.371.196.14.1083 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.15.3Fermium8.4.371.196.14.983 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.15.2Fermium8.4.371.196.14.983 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.15.1Fermium8.4.371.196.14.883 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.15.0Fermium8.4.371.196.14.883 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.14.08.4.371.196.14.883 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.13.18.4.371.196.14.883 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.13.08.4.371.196.14.883 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.12.08.4.371.196.14.883 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.11.08.4.371.196.14.883 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.10.18.4.371.196.14.883 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.10.08.4.371.196.14.883 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.9.08.4.371.196.14.883 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.8.08.4.371.196.14.783 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.7.08.4.371.196.14.783 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.6.08.4.371.196.14.683 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.5.08.3.110.96.14.583 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.4.08.1.307.316.14.583 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.3.08.1.307.316.14.583 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.2.08.1.307.316.14.483 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.1.08.1.307.316.14.483 + + Downloads + + + Changelog + + + Docs + +
Node.js 14.0.08.1.307.306.14.483 + + Downloads + + + Changelog + + + Docs + +
Node.js 13.14.07.9.317.256.14.479 + + Downloads + + + Changelog + + + Docs + +
Node.js 13.13.07.9.317.256.14.479 + + Downloads + + + Changelog + + + Docs + +
Node.js 13.12.07.9.317.256.14.479 + + Downloads + + + Changelog + + + Docs + +
Node.js 13.11.07.9.317.256.13.779 + + Downloads + + + Changelog + + + Docs + +
Node.js 13.10.17.9.317.256.13.779 + + Downloads + + + Changelog + + + Docs + +
Node.js 13.10.07.9.317.256.13.779 + + Downloads + + + Changelog + + + Docs + +
Node.js 13.9.07.9.317.256.13.779 + + Downloads + + + Changelog + + + Docs + +
Node.js 13.8.07.9.317.256.13.679 + + Downloads + + + Changelog + + + Docs + +
Node.js 13.7.07.9.317.256.13.679 + + Downloads + + + Changelog + + + Docs + +
Node.js 13.6.07.9.317.256.13.479 + + Downloads + + + Changelog + + + Docs + +
Node.js 13.5.07.9.317.256.13.479 + + Downloads + + + Changelog + + + Docs + +
Node.js 13.4.07.9.317.256.13.479 + + Downloads + + + Changelog + + + Docs + +
Node.js 13.3.07.9.317.256.13.179 + + Downloads + + + Changelog + + + Docs + +
Node.js 13.2.07.9.317.236.13.179 + + Downloads + + + Changelog + + + Docs + +
Node.js 13.1.07.8.279.176.12.179 + + Downloads + + + Changelog + + + Docs + +
Node.js 13.0.17.8.279.176.12.079 + + Downloads + + + Changelog + + + Docs + +
Node.js 13.0.07.8.279.176.12.079 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.22.11Erbium7.8.279.236.14.1672 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.22.10Erbium7.8.279.236.14.1672 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.22.9Erbium7.8.279.236.14.1572 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.22.8Erbium7.8.279.236.14.1572 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.22.7Erbium7.8.279.236.14.1572 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.22.6Erbium7.8.279.236.14.1572 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.22.5Erbium7.8.279.236.14.1472 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.22.4Erbium7.8.279.236.14.1472 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.22.3Erbium7.8.279.236.14.1372 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.22.2Erbium7.8.279.236.14.1372 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.22.1Erbium7.8.279.236.14.1272 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.22.0Erbium7.8.279.236.14.1172 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.21.0Erbium7.8.279.236.14.1172 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.20.2Erbium7.8.279.236.14.1172 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.20.1Erbium7.8.279.236.14.1072 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.20.0Erbium7.8.279.236.14.872 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.19.1Erbium7.8.279.236.14.872 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.19.0Erbium7.8.279.236.14.872 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.18.4Erbium7.8.279.236.14.672 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.18.3Erbium7.8.279.236.14.672 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.18.2Erbium7.8.279.236.14.572 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.18.1Erbium7.8.279.236.14.572 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.18.0Erbium7.8.279.236.14.472 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.17.0Erbium7.8.279.236.14.472 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.16.3Erbium7.8.279.236.14.472 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.16.2Erbium7.8.279.236.14.472 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.16.1Erbium7.8.279.236.13.472 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.16.0Erbium7.8.279.236.13.472 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.15.0Erbium7.7.299.136.13.472 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.14.1Erbium7.7.299.136.13.472 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.14.0Erbium7.7.299.136.13.472 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.13.1Erbium7.7.299.136.12.172 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.13.0Erbium7.7.299.136.12.072 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.12.07.7.299.136.11.372 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.11.17.7.299.116.11.372 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.11.07.7.299.116.11.372 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.10.07.6.303.296.10.372 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.9.17.6.303.296.10.272 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.9.07.6.303.296.10.272 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.8.17.5.288.226.10.272 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.8.07.5.288.226.10.272 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.7.07.5.288.226.10.072 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.6.07.5.288.226.9.072 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.5.07.5.288.226.9.072 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.4.07.4.288.276.9.072 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.3.17.4.288.276.9.072 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.3.07.4.288.276.9.072 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.2.07.4.288.216.9.072 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.1.07.4.288.216.9.072 + + Downloads + + + Changelog + + + Docs + +
Node.js 12.0.07.4.288.216.9.072 + + Downloads + + + Changelog + + + Docs + +
Node.js 11.15.07.0.276.386.7.067 + + Downloads + + + Changelog + + + Docs + +
Node.js 11.14.07.0.276.386.7.067 + + Downloads + + + Changelog + + + Docs + +
Node.js 11.13.07.0.276.386.7.067 + + Downloads + + + Changelog + + + Docs + +
Node.js 11.12.07.0.276.386.7.067 + + Downloads + + + Changelog + + + Docs + +
Node.js 11.11.07.0.276.386.7.067 + + Downloads + + + Changelog + + + Docs + +
Node.js 11.10.17.0.276.386.7.067 + + Downloads + + + Changelog + + + Docs + +
Node.js 11.10.07.0.276.386.7.067 + + Downloads + + + Changelog + + + Docs + +
Node.js 11.9.07.0.276.386.5.067 + + Downloads + + + Changelog + + + Docs + +
Node.js 11.8.07.0.276.386.5.067 + + Downloads + + + Changelog + + + Docs + +
Node.js 11.7.07.0.276.386.5.067 + + Downloads + + + Changelog + + + Docs + +
Node.js 11.6.07.0.276.386.5.0-next.067 + + Downloads + + + Changelog + + + Docs + +
Node.js 11.5.07.0.276.386.4.167 + + Downloads + + + Changelog + + + Docs + +
Node.js 11.4.07.0.276.386.4.167 + + Downloads + + + Changelog + + + Docs + +
Node.js 11.3.07.0.276.386.4.167 + + Downloads + + + Changelog + + + Docs + +
Node.js 11.2.07.0.276.386.4.167 + + Downloads + + + Changelog + + + Docs + +
Node.js 11.1.07.0.276.326.4.167 + + Downloads + + + Changelog + + + Docs + +
Node.js 11.0.07.0.276.286.4.167 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.24.1Dubnium6.8.275.326.14.1264 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.24.0Dubnium6.8.275.326.14.1164 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.23.3Dubnium6.8.275.326.14.1164 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.23.2Dubnium6.8.275.326.14.1064 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.23.1Dubnium6.8.275.326.14.1064 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.23.0Dubnium6.8.275.326.14.864 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.22.1Dubnium6.8.275.326.14.664 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.22.0Dubnium6.8.275.326.14.664 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.21.0Dubnium6.8.275.326.14.464 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.20.1Dubnium6.8.275.326.14.464 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.20.0Dubnium6.8.275.326.14.464 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.19.0Dubnium6.8.275.326.13.464 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.18.1Dubnium6.8.275.326.13.464 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.18.0Dubnium6.8.275.326.13.464 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.17.0Dubnium6.8.275.326.11.364 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.16.3Dubnium6.8.275.326.9.064 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.16.2Dubnium6.8.275.326.9.064 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.16.1Dubnium6.8.275.326.9.064 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.16.0Dubnium6.8.275.326.9.064 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.15.3Dubnium6.8.275.326.4.164 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.15.2Dubnium6.8.275.326.4.164 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.15.1Dubnium6.8.275.326.4.164 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.15.0Dubnium6.8.275.326.4.164 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.14.2Dubnium6.8.275.326.4.164 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.14.1Dubnium6.8.275.326.4.164 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.14.0Dubnium6.8.275.326.4.164 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.13.0Dubnium6.8.275.326.4.164 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.12.06.8.275.326.4.164 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.11.06.8.275.326.4.164 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.10.06.8.275.306.4.164 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.9.06.8.275.246.2.064 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.8.06.7.288.496.2.064 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.7.06.7.288.496.1.064 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.6.06.7.288.466.1.064 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.5.06.7.288.466.1.064 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.4.16.7.288.456.1.064 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.4.06.7.288.436.1.064 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.3.06.6.346.326.1.064 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.2.16.6.346.325.6.064 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.2.06.6.346.325.6.064 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.1.06.6.346.275.6.064 + + Downloads + + + Changelog + + + Docs + +
Node.js 10.0.06.6.346.245.6.064 + + Downloads + + + Changelog + + + Docs + +
Node.js 9.11.26.2.414.465.6.059 + + Downloads + + + Changelog + + + Docs + +
Node.js 9.11.16.2.414.465.6.059 + + Downloads + + + Changelog + + + Docs + +
Node.js 9.11.06.2.414.465.6.059 + + Downloads + + + Changelog + + + Docs + +
Node.js 9.10.16.2.414.465.6.059 + + Downloads + + + Changelog + + + Docs + +
Node.js 9.10.06.2.414.465.6.059 + + Downloads + + + Changelog + + + Docs + +
Node.js 9.9.06.2.414.465.6.059 + + Downloads + + + Changelog + + + Docs + +
Node.js 9.8.06.2.414.465.6.059 + + Downloads + + + Changelog + + + Docs + +
Node.js 9.7.16.2.414.465.6.059 + + Downloads + + + Changelog + + + Docs + +
Node.js 9.7.06.2.414.465.6.059 + + Downloads + + + Changelog + + + Docs + +
Node.js 9.6.16.2.414.465.6.059 + + Downloads + + + Changelog + + + Docs + +
Node.js 9.6.06.2.414.465.6.059 + + Downloads + + + Changelog + + + Docs + +
Node.js 9.5.06.2.414.465.6.059 + + Downloads + + + Changelog + + + Docs + +
Node.js 9.4.06.2.414.465.6.059 + + Downloads + + + Changelog + + + Docs + +
Node.js 9.3.06.2.414.465.5.159 + + Downloads + + + Changelog + + + Docs + +
Node.js 9.2.16.2.414.445.5.159 + + Downloads + + + Changelog + + + Docs + +
Node.js 9.2.06.2.414.445.5.159 + + Downloads + + + Changelog + + + Docs + +
Node.js 9.1.06.2.414.325.5.159 + + Downloads + + + Changelog + + + Docs + +
Node.js 9.0.06.2.414.325.5.159 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.17.0Carbon6.2.414.786.13.457 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.16.2Carbon6.2.414.786.4.157 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.16.1Carbon6.2.414.776.4.157 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.16.0Carbon6.2.414.776.4.157 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.15.1Carbon6.2.414.756.4.157 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.15.0Carbon6.2.414.756.4.157 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.14.1Carbon6.2.414.756.4.157 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.14.0Carbon6.2.414.726.4.157 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.13.0Carbon6.2.414.726.4.157 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.12.0Carbon6.2.414.666.4.157 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.11.4Carbon6.2.414.545.6.057 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.11.3Carbon6.2.414.545.6.057 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.11.2Carbon6.2.414.545.6.057 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.11.1Carbon6.2.414.505.6.057 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.11.0Carbon6.2.414.505.6.057 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.10.0Carbon6.2.414.505.6.057 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.9.4Carbon6.1.534.505.6.057 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.9.3Carbon6.1.534.485.5.157 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.9.2Carbon6.1.534.485.5.157 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.9.1Carbon6.1.534.475.5.157 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.9.0Carbon6.1.534.465.5.157 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.8.16.1.534.425.4.257 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.8.06.1.534.425.4.257 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.7.06.1.534.425.4.257 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.6.06.0.287.535.3.057 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.5.06.0.287.535.3.057 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.4.06.0.286.525.3.057 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.3.06.0.286.525.3.057 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.2.15.8.283.415.3.057 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.2.05.8.283.415.3.057 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.1.45.8.283.415.0.357 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.1.35.8.283.415.0.357 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.1.25.8.283.415.0.357 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.1.15.8.283.415.0.357 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.1.05.8.283.415.0.357 + + Downloads + + + Changelog + + + Docs + +
Node.js 8.0.05.8.283.415.0.057 + + Downloads + + + Changelog + + + Docs + +
Node.js 7.10.15.5.372.434.2.051 + + Downloads + + + Changelog + + + Docs + +
Node.js 7.10.05.5.372.434.2.051 + + Downloads + + + Changelog + + + Docs + +
Node.js 7.9.05.5.372.434.2.051 + + Downloads + + + Changelog + + + Docs + +
Node.js 7.8.05.5.372.434.2.051 + + Downloads + + + Changelog + + + Docs + +
Node.js 7.7.45.5.372.424.1.251 + + Downloads + + + Changelog + + + Docs + +
Node.js 7.7.35.5.372.414.1.251 + + Downloads + + + Changelog + + + Docs + +
Node.js 7.7.25.5.372.414.1.251 + + Downloads + + + Changelog + + + Docs + +
Node.js 7.7.15.5.372.414.1.251 + + Downloads + + + Changelog + + + Docs + +
Node.js 7.7.05.5.372.414.1.251 + + Downloads + + + Changelog + + + Docs + +
Node.js 7.6.05.5.372.404.1.251 + + Downloads + + + Changelog + + + Docs + +
Node.js 7.5.05.4.500.484.1.251 + + Downloads + + + Changelog + + + Docs + +
Node.js 7.4.05.4.500.454.0.551 + + Downloads + + + Changelog + + + Docs + +
Node.js 7.3.05.4.500.453.10.1051 + + Downloads + + + Changelog + + + Docs + +
Node.js 7.2.15.4.500.443.10.1051 + + Downloads + + + Changelog + + + Docs + +
Node.js 7.2.05.4.500.433.10.951 + + Downloads + + + Changelog + + + Docs + +
Node.js 7.1.05.4.500.363.10.951 + + Downloads + + + Changelog + + + Docs + +
Node.js 7.0.05.4.500.363.10.851 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.17.1Boron5.1.281.1113.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.17.0Boron5.1.281.1113.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.16.0Boron5.1.281.1113.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.15.1Boron5.1.281.1113.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.15.0Boron5.1.281.1113.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.14.4Boron5.1.281.1113.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.14.3Boron5.1.281.1113.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.14.2Boron5.1.281.1113.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.14.1Boron5.1.281.1113.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.14.0Boron5.1.281.1113.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.13.1Boron5.1.281.1113.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.13.0Boron5.1.281.1113.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.12.3Boron5.1.281.1113.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.12.2Boron5.1.281.1093.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.12.1Boron5.1.281.1093.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.12.0Boron5.1.281.1083.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.11.5Boron5.1.281.1083.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.11.4Boron5.1.281.1083.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.11.3Boron5.1.281.1073.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.11.2Boron5.1.281.1033.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.11.1Boron5.1.281.1033.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.11.0Boron5.1.281.1023.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.10.3Boron5.1.281.1013.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.10.2Boron5.1.281.983.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.10.1Boron5.1.281.953.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.10.0Boron5.1.281.933.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.9.5Boron5.1.281.893.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.9.4Boron5.1.281.893.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.9.3Boron5.1.281.893.10.1048 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.9.2Boron5.1.281.883.10.948 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.9.1Boron5.1.281.843.10.848 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.9.0Boron5.1.281.843.10.848 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.8.15.1.281.843.10.848 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.8.05.1.281.843.10.848 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.7.05.1.281.833.10.348 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.6.05.1.281.833.10.348 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.5.05.1.281.813.10.348 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.4.05.0.71.603.10.348 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.3.15.0.71.573.10.348 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.3.05.0.71.523.10.348 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.2.25.0.71.523.9.548 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.2.15.0.71.523.9.348 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.2.05.0.71.473.8.948 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.1.05.0.71.353.8.648 + + Downloads + + + Changelog + + + Docs + +
Node.js 6.0.05.0.71.353.8.648 + + Downloads + + + Changelog + + + Docs + +
Node.js 5.12.04.6.85.323.8.647 + + Downloads + + + Changelog + + + Docs + +
Node.js 5.11.14.6.85.313.8.647 + + Downloads + + + Changelog + + + Docs + +
Node.js 5.11.04.6.85.313.8.647 + + Downloads + + + Changelog + + + Docs + +
Node.js 5.10.14.6.85.313.8.347 + + Downloads + + + Changelog + + + Docs + +
Node.js 5.10.04.6.85.313.8.347 + + Downloads + + + Changelog + + + Docs + +
Node.js 5.9.14.6.85.313.7.347 + + Downloads + + + Changelog + + + Docs + +
Node.js 5.9.04.6.85.313.7.347 + + Downloads + + + Changelog + + + Docs + +
Node.js 5.8.04.6.85.313.7.347 + + Downloads + + + Changelog + + + Docs + +
Node.js 5.7.14.6.85.313.6.047 + + Downloads + + + Changelog + + + Docs + +
Node.js 5.7.04.6.85.313.6.047 + + Downloads + + + Changelog + + + Docs + +
Node.js 5.6.04.6.85.313.6.047 + + Downloads + + + Changelog + + + Docs + +
Node.js 5.5.04.6.85.313.3.1247 + + Downloads + + + Changelog + + + Docs + +
Node.js 5.4.14.6.85.313.3.1247 + + Downloads + + + Changelog + + + Docs + +
Node.js 5.4.04.6.85.313.3.1247 + + Downloads + + + Changelog + + + Docs + +
Node.js 5.3.04.6.85.313.3.1247 + + Downloads + + + Changelog + + + Docs + +
Node.js 5.2.04.6.85.313.3.1247 + + Downloads + + + Changelog + + + Docs + +
Node.js 5.1.14.6.85.313.3.1247 + + Downloads + + + Changelog + + + Docs + +
Node.js 5.1.04.6.85.313.3.1247 + + Downloads + + + Changelog + + + Docs + +
Node.js 5.0.04.6.85.283.3.647 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.9.1Argon4.5.103.532.15.1146 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.9.0Argon4.5.103.532.15.1146 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.8.7Argon4.5.103.532.15.1146 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.8.6Argon4.5.103.532.15.1146 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.8.5Argon4.5.103.472.15.1146 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.8.4Argon4.5.103.472.15.1146 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.8.3Argon4.5.103.472.15.1146 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.8.2Argon4.5.103.462.15.1146 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.8.1Argon4.5.103.462.15.1146 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.8.0Argon4.5.103.452.15.1146 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.7.3Argon4.5.103.432.15.1146 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.7.2Argon4.5.103.432.15.1146 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.7.1Argon4.5.103.432.15.1146 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.7.0Argon4.5.103.432.15.1146 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.6.2Argon4.5.103.422.15.1146 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.6.1Argon4.5.103.372.15.946 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.6.0Argon4.5.103.372.15.946 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.5.0Argon4.5.103.372.15.946 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.4.7Argon4.5.103.362.15.846 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.4.6Argon4.5.103.362.15.546 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.4.5Argon4.5.103.352.15.546 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.4.4Argon4.5.103.352.15.146 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.4.3Argon4.5.103.352.15.146 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.4.2Argon4.5.103.352.15.046 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.4.1Argon4.5.103.352.14.2046 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.4.0Argon4.5.103.352.14.2046 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.3.2Argon4.5.103.352.14.1246 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.3.1Argon4.5.103.352.14.1246 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.3.0Argon4.5.103.352.14.1246 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.2.6Argon4.5.103.352.14.1246 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.2.5Argon4.5.103.352.14.1246 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.2.4Argon4.5.103.352.14.1246 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.2.3Argon4.5.103.352.14.746 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.2.2Argon4.5.103.352.14.746 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.2.1Argon4.5.103.352.14.746 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.2.0Argon4.5.103.352.14.746 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.1.24.5.103.352.14.446 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.1.14.5.103.332.14.446 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.1.04.5.103.332.14.346 + + Downloads + + + Changelog + + + Docs + +
Node.js 4.0.04.5.103.302.14.246 + + Downloads + + + Changelog + + + Docs + +
io.js 3.3.14.4.63.302.14.345 + + Downloads + + + Changelog + + + Docs + +
io.js 3.3.04.4.63.302.13.345 + + Downloads + + + Changelog + + + Docs + +
io.js 3.2.04.4.63.262.13.345 + + Downloads + + + Changelog + + + Docs + +
io.js 3.1.04.4.63.262.13.345 + + Downloads + + + Changelog + + + Docs + +
io.js 3.0.04.4.63.262.13.345 + + Downloads + + + Changelog + + + Docs + +
io.js 2.5.04.2.77.212.13.244 + + Downloads + + + Changelog + + + Docs + +
io.js 2.4.04.2.77.202.13.044 + + Downloads + + + Changelog + + + Docs + +
io.js 2.3.44.2.77.202.12.144 + + Downloads + + + Changelog + + + Docs + +
io.js 2.3.34.2.77.202.11.344 + + Downloads + + + Changelog + + + Docs + +
io.js 2.3.24.2.77.202.11.344 + + Downloads + + + Changelog + + + Docs + +
io.js 2.3.14.2.77.202.11.344 + + Downloads + + + Changelog + + + Docs + +
io.js 2.3.04.2.77.202.11.144 + + Downloads + + + Changelog + + + Docs + +
io.js 2.2.14.2.77.202.11.044 + + Downloads + + + Changelog + + + Docs + +
io.js 2.2.04.2.77.202.11.044 + + Downloads + + + Changelog + + + Docs + +
io.js 2.1.04.2.77.202.10.144 + + Downloads + + + Changelog + + + Docs + +
io.js 2.0.24.2.77.202.9.044 + + Downloads + + + Changelog + + + Docs + +
io.js 2.0.14.2.77.202.9.044 + + Downloads + + + Changelog + + + Docs + +
io.js 2.0.04.2.77.182.9.044 + + Downloads + + + Changelog + + + Docs + +
io.js 1.8.44.1.0.272.9.043 + + Downloads + + + Changelog + + + Docs + +
io.js 1.8.34.1.0.272.9.043 + + Downloads + + + Changelog + + + Docs + +
io.js 1.8.24.1.0.272.9.043 + + Downloads + + + Changelog + + + Docs + +
io.js 1.8.14.1.0.272.8.343 + + Downloads + + + Changelog + + + Docs + +
io.js 1.7.14.1.0.272.7.643 + + Downloads + + + Changelog + + + Docs + +
io.js 1.6.44.1.0.272.7.543 + + Downloads + + + Changelog + + + Docs + +
io.js 1.6.34.1.0.272.7.443 + + Downloads + + + Changelog + + + Docs + +
io.js 1.6.24.1.0.252.7.143 + + Downloads + + + Changelog + + + Docs + +
io.js 1.6.14.1.0.212.7.143 + + Downloads + + + Changelog + + + Docs + +
io.js 1.6.04.1.0.212.7.143 + + Downloads + + + Changelog + + + Docs + +
io.js 1.5.14.1.0.212.7.043 + + Downloads + + + Changelog + + + Docs + +
io.js 1.5.04.1.0.212.7.043 + + Downloads + + + Changelog + + + Docs + +
io.js 1.4.34.1.0.212.6.143 + + Downloads + + + Changelog + + + Docs + +
io.js 1.4.24.1.0.212.6.143 + + Downloads + + + Changelog + + + Docs + +
io.js 1.4.14.1.0.212.6.043 + + Downloads + + + Changelog + + + Docs + +
io.js 1.3.04.1.0.142.5.143 + + Downloads + + + Changelog + + + Docs + +
io.js 1.2.04.1.0.142.5.143 + + Downloads + + + Changelog + + + Docs + +
io.js 1.1.04.1.0.142.4.143 + + Downloads + + + Changelog + + + Docs + +
io.js 1.0.44.1.0.122.3.042 + + Downloads + + + Changelog + + + Docs + +
io.js 1.0.34.1.0.72.2.042 + + Downloads + + + Changelog + + + Docs + +
io.js 1.0.23.31.74.12.1.1842 + + Downloads + + + Changelog + + + Docs + +
io.js 1.0.13.31.74.12.1.1842 + + Downloads + + + Changelog + + + Docs + +
io.js 1.0.03.31.74.12.1.1842 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.12.183.28.71.202.15.1114 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.12.173.28.71.192.15.114 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.12.163.28.71.192.15.114 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.12.153.28.71.192.15.114 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.12.143.28.71.192.15.114 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.12.133.28.71.192.15.014 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.12.123.28.71.192.14.914 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.12.113.28.71.192.14.914 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.12.103.28.71.192.14.914 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.12.93.28.71.192.14.914 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.12.83.28.71.192.14.914 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.12.73.28.71.192.11.314 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.12.63.28.71.192.11.214 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.12.53.28.71.192.11.214 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.12.43.28.71.192.10.114 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.12.33.28.71.192.9.114 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.12.23.28.73.02.7.414 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.12.13.28.73.02.5.114 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.12.03.28.73.02.5.114 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.11.163.28.73.02.3.014 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.11.153.28.73.02.1.614 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.11.143.26.33.02.0.014 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.11.133.25.30.01.4.914 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.11.123.22.24.191.4.314 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.11.113.22.24.191.3.2514 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.11.103.22.24.101.3.2213 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.11.93.22.24.51.3.1513 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.11.83.21.18.31.3.1313 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.11.73.20.17.01.3.80x000C + + Downloads + + + Changelog + + + Docs + +
Node.js 0.11.63.20.14.11.3.80x000C + + Downloads + + + Changelog + + + Docs + +
Node.js 0.11.53.20.11.01.3.60x000C + + Downloads + + + Changelog + + + Docs + +
Node.js 0.11.43.20.2.01.3.40x000C + + Downloads + + + Changelog + + + Docs + +
Node.js 0.11.33.19.13.01.2.250x000C + + Downloads + + + Changelog + + + Docs + +
Node.js 0.11.23.19.0.01.2.210x000C + + Downloads + + + Changelog + + + Docs + +
Node.js 0.11.13.18.0.01.2.180x000C + + Downloads + + + Changelog + + + Docs + +
Node.js 0.11.03.17.13.01.2.150x000C + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.483.14.5.112.15.111 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.473.14.5.112.15.111 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.463.14.5.92.15.111 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.453.14.5.92.15.111 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.443.14.5.92.15.011 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.433.14.5.91.4.2911 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.423.14.5.91.4.2911 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.413.14.5.91.4.2911 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.403.14.5.91.4.2811 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.393.14.5.91.4.2811 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.383.14.5.91.4.2811 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.373.14.5.91.4.2811 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.363.14.5.91.4.2811 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.353.14.5.91.4.2811 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.343.14.5.91.4.2811 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.333.14.5.91.4.2811 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.323.14.5.91.4.2811 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.313.14.5.91.4.2311 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.303.14.5.91.4.2111 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.293.14.5.91.4.1411 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.283.14.5.91.4.911 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.273.14.5.91.4.811 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.263.14.5.91.4.311 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.253.14.5.91.3.2411 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.243.14.5.91.3.2111 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.233.14.5.91.3.1711 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.223.14.5.91.3.1411 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.213.14.5.91.3.1111 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.203.14.5.91.3.1111 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.193.14.5.91.3.1111 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.183.14.5.91.3.811 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.173.14.5.91.3.811 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.163.14.5.91.3.811 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.153.14.5.91.3.511 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.143.14.5.91.3.511 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.133.14.5.91.3.211 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.123.14.5.91.2.3211 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.113.14.5.91.2.3011 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.103.14.5.91.2.2511 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.93.14.5.91.2.2411 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.83.14.5.91.2.2311 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.73.14.5.81.2.2111 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.63.14.5.81.2.1811 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.53.14.5.81.2.1811 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.43.14.5.81.2.1811 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.33.14.5.81.2.170x000B + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.23.14.5.81.2.150x000B + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.13.14.5.81.2.150x000B + + Downloads + + + Changelog + + + Docs + +
Node.js 0.10.03.14.5.81.2.140x000B + + Downloads + + + Changelog + + + Docs + +
Node.js 0.9.123.14.5.81.2.120x000B + + Downloads + + + Changelog + + + Docs + +
Node.js 0.9.113.14.5.01.2.120x000B + + Downloads + + + Changelog + + + Docs + +
Node.js 0.9.103.15.11.151.2.120x000B + + Downloads + + + Changelog + + + Docs + +
Node.js 0.9.93.15.11.101.2.100x000B + + Downloads + + + Changelog + + + Docs + +
Node.js 0.9.83.15.11.101.2.30x000A + + Downloads + + + Changelog + + + Docs + +
Node.js 0.9.73.15.11.71.2.20x000A + + Downloads + + + Changelog + + + Docs + +
Node.js 0.9.63.15.11.51.2.00x000A + + Downloads + + + Changelog + + + Docs + +
Node.js 0.9.53.13.7.41.1.700x000A + + Downloads + + + Changelog + + + Docs + +
Node.js 0.9.43.13.7.41.1.700x000A + + Downloads + + + Changelog + + + Docs + +
Node.js 0.9.33.13.7.41.1.640x000A + + Downloads + + + Changelog + + + Docs + +
Node.js 0.9.23.11.10.221.1.610x000A + + Downloads + + + Changelog + + + Docs + +
Node.js 0.9.13.11.10.191.1.590x000A + + Downloads + + + Changelog + + + Docs + +
Node.js 0.9.03.11.10.151.1.441 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.283.11.10.261.2.301 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.273.11.10.261.2.301 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.263.11.10.261.2.301 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.253.11.10.251.2.301 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.243.11.10.251.2.241 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.233.11.10.251.2.181 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.223.11.10.251.2.141 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.213.11.10.251.2.111 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.203.11.10.251.2.111 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.193.11.10.251.2.101 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.183.11.10.251.2.21 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.173.11.10.251.2.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.163.11.10.251.1.691 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.153.11.10.251.1.661 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.143.11.10.251.1.651 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.133.11.10.251.1.651 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.123.11.10.221.1.631 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.113.11.10.221.1.621 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.103.11.10.221.1.621 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.93.11.10.221.1.611 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.83.11.10.191.1.591 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.73.11.10.171.1.491 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.63.11.10.171.1.481 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.53.11.10.171.1.461 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.43.11.10.171.1.451 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.33.11.10.151.1.431 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.23.11.10.141.1.361 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.13.11.10.121.1.331 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.8.03.11.10.101.1.321 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.7.123.11.10.01.1.301 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.7.113.11.10.01.1.261 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.7.103.9.24.311.1.251 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.7.93.11.1.01.1.231 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.7.83.9.24.91.1.181 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.7.73.9.24.71.1.151 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.7.63.9.17.01.1.81 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.7.53.9.5.01.1.11 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.7.43.9.5.01.1.11 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.7.33.9.2.01.1.0-31 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.7.23.8.9.01.1.0-31 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.7.13.8.8.01.1.0-21 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.7.03.8.6.01.1.0-21 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.6.213.6.6.251.1.371 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.6.203.6.6.251.1.371 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.6.193.6.6.251.1.241 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.6.183.6.6.251.1.211 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.6.173.6.6.251.1.211 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.6.163.6.6.251.1.191 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.6.153.6.6.241.1.161 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.6.143.6.6.241.1.121 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.6.133.6.6.241.1.91 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.6.123.6.6.241.1.41 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.6.113.6.6.201.1.11 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.6.103.6.6.201.1.0-31 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.6.93.6.6.191.1.0-31 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.6.83.6.6.191.1.0-21 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.6.73.6.6.151.1.0-beta-101 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.6.63.6.6.141.1.0-beta-41 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.6.53.6.6.111.1.0-alpha-61 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.6.43.6.6.81.1.0-alpha-61 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.6.33.6.6.81.1.0-alpha-21 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.6.23.6.6.81 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.6.13.6.6.71 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.6.03.6.6.61 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.5.103.7.0.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.5.93.6.4.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.5.83.6.4.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.5.73.6.4.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.5.63.6.2.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.5.53.5.8.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.5.43.5.4.31 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.5.33.4.14.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.5.23.4.14.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.5.13.4.10.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.5.03.1.8.251 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.4.123.1.8.261 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.4.113.1.8.261 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.4.103.1.8.261 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.4.93.1.8.251 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.4.83.1.8.161 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.4.73.1.8.101 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.4.63.1.8.101 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.4.53.1.8.81 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.4.43.1.8.51 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.4.33.1.8.31 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.4.23.1.8.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.4.13.1.5.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.4.03.1.2.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.3.83.1.1.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.3.73.0.10.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.3.63.0.9.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.3.53.0.4.11 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.3.43.0.4.11 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.3.33.0.4.11 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.3.23.0.3.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.3.12.5.3.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.3.02.5.1.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.2.62.3.8.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.2.52.3.8.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.2.42.3.8.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.2.32.3.8.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.2.22.3.8.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.2.12.3.8.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.2.02.3.8.01 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.1042.3.6.1 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.1032.3.5.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.1022.3.2.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.1012.3.0.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.1002.2.21.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.992.2.18.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.982.2.16.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.972.2.12.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.962.2.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.952.2.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.942.2.8.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.932.2.6.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.922.2.4.2 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.912.2.3.1 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.902.2.0.3 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.332.1.6.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.322.1.3.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.312.1.2.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.302.1.1.1 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.292.1.0.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.282.1.0.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.272.1.0.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.262.0.6.1 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.252.0.5.4 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.242.0.5.4 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.232.0.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.222.0.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.212.0.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.202.0.2.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.192.0.2.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.181.3.18.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.171.3.18.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.161.3.18.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.151.3.16.0 + + Downloads + + + Changelog + + + Docs + +
Node.js 0.1.141.3.15.0 + + Downloads + + + Changelog + + + Docs + +
diff --git a/test/sample-table.pdf b/test/sample-table.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fa0934cd8e15bbd8c27b864a5a05f6202fadd9c6 GIT binary patch literal 67796 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 Snapshot 1 + + [ + [ + 'Version', + 'LTS', + 'Date', + 'V8', + 'npm', + 'NODE_MODULE_VERSION[1]', + ], + [ + 'Node.js 17.1.0', + undefined, + '2021-11-09', + '9.5.172.25', + '8.1.2', + '102', + 'Downloads', + 'Changelog', + 'Docs', + ], + [ + 'Node.js 17.0.1', + undefined, + '2021-10-20', + '9.5.172.21', + '8.1.0', + '102', + 'Downloads', + 'Changelog', + 'Docs', + ], + [ + 'Node.js 17.0.0', + undefined, + '2021-10-19', + '9.5.172.21', + '8.1.0', + '102', + 'Downloads', + 'Changelog', + 'Docs', + ], + [ + 'Node.js 16.14.2', + 'Gallium', + '2022-03-17', + '9.4.146.24', + '8.5.0', + '93', + 'Downloads', + 'Changelog', + 'Docs', + ], + [ + 'Node.js 16.14.1', + 'Gallium', + '2022-03-16', + '9.4.146.24', + '8.5.0', + '93', + 'Downloads', + 'Changelog', + 'Docs', + ], + [ + 'Node.js 16.14.0', + 'Gallium', + '2022-02-08', + '9.4.146.24', + '8.3.1', + '93', + 'Downloads', + 'Changelog', + 'Docs', + ], + [ + 'Node.js 16.13.2', + 'Gallium', + '2022-01-10', + '9.4.146.24', + '8.1.2', + '93', + 'Downloads', + 'Changelog', + 'Docs', + ], + [ + 'Node.js 16.13.1', + 'Gallium', + '2021-12-01', + '9.4.146.24', + '8.1.2', + '93', + 'Downloads', + 'Changelog', + 'Docs', + ], + [ + 'Node.js 16.13.0', + 'Gallium', + '2021-10-26', + '9.4.146.19', + '8.1.0', + '93', + 'Downloads', + 'Changelog', + 'Docs', + ], + [ + 'Node.js 16.12.0', + undefined, + '2021-10-20', + '9.4.146.19', + '8.1.0', + '93', + 'Downloads', + 'Changelog', + 'Docs', + ], + ] + ## sample scripts should print raw items from pdf file > Snapshot 1 diff --git a/test/snapshots/test.js.snap b/test/snapshots/test.js.snap index 8d29414e570e029d2adb7d0766c6d3f62a2d585a..f284e97c51de703c4b262cfb003868187d8777ea 100644 GIT binary patch literal 3300 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 literal 2595 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 { t.snapshot(await res); }); +test("parse Table from PDF file, using TableParser", async (t) => { + const matrix = await new Promise((resolve, reject) => { + // the thresholds were determined manually, based on the horizontal position (x) for column headers + const colThresholds = [6.8, 9.5, 13.3, 16.7, 18.4, 28, 32, 36, Infinity]; + + const columnQuantitizer = (item) => { + const col = colThresholds.findIndex( + (colThreshold) => parseFloat(item.x) < colThreshold + ); + assert(col >= 0, col); + assert(col < colThresholds.length, col); + // console.log(`COL ${col}\t${parseFloat(item.x)}\t${item.text}`); + return col; + }; + + const table = new lib.TableParser(); + new PdfReader().parseFileItems("./test/sample-table.pdf", (err, item) => { + if (err) reject(err); + else if (!item) { + resolve(table.getCleanMatrix({ collisionSeparator: "" })); + } else if (item.text) { + table.processItem(item, columnQuantitizer(item)); + } + }); + }); + // console.table(matrix); + t.snapshot(matrix); +}); + test("support pdf file with password", async (t) => { const promise = new Promise((resolve, reject) => new PdfReader({ password: "password" }).parseFileItems(