From c161dfe69d298d7453342cc55a96b5db081302e6 Mon Sep 17 00:00:00 2001 From: Augustin Mauroy <97875033+AugustinMauroy@users.noreply.github.com> Date: Tue, 24 Jan 2023 16:46:44 +0100 Subject: [PATCH 01/21] chore(github issue): fit with nodejs.dev --- .../{02-feature-request.yml => 02-feature-proposal.yml} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename .github/ISSUE_TEMPLATE/{02-feature-request.yml => 02-feature-proposal.yml} (94%) diff --git a/.github/ISSUE_TEMPLATE/02-feature-request.yml b/.github/ISSUE_TEMPLATE/02-feature-proposal.yml similarity index 94% rename from .github/ISSUE_TEMPLATE/02-feature-request.yml rename to .github/ISSUE_TEMPLATE/02-feature-proposal.yml index 4ba32b7ac8354..10f107fea2970 100644 --- a/.github/ISSUE_TEMPLATE/02-feature-request.yml +++ b/.github/ISSUE_TEMPLATE/02-feature-proposal.yml @@ -1,4 +1,4 @@ -name: 🚀 Feature Request For Nodejs Website +name: 🚀 Feature Proposal for the Node.js website description: I have a suggestion (and may want to implement it)! labels: [feature request] body: From 3d1bc0a8568f5d27b8a5216bc1b18096cc5ecfbf Mon Sep 17 00:00:00 2001 From: Michael Dawson Date: Tue, 7 Feb 2023 12:57:45 -0500 Subject: [PATCH 02/21] doc: announce Feb security release (#5042) * doc: announce Feb security release Signed-off-by: Michael Dawson * Update locale/en/blog/vulnerability/february-2023-security-releases.md Signed-off-by: Michael Dawson --------- Signed-off-by: Michael Dawson --- .../february-2023-security-releases.md | 42 +++++++++++++++++++ locale/en/site.json | 8 ++-- 2 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 locale/en/blog/vulnerability/february-2023-security-releases.md diff --git a/locale/en/blog/vulnerability/february-2023-security-releases.md b/locale/en/blog/vulnerability/february-2023-security-releases.md new file mode 100644 index 0000000000000..ef5f16e598753 --- /dev/null +++ b/locale/en/blog/vulnerability/february-2023-security-releases.md @@ -0,0 +1,42 @@ +--- +date: 2023-02-07T17:00:00.000Z +category: vulnerability +title: Tuesday February 14 2023 Security Releases +slug: february-2023-security-releases +layout: blog-post.hbs +author: Michael Dawson +--- + +Pre-release announce + +# Summary + +The Node.js project will release new versions of the 14.x, 16.x, 18.x and 19.x +releases lines on or shortly after, Tuesday February 14 2023 in order to address: + +* 2 low severity issues. +* 2 medium severity issues. +* 1 high severity issues. +* OpenSSL security updates for which the highest vulnerability severity is high. You + can read more about this update in the + [OpenSSL security advisory](https://www.openssl.org/news/secadv/20230207.txt). + +## Impact + +The 19.x release line of Node.js is vulnerable to 2 low severity issues, 2 medium severity issues and 1 high severity issue and the OpenSSL vulnerabilities. + +The 18.x release line of Node.js is vulnerable to 2 low severity issues, 2 medium severity issues and 1 high severity issue and the OpenSSL vulnerabilities. + +The 16.x release line of Node.js is vulnerable to 2 low severity issues, 2 medium severity issues, and 1 high severity issue and the OpenSSL vulnerabilities. + +The 14.x release line of Node.js is vulnerable to 1 low severity issue, and 1 high severity issue and the OpenSSL vulnerabilities. + +## Release timing + +Releases will be available on, or shortly after, Tuesday February 14 2023. + +## Contact and future updates + +The current Node.js security policy can be found at https://nodejs.org/en/security/. Please follow the process outlined in https://github.com/nodejs/node/blob/master/SECURITY.md if you wish to report a vulnerability in Node.js. + +Subscribe to the low-volume announcement-only nodejs-sec mailing list at https://groups.google.com/forum/#!forum/nodejs-sec to stay up to date on security vulnerabilities and security-related releases of Node.js and the projects maintained in the nodejs GitHub organization. diff --git a/locale/en/site.json b/locale/en/site.json index 79dad5dbd0e28..153c25e729700 100644 --- a/locale/en/site.json +++ b/locale/en/site.json @@ -131,10 +131,10 @@ }, "banners": { "index": { - "startDate": "2022-12-16T17:00:00.000Z", - "endDate": "2022-12-30T16:00:00.000Z", - "text": "Node.js assessment of OpenSSL 3.0.7 security advisory", - "link": "https://nodejs.org/en/blog/vulnerability/openssl-fixes-in-regular-releases-dec2022/" + "startDate": "2023-02-14T16:00:00.000Z", + "endDate": "2023-03-07T23:00:00.000Z", + "text": "New security releases to be made available February 14th, 2023", + "link": "https://nodejs.org/en/blog/vulnerability/february-2023-security-releases/" }, "blacklivesmatter": { "visible": false, From cb1e39c846e4d7a79b1511766073da6327622a01 Mon Sep 17 00:00:00 2001 From: Michael Dawson Date: Tue, 7 Feb 2023 15:16:06 -0500 Subject: [PATCH 03/21] fix banner start date for security release announce (#5043) Signed-off-by: Michael Dawson --- locale/en/site.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locale/en/site.json b/locale/en/site.json index 153c25e729700..6410ee155ff8d 100644 --- a/locale/en/site.json +++ b/locale/en/site.json @@ -131,7 +131,7 @@ }, "banners": { "index": { - "startDate": "2023-02-14T16:00:00.000Z", + "startDate": "2023-02-07T16:00:00.000Z", "endDate": "2023-03-07T23:00:00.000Z", "text": "New security releases to be made available February 14th, 2023", "link": "https://nodejs.org/en/blog/vulnerability/february-2023-security-releases/" From d548a3cfb6aba0d94df48d9a008a0a01b8ffa6c3 Mon Sep 17 00:00:00 2001 From: Frank Dana Date: Sun, 12 Feb 2023 07:14:05 -0500 Subject: [PATCH 04/21] docs(security): typo-squirting => typosquatting (#5044) --- locale/en/docs/guides/security/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locale/en/docs/guides/security/index.md b/locale/en/docs/guides/security/index.md index 68479fc9a4a46..f46c369fb1587 100644 --- a/locale/en/docs/guides/security/index.md +++ b/locale/en/docs/guides/security/index.md @@ -20,7 +20,7 @@ to Node.js, if you are looking for something broad, consider * Attacks explained: illustrate and document in plain English with some code example (if possible) the attacks that we are mentioning in the threat model. * Third-Party Libraries: define threats -(typo-squirting attacks, malicious packages...) and best practices regarding +(typosquatting attacks, malicious packages...) and best practices regarding node modules dependencies, etc... ## Threat List From 9476a8c8797512e4e3ffadccc131fa1484ae7d19 Mon Sep 17 00:00:00 2001 From: Michael Dawson Date: Tue, 14 Feb 2023 10:24:59 -0500 Subject: [PATCH 05/21] doc: share new target for security releases (#5047) Signed-off-by: Michael Dawson --- .../vulnerability/february-2023-security-releases.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/locale/en/blog/vulnerability/february-2023-security-releases.md b/locale/en/blog/vulnerability/february-2023-security-releases.md index ef5f16e598753..41620c2c62365 100644 --- a/locale/en/blog/vulnerability/february-2023-security-releases.md +++ b/locale/en/blog/vulnerability/february-2023-security-releases.md @@ -1,5 +1,5 @@ --- -date: 2023-02-07T17:00:00.000Z +date: 2023-02-14T14:00:00.000Z category: vulnerability title: Tuesday February 14 2023 Security Releases slug: february-2023-security-releases @@ -7,9 +7,12 @@ layout: blog-post.hbs author: Michael Dawson --- -Pre-release announce +## _(Update 14-February-2023)_ 2 Day delay in security releases -# Summary +The Node.js project is delaying the planned security releases until Thursday +February 16 2023 due to the need for additional testing and validation. + +## _(Update 7-February-2023)_ Summary The Node.js project will release new versions of the 14.x, 16.x, 18.x and 19.x releases lines on or shortly after, Tuesday February 14 2023 in order to address: From 50065443c9c88cc08bce842d43c9cfaba62c7f3d Mon Sep 17 00:00:00 2001 From: Michael Dawson Date: Tue, 14 Feb 2023 10:46:22 -0500 Subject: [PATCH 06/21] doc: update banner for new security release date (#5048) Signed-off-by: Michael Dawson --- locale/en/site.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locale/en/site.json b/locale/en/site.json index 6410ee155ff8d..3eeadf6fd309d 100644 --- a/locale/en/site.json +++ b/locale/en/site.json @@ -133,7 +133,7 @@ "index": { "startDate": "2023-02-07T16:00:00.000Z", "endDate": "2023-03-07T23:00:00.000Z", - "text": "New security releases to be made available February 14th, 2023", + "text": "New security releases to be made available February 16th, 2023", "link": "https://nodejs.org/en/blog/vulnerability/february-2023-security-releases/" }, "blacklivesmatter": { From 3cc96a6af8c802afd1e367a7e3d99dd784fae126 Mon Sep 17 00:00:00 2001 From: Richard Lau Date: Thu, 16 Feb 2023 22:27:00 +0000 Subject: [PATCH 07/21] Blog: v14.21.3 release post (#5051) Refs: https://github.com/nodejs-private/node-private/pull/389 --- locale/en/blog/release/v14.21.3.md | 112 +++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 locale/en/blog/release/v14.21.3.md diff --git a/locale/en/blog/release/v14.21.3.md b/locale/en/blog/release/v14.21.3.md new file mode 100644 index 0000000000000..6475190ed9ce4 --- /dev/null +++ b/locale/en/blog/release/v14.21.3.md @@ -0,0 +1,112 @@ +--- +date: 2023-02-16T22:08:13.523Z +version: 14.21.3 +category: release +title: Node v14.21.3 (LTS) +slug: node-v14-21-3 +layout: blog-post.hbs +author: Richard Lau +--- + +### Notable Changes + +The following CVEs are fixed in this release: + +* **[CVE-2023-23918](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-23918)**: Node.js Permissions policies can be bypassed via process.mainModule (High) +* **[CVE-2023-23920](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-23920)**: Node.js insecure loading of ICU data through ICU\_DATA environment variable (Low) + +More detailed information on each of the vulnerabilities can be found in [February 2023 Security Releases](https://nodejs.org/en/blog/vulnerability/february-2023-security-releases/) blog post. + +This security release includes OpenSSL security updates as outlined in the recent +[OpenSSL security advisory](https://www.openssl.org/news/secadv/20230207.txt). + +This security release also includes an npm update for Node.js 14 to address a number +of CVEs which either do not affect Node.js or are low severity in the context of Node.js. You +can get more details for the individual CVEs in +[nodejs-dependency-vuln-assessments](https://github.com/nodejs/nodejs-dependency-vuln-assessments). + +### Commits + +* \[[`97a0443f13`](https://github.com/nodejs/node/commit/97a0443f13)] - **build**: build ICU with ICU\_NO\_USER\_DATA\_OVERRIDE (RafaelGSS) [nodejs-private/node-private#374](https://github.com/nodejs-private/node-private/pull/374) +* \[[`9e6221529b`](https://github.com/nodejs/node/commit/9e6221529b)] - **deps**: cherry-pick Windows ARM64 fix for openssl (Richard Lau) [#46566](https://github.com/nodejs/node/pull/46566) +* \[[`0d5f86451d`](https://github.com/nodejs/node/commit/0d5f86451d)] - **deps**: update archs files for OpenSSL-1.1.1t (RafaelGSS) [#46566](https://github.com/nodejs/node/pull/46566) +* \[[`8c11d17b40`](https://github.com/nodejs/node/commit/8c11d17b40)] - **deps**: upgrade openssl sources to 1.1.1t (RafaelGSS) [#46566](https://github.com/nodejs/node/pull/46566) +* \[[`224e93c9ef`](https://github.com/nodejs/node/commit/224e93c9ef)] - **deps**: upgrade npm to 6.14.18 (Ruy Adorno) [#45936](https://github.com/nodejs/node/pull/45936) +* \[[`d73ea4de13`](https://github.com/nodejs/node/commit/d73ea4de13)] - **doc**: clarify release notes for Node.js 14.21.2 (Richard Lau) [#45846](https://github.com/nodejs/node/pull/45846) +* \[[`f7892c16be`](https://github.com/nodejs/node/commit/f7892c16be)] - **lib**: makeRequireFunction patch when experimental policy (RafaelGSS) [nodejs-private/node-private#358](https://github.com/nodejs-private/node-private/pull/358) +* \[[`fa115ee8ac`](https://github.com/nodejs/node/commit/fa115ee8ac)] - **module**: protect against prototype mutation (Antoine du Hamel) [#44007](https://github.com/nodejs/node/pull/44007) +* \[[`83975b7fb4`](https://github.com/nodejs/node/commit/83975b7fb4)] - **policy**: makeRequireFunction on mainModule.require (RafaelGSS) [nodejs-private/node-private#358](https://github.com/nodejs-private/node-private/pull/358) +* \[[`a5f8798d7a`](https://github.com/nodejs/node/commit/a5f8798d7a)] - **test**: avoid left behind child processes (Richard Lau) [#46276](https://github.com/nodejs/node/pull/46276) + +Windows 32-bit Installer: https://nodejs.org/dist/v14.21.3/node-v14.21.3-x86.msi
+Windows 64-bit Installer: https://nodejs.org/dist/v14.21.3/node-v14.21.3-x64.msi
+Windows 32-bit Binary: https://nodejs.org/dist/v14.21.3/win-x86/node.exe
+Windows 64-bit Binary: https://nodejs.org/dist/v14.21.3/win-x64/node.exe
+macOS 64-bit Installer: https://nodejs.org/dist/v14.21.3/node-v14.21.3.pkg
+macOS Intel 64-bit Binary: https://nodejs.org/dist/v14.21.3/node-v14.21.3-darwin-x64.tar.gz
+Linux 64-bit Binary: https://nodejs.org/dist/v14.21.3/node-v14.21.3-linux-x64.tar.xz
+Linux PPC LE 64-bit Binary: https://nodejs.org/dist/v14.21.3/node-v14.21.3-linux-ppc64le.tar.xz
+Linux s390x 64-bit Binary: https://nodejs.org/dist/v14.21.3/node-v14.21.3-linux-s390x.tar.xz
+AIX 64-bit Binary: https://nodejs.org/dist/v14.21.3/node-v14.21.3-aix-ppc64.tar.gz
+ARMv7 32-bit Binary: https://nodejs.org/dist/v14.21.3/node-v14.21.3-linux-armv7l.tar.xz
+ARMv8 64-bit Binary: https://nodejs.org/dist/v14.21.3/node-v14.21.3-linux-arm64.tar.xz
+Source Code: https://nodejs.org/dist/v14.21.3/node-v14.21.3.tar.gz
+Other release files: https://nodejs.org/dist/v14.21.3/
+Documentation: https://nodejs.org/docs/v14.21.3/api/ + +### SHASUMS + +``` +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA256 + +41b1e54022e2ed4340ae76ef3cdbb06c6693faaadd869b21c5a04664a34aa12e node-v14.21.3-aix-ppc64.tar.gz +a024f0dd5a4c1f951b79959c3e991b30a5919a734ab3e197ae0ef439e5a538b5 node-v14.21.3-darwin-x64.tar.gz +2bc2ecc27a926114827fa26b47ac9bfbd805393a867bedd157b6b052daa20f6e node-v14.21.3-darwin-x64.tar.xz +b9ee97f61ba64e2056baa6a7faec4d56c96e5020b56e5f05f5ee801f54f3b1f3 node-v14.21.3-headers.tar.gz +b5393b510a579e9bc48bce01dbc637f578a3bbc5cb50c757d8fc2873e06ac7ae node-v14.21.3-headers.tar.xz +044b7ec3fea04cd3815d26901ee37203dcc942688b72ee6eac96f6a1ca3cc63f node-v14.21.3-linux-arm64.tar.gz +f06642bfcf0b8cc50231624629bec58b183954641b638e38ed6f94cd39e8a6ef node-v14.21.3-linux-arm64.tar.xz +260539da086a3f293e1b205c9075442224d6587bee7935d7880948277c55080f node-v14.21.3-linux-armv7l.tar.gz +058941ad1b1250973f6dd49b2fcfdfd05a5b61de0f690cbd301b7a7fcc040f97 node-v14.21.3-linux-armv7l.tar.xz +20f0d9dafda50d5bcb94ea16fa388251898cad70231b50e17840facb9add3ac1 node-v14.21.3-linux-ppc64le.tar.gz +821a207405afe4c224da5aea6c4417b0b9bb6149cd49fe1fcde0fd7027bc113f node-v14.21.3-linux-ppc64le.tar.xz +bb82e379ccb1db3704216136e5db216f8f232069bb5615af401d6251a5b826be node-v14.21.3-linux-s390x.tar.gz +a241aa16cbf5485ebc54955bec42a81334278808174fcfd4199bcc3256f77eb0 node-v14.21.3-linux-s390x.tar.xz +bef2685d9469058c1229cc7789e171861044fe3f70316ec744e9bf3609cd45ed node-v14.21.3-linux-x64.tar.gz +05c08a107c50572ab39ce9e8663a2a2d696b5d262d5bd6f98d84b997ce932d9a node-v14.21.3-linux-x64.tar.xz +125be8d347f9d14f6f12ca3507c7a19b0939cbcbb3788463ae5a94b50520113f node-v14.21.3.pkg +97eb4c0ea1ffb73eb0486db5125e5351f744e65df6b3d10fbc0611dec7fd27cb node-v14.21.3.tar.gz +458ec092e60ad700ddcf079cb63d435c15da4c7bb3d3f99b9a8e58a99e54075e node-v14.21.3.tar.xz +a00c71e662cb1752f180e54921ca2c79bdefc7200a51b8805888ac3723889579 node-v14.21.3-win-x64.7z +47cfb919bb86ab681369636a9cb925e2bd61991aad1638b2e38e61ec956796a6 node-v14.21.3-win-x64.zip +7a1f86386bb5f39c93bfd910a10966c69331c3f775457c0ea0c044ee6fbf000f node-v14.21.3-win-x86.7z +d416decafadbc50dc9fa357f5b97b279b15a712ff432422e3abd8b65d26c07b2 node-v14.21.3-win-x86.zip +4fbb9ff48fe733cef0b65f2c0948ba34b5d4b65ebfa1aa2dcd9c913c7b2bf95e node-v14.21.3-x64.msi +d07fb9f6c41d2b2568d42a76d3556706a626125981d12421fef6d4682cb7ae59 node-v14.21.3-x86.msi +af7e8acdcb41bf961cbfc062c8e52b4775703aa6403d34e0f4fe8359d34e78c5 win-x64/node.exe +5226634dfd3f9a99dd40ca374fe654b6ed4fdb1890c629a3426e34e212fb011c win-x64/node.lib +4b9e6940a4d769c50391c573277b44f279644a19d22464de8fe8a09051d01149 win-x64/node_pdb.7z +607670ec389b44c0b5f5e231e3e40d3e39876740d3f86c2b61acea125bbb6dfe win-x64/node_pdb.zip +32ee127315a72ac19017811632a5cae8359f8474eddf78de79462cf0321d5a33 win-x86/node.exe +e1e44fce63711f68656b246488b63e2ebbfd3e3ea8253d9a8fa264d526c80508 win-x86/node.lib +c6a5dd0c138cc41d69d1c40a5687c9c3c97ca17128b7a3e3f57e27841d8a512e win-x86/node_pdb.7z +4c275b9ab908556499b649a9dde14e9061c727e0c264241b744dac86e0461f1d win-x86/node_pdb.zip +-----BEGIN PGP SIGNATURE----- + +iQIzBAEBCAAdFiEEyC+jrhy+3Gvka5NgxDzsRcF6uTwFAmPup+gACgkQxDzsRcF6 +uTwvHw/+OfFLpAVfoHjOAwwp+ziQ2uO4K3UI0mCHw96c0y2bSJyX960RuUVLOT2C +srTIEhfaBnyxJtc0ldyFuscKWgOUg0C0HPb8scLh2E5bo5UxEL/VFQCe6wXX5kCY +RZjfOFyRHnKytTj/LvZB4WHOgHjduYJNLZlpvSzjVqRR2wmsKtAFgMP//mW0VBdU +lQ7GG1tj7VbR3aiB6c/VqFGannGVf3h1dZ1lYHINfHZJXUKBwOaGjEqjcy2ddqMz +39froNI82m94FX1QwYVVdyDIMHPsbZgKZm6YK173rUyroM7/52T0oTc63KPRRkMB +tDYkuux17vNsdaFiWr8E8nEkcuqASHYBWv8JwJqeYbtsnLQEY7vVnFfe6J7rI6uw +PWtukqXq8c59mZlD4bMFZCcwBmPpew2r+dpuo+6Az4JRRVVuCJosKO4RirVE45q3 +4dSBnRep5IODyFUZM/Jq+ALf32UYfbL81JObIl6fBCQL+2kJ6Y3XeafKQYfVBNFJ +PUxVyCkk8uv09Z1XGmE+0dLiDrZmlCjqFkoWFO4zyTM1VEU1K9j2WeEU3Qe+A1+i +Dwz7Lka4L7mvwSRt/+EiNrLnl0thrmdZYnIn5uP+ttpln1uuWzGqPhUhU4yO3Qu3 +ENXrECAECeMBkLCC1yEFPizMmPwy8GagDk5O7L6Dmh7oM1SM6lQ= +=g7My +-----END PGP SIGNATURE----- + +``` From f745585e88bbefe6da5bfa784ef926ff92223423 Mon Sep 17 00:00:00 2001 From: Richard Lau Date: Thu, 16 Feb 2023 22:27:11 +0000 Subject: [PATCH 08/21] Blog: v16.19.1 release post (#5052) Refs: https://github.com/nodejs-private/node-private/pull/390 --- locale/en/blog/release/v16.19.1.md | 120 +++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 locale/en/blog/release/v16.19.1.md diff --git a/locale/en/blog/release/v16.19.1.md b/locale/en/blog/release/v16.19.1.md new file mode 100644 index 0000000000000..e83ae4b72fb1d --- /dev/null +++ b/locale/en/blog/release/v16.19.1.md @@ -0,0 +1,120 @@ +--- +date: 2023-02-16T22:16:31.243Z +version: 16.19.1 +category: release +title: Node v16.19.1 (LTS) +slug: node-v16-19-1 +layout: blog-post.hbs +author: Richard Lau +--- + +### Notable Changes + +The following CVEs are fixed in this release: + +* **[CVE-2023-23918](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-23918)**: Node.js Permissions policies can be bypassed via process.mainModule (High) +* **[CVE-2023-23919](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-23919)**: Node.js OpenSSL error handling issues in nodejs crypto library (Medium) +* **[CVE-2023-23920](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-23920)**: Node.js insecure loading of ICU data through ICU\_DATA environment variable (Low) + +Fixed by an update to undici: + +* **[CVE-2023-23936](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-23936)**: Fetch API in Node.js did not protect against CRLF injection in host headers (Medium) + * See for more information. +* **[CVE-2023-24807](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-24807)**: Regular Expression Denial of Service in Headers in Node.js fetch API (Low) + * See for more information. + +More detailed information on each of the vulnerabilities can be found in [February 2023 Security Releases](https://nodejs.org/en/blog/vulnerability/february-2023-security-releases/) blog post. + +This security release includes OpenSSL security updates as outlined in the recent +[OpenSSL security advisory](https://www.openssl.org/news/secadv/20230207.txt). + +### Commits + +* \[[`7fef050447`](https://github.com/nodejs/node/commit/7fef050447)] - **build**: build ICU with ICU\_NO\_USER\_DATA\_OVERRIDE (RafaelGSS) [nodejs-private/node-private#374](https://github.com/nodejs-private/node-private/pull/374) +* \[[`b558e9f476`](https://github.com/nodejs/node/commit/b558e9f476)] - **crypto**: clear OpenSSL error on invalid ca cert (RafaelGSS) [nodejs-private/node-private#375](https://github.com/nodejs-private/node-private/pull/375) +* \[[`160adb7ffc`](https://github.com/nodejs/node/commit/160adb7ffc)] - **crypto**: clear OpenSSL error queue after calling X509\_check\_private\_key() (Filip Skokan) [#45495](https://github.com/nodejs/node/pull/45495) +* \[[`d0ece30948`](https://github.com/nodejs/node/commit/d0ece30948)] - **crypto**: clear OpenSSL error queue after calling X509\_verify() (Takuro Sato) [#45377](https://github.com/nodejs/node/pull/45377) +* \[[`2d9ae4f184`](https://github.com/nodejs/node/commit/2d9ae4f184)] - **deps**: update undici to v5.19.1 (Matteo Collina) [nodejs-private/node-private#388](https://github.com/nodejs-private/node-private/pull/388) +* \[[`d80e8312fd`](https://github.com/nodejs/node/commit/d80e8312fd)] - **deps**: cherry-pick Windows ARM64 fix for openssl (Richard Lau) [#46568](https://github.com/nodejs/node/pull/46568) +* \[[`de5c8d2c2f`](https://github.com/nodejs/node/commit/de5c8d2c2f)] - **deps**: update archs files for quictls/openssl-1.1.1t+quic (RafaelGSS) [#46568](https://github.com/nodejs/node/pull/46568) +* \[[`1a8ccfe908`](https://github.com/nodejs/node/commit/1a8ccfe908)] - **deps**: upgrade openssl sources to OpenSSL\_1\_1\_1t+quic (RafaelGSS) [#46568](https://github.com/nodejs/node/pull/46568) +* \[[`693789780b`](https://github.com/nodejs/node/commit/693789780b)] - **doc**: clarify release notes for Node.js 16.19.0 (Richard Lau) [#45846](https://github.com/nodejs/node/pull/45846) +* \[[`f95ef064f4`](https://github.com/nodejs/node/commit/f95ef064f4)] - **lib**: makeRequireFunction patch when experimental policy (RafaelGSS) [nodejs-private/node-private#358](https://github.com/nodejs-private/node-private/pull/358) +* \[[`b02d895137`](https://github.com/nodejs/node/commit/b02d895137)] - **policy**: makeRequireFunction on mainModule.require (RafaelGSS) [nodejs-private/node-private#358](https://github.com/nodejs-private/node-private/pull/358) +* \[[`d7f83c420c`](https://github.com/nodejs/node/commit/d7f83c420c)] - **test**: avoid left behind child processes (Richard Lau) [#46276](https://github.com/nodejs/node/pull/46276) + +Windows 32-bit Installer: https://nodejs.org/dist/v16.19.1/node-v16.19.1-x86.msi
+Windows 64-bit Installer: https://nodejs.org/dist/v16.19.1/node-v16.19.1-x64.msi
+Windows 32-bit Binary: https://nodejs.org/dist/v16.19.1/win-x86/node.exe
+Windows 64-bit Binary: https://nodejs.org/dist/v16.19.1/win-x64/node.exe
+macOS 64-bit Installer: https://nodejs.org/dist/v16.19.1/node-v16.19.1.pkg
+macOS Apple Silicon 64-bit Binary: https://nodejs.org/dist/v16.19.1/node-v16.19.1-darwin-arm64.tar.gz
+macOS Intel 64-bit Binary: https://nodejs.org/dist/v16.19.1/node-v16.19.1-darwin-x64.tar.gz
+Linux 64-bit Binary: https://nodejs.org/dist/v16.19.1/node-v16.19.1-linux-x64.tar.xz
+Linux PPC LE 64-bit Binary: https://nodejs.org/dist/v16.19.1/node-v16.19.1-linux-ppc64le.tar.xz
+Linux s390x 64-bit Binary: https://nodejs.org/dist/v16.19.1/node-v16.19.1-linux-s390x.tar.xz
+AIX 64-bit Binary: https://nodejs.org/dist/v16.19.1/node-v16.19.1-aix-ppc64.tar.gz
+ARMv7 32-bit Binary: https://nodejs.org/dist/v16.19.1/node-v16.19.1-linux-armv7l.tar.xz
+ARMv8 64-bit Binary: https://nodejs.org/dist/v16.19.1/node-v16.19.1-linux-arm64.tar.xz
+Source Code: https://nodejs.org/dist/v16.19.1/node-v16.19.1.tar.gz
+Other release files: https://nodejs.org/dist/v16.19.1/
+Documentation: https://nodejs.org/docs/v16.19.1/api/ + +### SHASUMS + +``` +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA256 + +b93adce984bca2712bf4e48c49f828cd1ae1a8d89e6ebd9e4fecb2165cf6b438 node-v16.19.1-aix-ppc64.tar.gz +168f787f457bf645f3fc41e7419b62071db7d42519ce461b1d7ebfc0acbdbfb1 node-v16.19.1-darwin-arm64.tar.gz +69113e841529e7bd162f96890ce3bf4f59e88908cb264ad3ff75401d7f632f79 node-v16.19.1-darwin-arm64.tar.xz +d7f683b2a8f78db8a28235a175e130c760f0d3cd335404e02f223e3a9adc30c7 node-v16.19.1-darwin-x64.tar.gz +6127d4a82697365214434d06889811de36cb8da86c4c0058d16324a1a66cedb0 node-v16.19.1-darwin-x64.tar.xz +b2d010190ad40b52ab2fb92131db51375ef682a37f924fe2ce3813767d68fee9 node-v16.19.1-headers.tar.gz +0097c65867748073530e19df21071f1b7567465b5b454275b6a98c37828b0827 node-v16.19.1-headers.tar.xz +d4bfa62f5b1aacf74169e8ff58af812d0ef34ef6152c6ad812f220e9bf6cc462 node-v16.19.1-linux-arm64.tar.gz +042b3ae7e994a77bfdb0e366d0389c1b7602bb744830da15f9325f404f979ce2 node-v16.19.1-linux-arm64.tar.xz +53d88ced853a9e2fa80a216764ff42fb971d0b46c0a16c5e2dc99beead9bc5d8 node-v16.19.1-linux-armv7l.tar.gz +dc03071a0e46dd59eb2e60624b1c4a8bb258530be58271a64a2e13274c8b4734 node-v16.19.1-linux-armv7l.tar.xz +0e8121a1fdcdcd27d48cd8391089051b8e4a9e1902847c0561692789f3c41999 node-v16.19.1-linux-ppc64le.tar.gz +cfbeb41a5fbc15b4fbd12abdc6cfef5668ed6bdfc30b68c5d244dd80be1d0e78 node-v16.19.1-linux-ppc64le.tar.xz +4bc7b66cc00dd15a01055e9b403d7efff4a36331fa00bf9dc69989d8bca667ae node-v16.19.1-linux-s390x.tar.gz +3291a5d092631462df757470ef601da37ba973e9ec749cac7417edb53e79ca73 node-v16.19.1-linux-s390x.tar.xz +ca63da538e02de15b7e974f7a17ce4732cc0d63023942301d30044c472ed9ddd node-v16.19.1-linux-x64.tar.gz +fa796a23837dc5c22914b1349b6117df4d497e2001a4cd7b28b0767e22f3bb51 node-v16.19.1-linux-x64.tar.xz +5b44e1d083ea379dbf6c2c431f74f7990da6e77bd898d3b2a324240015fc28b3 node-v16.19.1.pkg +e795d23b2924b69e02fcc670335a5cd3a7ce121557fdc585f9e5bda0e77550ea node-v16.19.1.tar.gz +17fb716406198125b30c94dd3d1756207b297705626afe16d8dc479a65a1d8b5 node-v16.19.1.tar.xz +020930ed45d64055ed37cc4a607d7f352554057ccaeeedbbea41e4230062084d node-v16.19.1-win-x64.7z +77e0198497fee24552d6a6f1737eed595b619af1b749ee0bee4b938026e55f73 node-v16.19.1-win-x64.zip +2dbb3636f7fc15f79ceed94384a8dc56d25b9cab1ed588d284f7fe5427125afc node-v16.19.1-win-x86.7z +180ffdbfa86ddc82520f05f31bdda6a8237e24a2dd8cd39f53ceb2f6dfbdf4a3 node-v16.19.1-win-x86.zip +7b1f2c62b91b599fb8c7ecddc34385ec1b7a99092aaaca74bec8e2caa3623687 node-v16.19.1-x64.msi +9d73be67ed7b953afa220efb642121e64c2bb9d8319c883e07cf1ef267b0614f node-v16.19.1-x86.msi +264fa3ca6ad85c396729b66d21b17763c242ad6681b1f3902bcdbce1f1d45828 win-x64/node.exe +d6bada534f8806049a8a05f2a7d99e2a1fcf3675d3269b2a887da6c0c42f0929 win-x64/node.lib +8eb738110c8a3ac88d9decd57e0c6cf96b66a1902d0a71c1d44510780893a52b win-x64/node_pdb.7z +4292dbbcac393b9a5f8f96dd58ec595c610607cc7bd99ff339b7fba2066023fe win-x64/node_pdb.zip +28ef8332f6cd83d2610da9179862a6ee3a0ed39167f0838584f2571a059e96a9 win-x86/node.exe +b171f4785f44b475710a24f1d0eb3f0333082a7f288e5a2b7fcc56866f75af51 win-x86/node.lib +5261515011c9cdd4085322de172fb0ac7063fbbfa7ee6d65599f64b383490188 win-x86/node_pdb.7z +e5e2ba8f6235de813f04673f94d408b84733ab7f03d3c613a2be2d269c21a9e1 win-x86/node_pdb.zip +-----BEGIN PGP SIGNATURE----- + +iQIzBAEBCAAdFiEEyC+jrhy+3Gvka5NgxDzsRcF6uTwFAmPuqBMACgkQxDzsRcF6 +uTxwOw//QQ16C1RIWDULSqzl7/jvRRHNhNPh/m/vYjr1IMiE+LSwgY+IyQEhMv4T +sxFSX/I3HmqVDsTUN7PjTUrDEK7Ps4/NDJFVJLl+hFnR7tbvOXczrmJfjhSngLFc +4bEKCGzo0dXxx3iG5Fa1GS1ejwpoXgbSzZj4AoyO1mAiWXoesxKFqcdOfHD7KhDu +gTD4IHvNwpIDbCjGBpURJzeFvo37LhGdypUuW411ONiiHEC1bfip1n3TI5faIkZm +SEaFrZ9nZNeF5DZqO1zyL51gjranXhT7UhcJTJ18fsTn2rheaBwiXnjl5S93aK9t +jZIn7diilJ1khcKzsBQQlbE2EJmhji1374vLiYtB7zSlKA3X+MAxdPQFvnRoXtyh +hbMjTSJMZ3Jw6ouLNYqdDPdZIWUtuwPJvQSUr9EyWYbKN739V+84bOBlx1g37h5g +CwiKmdSGog8MOMun4TQVL1Ods12nf535Fqiaq5puwl9+CQfui7nbLKZ6QgI9VwPA +yYaU4vDFp9uby08seQHd6IDpo9ckX0Yr3ztzV5Hx5UpO7xSbjCVsOakeiID3/rF+ +tITN21uMFYH6HfAGP3aHdxGe6PE68w2CViKYLqtxKhW5SwkD8+ITQTVYaXNIscag +tAp/Jup48gN8m1tlffMRtQoe3DPNU+1B1y/HfuQ1iXNk7hkgB6k= +=XWk1 +-----END PGP SIGNATURE----- + +``` From 7dbb7c1f0f8ce0a03dc585ed6f9134cd84f480dd Mon Sep 17 00:00:00 2001 From: Rafael Gonzaga Date: Thu, 16 Feb 2023 19:31:37 -0300 Subject: [PATCH 09/21] Blog: v18.14.1 release post (#5054) Refs: https://github.com/nodejs-private/node-private/pull/386 --- locale/en/blog/release/v18.14.1.md | 114 +++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 locale/en/blog/release/v18.14.1.md diff --git a/locale/en/blog/release/v18.14.1.md b/locale/en/blog/release/v18.14.1.md new file mode 100644 index 0000000000000..595069e09757a --- /dev/null +++ b/locale/en/blog/release/v18.14.1.md @@ -0,0 +1,114 @@ +--- +date: 2023-02-16T22:22:52.706Z +version: 18.14.1 +category: release +title: Node v18.14.1 (LTS) +slug: node-v18-14-1 +layout: blog-post.hbs +author: Rafael Gonzaga +--- + +### Notable Changes + +The following CVEs are fixed in this release: + +* **[CVE-2023-23918](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-23918)**: Node.js Permissions policies can be bypassed via process.mainModule (High) +* **[CVE-2023-23919](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-23919)**: Node.js OpenSSL error handling issues in nodejs crypto library (Medium) +* **[CVE-2023-23936](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-23936)**: Fetch API in Node.js did not protect against CRLF injection in host headers (Medium) +* **[CVE-2023-24807](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-24807)**: Regular Expression Denial of Service in Headers in Node.js fetch API (Low) +* **[CVE-2023-23920](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-23920)**: Node.js insecure loading of ICU data through ICU\_DATA environment variable (Low) + +More detailed information on each of the vulnerabilities can be found in [February 2023 Security Releases](https://nodejs.org/en/blog/vulnerability/february-2023-security-releases/) blog post. + +This security release includes OpenSSL security updates as outlined in the recent +[OpenSSL security advisory](https://www.openssl.org/news/secadv/20230207.txt). + +### Commits + +* \[[`8393ebc72d`](https://github.com/nodejs/node/commit/8393ebc72d)] - **build**: build ICU with ICU\_NO\_USER\_DATA\_OVERRIDE (RafaelGSS) [nodejs-private/node-private#379](https://github.com/nodejs-private/node-private/pull/379) +* \[[`004e34d046`](https://github.com/nodejs/node/commit/004e34d046)] - **crypto**: clear OpenSSL error on invalid ca cert (RafaelGSS) [#46572](https://github.com/nodejs/node/pull/46572) +* \[[`5e0142a852`](https://github.com/nodejs/node/commit/5e0142a852)] - **deps**: cherry-pick Windows ARM64 fix for openssl (Richard Lau) [#46572](https://github.com/nodejs/node/pull/46572) +* \[[`f71fe278a6`](https://github.com/nodejs/node/commit/f71fe278a6)] - **deps**: update archs files for quictls/openssl-3.0.8+quic (RafaelGSS) [#46572](https://github.com/nodejs/node/pull/46572) +* \[[`2c6817e42b`](https://github.com/nodejs/node/commit/2c6817e42b)] - **deps**: upgrade openssl sources to quictls/openssl-3.0.8+quic (RafaelGSS) [#46572](https://github.com/nodejs/node/pull/46572) +* \[[`f0afa0bfe5`](https://github.com/nodejs/node/commit/f0afa0bfe5)] - **deps**: update undici to 5.19.1 (Node.js GitHub Bot) [#46634](https://github.com/nodejs/node/pull/46634) +* \[[`c26a34c13e`](https://github.com/nodejs/node/commit/c26a34c13e)] - **deps**: update undici to 5.18.0 (Node.js GitHub Bot) [#46634](https://github.com/nodejs/node/pull/46634) +* \[[`db93ee4a15`](https://github.com/nodejs/node/commit/db93ee4a15)] - **deps**: update undici to 5.17.1 (Node.js GitHub Bot) [#46634](https://github.com/nodejs/node/pull/46634) +* \[[`b4e49fb02c`](https://github.com/nodejs/node/commit/b4e49fb02c)] - **deps**: update undici to 5.16.0 (Node.js GitHub Bot) [#46634](https://github.com/nodejs/node/pull/46634) +* \[[`90994e6a2c`](https://github.com/nodejs/node/commit/90994e6a2c)] - **deps**: update undici to 5.15.1 (Node.js GitHub Bot) [#46634](https://github.com/nodejs/node/pull/46634) +* \[[`00302fc7ac`](https://github.com/nodejs/node/commit/00302fc7ac)] - **deps**: update undici to 5.15.0 (Node.js GitHub Bot) [#46634](https://github.com/nodejs/node/pull/46634) +* \[[`0e3b796cc5`](https://github.com/nodejs/node/commit/0e3b796cc5)] - **lib**: makeRequireFunction patch when experimental policy (RafaelGSS) [nodejs-private/node-private#371](https://github.com/nodejs-private/node-private/pull/371) +* \[[`7cccd5565f`](https://github.com/nodejs/node/commit/7cccd5565f)] - **policy**: makeRequireFunction on mainModule.require (RafaelGSS) [nodejs-private/node-private#371](https://github.com/nodejs-private/node-private/pull/371) + +Windows 32-bit Installer: https://nodejs.org/dist/v18.14.1/node-v18.14.1-x86.msi
+Windows 64-bit Installer: https://nodejs.org/dist/v18.14.1/node-v18.14.1-x64.msi
+Windows 32-bit Binary: https://nodejs.org/dist/v18.14.1/win-x86/node.exe
+Windows 64-bit Binary: https://nodejs.org/dist/v18.14.1/win-x64/node.exe
+macOS 64-bit Installer: https://nodejs.org/dist/v18.14.1/node-v18.14.1.pkg
+macOS Apple Silicon 64-bit Binary: https://nodejs.org/dist/v18.14.1/node-v18.14.1-darwin-arm64.tar.gz
+macOS Intel 64-bit Binary: https://nodejs.org/dist/v18.14.1/node-v18.14.1-darwin-x64.tar.gz
+Linux 64-bit Binary: https://nodejs.org/dist/v18.14.1/node-v18.14.1-linux-x64.tar.xz
+Linux PPC LE 64-bit Binary: https://nodejs.org/dist/v18.14.1/node-v18.14.1-linux-ppc64le.tar.xz
+Linux s390x 64-bit Binary: https://nodejs.org/dist/v18.14.1/node-v18.14.1-linux-s390x.tar.xz
+AIX 64-bit Binary: https://nodejs.org/dist/v18.14.1/node-v18.14.1-aix-ppc64.tar.gz
+ARMv7 32-bit Binary: https://nodejs.org/dist/v18.14.1/node-v18.14.1-linux-armv7l.tar.xz
+ARMv8 64-bit Binary: https://nodejs.org/dist/v18.14.1/node-v18.14.1-linux-arm64.tar.xz
+Source Code: https://nodejs.org/dist/v18.14.1/node-v18.14.1.tar.gz
+Other release files: https://nodejs.org/dist/v18.14.1/
+Documentation: https://nodejs.org/docs/v18.14.1/api/ + +### SHASUMS + +``` +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA256 + +702bfe7aaebb49870487ca7a4060ae143caf662bdfdfd3f4c9f033863898f41b node-v18.14.1-aix-ppc64.tar.gz +513f3ab25244c5ea3eedc6218b7418dcd7a0f20e143fdbf8955f0ea74f53c2d8 node-v18.14.1-darwin-arm64.tar.gz +caeaef362c2c41ce918339f002b35c8d55dba841fc3fa26695411e8aa92b7ad9 node-v18.14.1-darwin-arm64.tar.xz +940cfc29b42d174bf8fa271644508ab357b282a669b73adf0935982382ef5f38 node-v18.14.1-darwin-x64.tar.gz +adc24c3d08e88ee7e1191d77984dd911fceb3b50d5d5042541e323ce03c820cf node-v18.14.1-darwin-x64.tar.xz +918b35ae943fcd1bb3ad590ceb7f0441881ecdf5940a2039e4fb5762c40480d2 node-v18.14.1-headers.tar.gz +54ccb6f7d47311888acbddd5a6e6dc29a84bfc63b6b0e741a011e7f3edb6d0c0 node-v18.14.1-headers.tar.xz +608af6ad3cf5a171c889c022cb51a460bdbf57fbb8fbcd40612ea8063aa95f07 node-v18.14.1-linux-arm64.tar.gz +52f33439dcca865bbb70194091f6ce0c02b2a32d5a744901f175fff1ca6d0c86 node-v18.14.1-linux-arm64.tar.xz +f2d25e36289ce702e38ed9c86e3c7a848166b89cb8b54db4e05c9fcd98613aca node-v18.14.1-linux-armv7l.tar.gz +851095516b968bc199e779d5be1ea87c443004ede4db3ec9f122156840ce699f node-v18.14.1-linux-armv7l.tar.xz +988198c90fd9f731e754a592b4f4ef85bbb289b54aa4a35603460df39b3abe9c node-v18.14.1-linux-ppc64le.tar.gz +44c02b1a48b3a503c1e31669bdfd20cb791b0be8dd0a2b12afb4d9f437c3a51a node-v18.14.1-linux-ppc64le.tar.xz +50be74fc7a5eb00c41b5a19bfd0000ca818187f3b28f6796877aafe4f5f2b67a node-v18.14.1-linux-s390x.tar.gz +6f4d9f65b439e0940abb813d1b5711839bc42ba81a4286f263b7b4e3e7cd32cf node-v18.14.1-linux-s390x.tar.xz +6a7c6862b86cb01b892ca5967dba14bd3122dbfed9d5c9fedd30585d5974f1f6 node-v18.14.1-linux-x64.tar.gz +ea3bd72ad5ccaa1d9bcb40da69a60f249d29672d41740fe8f3e976d0e9078f65 node-v18.14.1-linux-x64.tar.xz +f461ac7eb1d18098fd37e9ba83b8cfcef9fddebcbf59ea6b638f887e4541d912 node-v18.14.1.pkg +2e597cd6c56ffc14b174f2bddb459dd3ce227e26505008805c5d4f55bb1e46f1 node-v18.14.1.tar.gz +eec353438266fd0aef53a9446be10b32ee6e74d08e32dd5454b382ff6793da04 node-v18.14.1.tar.xz +13ce74a476ccf7917dd8c9ecd7635f6174665a14ab629c3f2dc0709cd31d68d6 node-v18.14.1-win-x64.7z +b0ec709961ab9b2e46d616d33f26d0ff1548b02045c7650f018e809e7a6cbbda node-v18.14.1-win-x64.zip +33d7b2abb88b9a400c02bd9ebb2a61c522d62d73aa5e103fff86779af81c0dc9 node-v18.14.1-win-x86.7z +903decc09eca1e6d4ad67b4ba22b24ea62a3d3d9b8101a60116932050cc03295 node-v18.14.1-win-x86.zip +4a42e49e5c6e2340be14b5e3d72d9a75abf8fc8894d816d46321c28ea0ed4baa node-v18.14.1-x64.msi +7a3fdde01f758fc4d6cb9f491db9ac30c39f20c19a27982898a9e0b4e61317d2 node-v18.14.1-x86.msi +3888921fe297b0cc2f050c12ef8181bdf397823edf4f62d9e153cc5b424cfd72 win-x64/node.exe +28973fbe8ae770a132b4851b0166ec9ba435595f786bb05fc47c3611fefb1cf2 win-x64/node.lib +ea9ace5ce2488b6b274e70cc314e4bc17d4cfc142105d8ff57f65c7b085de03e win-x64/node_pdb.7z +8c569d8992c94de0bf2c00cd3746268762d33116dff3dc8e98e6a9bbb18bc4e0 win-x64/node_pdb.zip +cbbdc31c70de4c6c09ce9206064e972767527a6d098176ff76f5b0bd3f524a73 win-x86/node.exe +a10d89fbd502902abaf307fe73b604a4733d403ac5c577e536607c1f3b16ac14 win-x86/node.lib +c3f9e82b72c8118be7f84c9599d6f67889b6662263d2b913b3be9f03a54c5887 win-x86/node_pdb.7z +1158e74809497fafb7269515ee97d9a0f2bd761d0feb68799103374d65aff40b win-x86/node_pdb.zip +-----BEGIN PGP SIGNATURE----- + +iQGzBAEBCAAdFiEEiQwI24V5Fi/uDfnbi+q0389VXvQFAmPuq70ACgkQi+q0389V +XvSlQwv+I/0rceTegCp5ngUJ4E9GfvqKcBzJg7eZv3JvHv2td8tAZi3xwZIFgkZt +twoDkGDu86QlaM/wSyQCoJQ+T71IRfZj7QZnofjhogNdOXZomZHmD88edBGAa1Qt +1UqYO92ht2DnZ1vEdwEVmAFYw6e141Ccx+crgjviCm7lU5P5cm+8Ll0MjLRJ7piB +hha5QnipmAom5oNpncv/wnXiJMgTkt/nwnjg9U+3XrlALbaz4a4sMIKyaQMJflow +jZCh80lXS3QqCGR72OlYWdtDrnqj5g9KDhwlrFiv86CezbRAqv7ms/UiH+sqMnOD +SQPFZwHoTj9fAwodLx42CoCnMEyCBiAxLd/7es+GHu4F463LzBCC7mI1HsQySk42 +mO5CvfQo7APjwQ3Gl1Rc61wl2KNevX8+tq7vuxARgoRcaRUjCt4fU4LB5sBqMwVH +2uPYAuH3PtJhxKklDyDWpzK8ADUTl1GxusXHlKzVecfZq8crHvfJ+ojhumMkuz3F +jln0bvQH +=xxvM +-----END PGP SIGNATURE----- + +``` From 7ea374df75e480b8c09e894711850d17902bf0c0 Mon Sep 17 00:00:00 2001 From: Rafael Gonzaga Date: Thu, 16 Feb 2023 19:34:46 -0300 Subject: [PATCH 10/21] Blog: v19.6.1 release post (#5053) Refs: https://github.com/nodejs-private/node-private/pull/385 Signed-off-by: RafaelGSS --- locale/en/blog/release/v19.6.1.md | 109 ++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 locale/en/blog/release/v19.6.1.md diff --git a/locale/en/blog/release/v19.6.1.md b/locale/en/blog/release/v19.6.1.md new file mode 100644 index 0000000000000..fd1006085697e --- /dev/null +++ b/locale/en/blog/release/v19.6.1.md @@ -0,0 +1,109 @@ +--- +date: 2023-02-16T22:21:38.949Z +version: 19.6.1 +category: release +title: Node v19.6.1 (Current) +slug: node-v19-6-1 +layout: blog-post.hbs +author: Rafael Gonzaga +--- + +### Notable Changes + +The following CVEs are fixed in this release: + +* **[CVE-2023-23919](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-23919)**: OpenSSL errors not cleared in error stack (Medium) +* **[CVE-2023-23918](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-23918)**: Experimental Policies bypass via `process.mainModule.require`(High) +* **[CVE-2023-23920](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-23920)**: Insecure loading of ICU data through ICU\_DATA environment variable (Low) + +More detailed information on each of the vulnerabilities can be found in [February 2023 Security Releases](https://nodejs.org/en/blog/vulnerability/february-2023-security-releases/) blog post. + +This security release includes OpenSSL security updates as outlined in the recent +[OpenSSL security advisory](https://www.openssl.org/news/secadv/20230207.txt) and `undici` security update. + +### Commits + +* \[[`97d9d55d2f`](https://github.com/nodejs/node/commit/97d9d55d2f)] - **build**: build ICU with ICU\_NO\_USER\_DATA\_OVERRIDE (RafaelGSS) [nodejs-private/node-private#374](https://github.com/nodejs-private/node-private/pull/374) +* \[[`8ac90e6372`](https://github.com/nodejs/node/commit/8ac90e6372)] - **crypto**: clear OpenSSL error on invalid ca cert (RafaelGSS) [nodejs-private/node-private#368](https://github.com/nodejs-private/node-private/pull/368) +* \[[`10a4c47e3a`](https://github.com/nodejs/node/commit/10a4c47e3a)] - **deps**: update undici to 5.19.1 (Node.js GitHub Bot) [#46634](https://github.com/nodejs/node/pull/46634) +* \[[`b10fc75e4a`](https://github.com/nodejs/node/commit/b10fc75e4a)] - **deps**: update undici to 5.18.0 (Node.js GitHub Bot) [#46502](https://github.com/nodejs/node/pull/46502) +* \[[`e9b64ea8b9`](https://github.com/nodejs/node/commit/e9b64ea8b9)] - **deps**: update undici to 5.17.1 (Node.js GitHub Bot) [#46502](https://github.com/nodejs/node/pull/46502) +* \[[`66a24cec47`](https://github.com/nodejs/node/commit/66a24cec47)] - **deps**: cherry-pick Windows ARM64 fix for openssl (Richard Lau) [#46573](https://github.com/nodejs/node/pull/46573) +* \[[`d8559aa6f5`](https://github.com/nodejs/node/commit/d8559aa6f5)] - **deps**: update archs files for quictls/openssl-3.0.8+quic (RafaelGSS) [#46573](https://github.com/nodejs/node/pull/46573) +* \[[`dc477f547d`](https://github.com/nodejs/node/commit/dc477f547d)] - **deps**: upgrade openssl sources to quictls/openssl-3.0.8+quic (RafaelGSS) [#46573](https://github.com/nodejs/node/pull/46573) +* \[[`2aae197670`](https://github.com/nodejs/node/commit/2aae197670)] - **lib**: makeRequireFunction patch when experimental policy (RafaelGSS) [nodejs-private/node-private#358](https://github.com/nodejs-private/node-private/pull/358) +* \[[`6d17b693ec`](https://github.com/nodejs/node/commit/6d17b693ec)] - **policy**: makeRequireFunction on mainModule.require (RafaelGSS) [nodejs-private/node-private#358](https://github.com/nodejs-private/node-private/pull/358) + +Windows 32-bit Installer: https://nodejs.org/dist/v19.6.1/node-v19.6.1-x86.msi
+Windows 64-bit Installer: https://nodejs.org/dist/v19.6.1/node-v19.6.1-x64.msi
+Windows 32-bit Binary: https://nodejs.org/dist/v19.6.1/win-x86/node.exe
+Windows 64-bit Binary: https://nodejs.org/dist/v19.6.1/win-x64/node.exe
+macOS 64-bit Installer: https://nodejs.org/dist/v19.6.1/node-v19.6.1.pkg
+macOS Apple Silicon 64-bit Binary: https://nodejs.org/dist/v19.6.1/node-v19.6.1-darwin-arm64.tar.gz
+macOS Intel 64-bit Binary: https://nodejs.org/dist/v19.6.1/node-v19.6.1-darwin-x64.tar.gz
+Linux 64-bit Binary: https://nodejs.org/dist/v19.6.1/node-v19.6.1-linux-x64.tar.xz
+Linux PPC LE 64-bit Binary: https://nodejs.org/dist/v19.6.1/node-v19.6.1-linux-ppc64le.tar.xz
+Linux s390x 64-bit Binary: https://nodejs.org/dist/v19.6.1/node-v19.6.1-linux-s390x.tar.xz
+AIX 64-bit Binary: https://nodejs.org/dist/v19.6.1/node-v19.6.1-aix-ppc64.tar.gz
+ARMv7 32-bit Binary: https://nodejs.org/dist/v19.6.1/node-v19.6.1-linux-armv7l.tar.xz
+ARMv8 64-bit Binary: https://nodejs.org/dist/v19.6.1/node-v19.6.1-linux-arm64.tar.xz
+Source Code: https://nodejs.org/dist/v19.6.1/node-v19.6.1.tar.gz
+Other release files: https://nodejs.org/dist/v19.6.1/
+Documentation: https://nodejs.org/docs/v19.6.1/api/ + +### SHASUMS + +``` +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA256 + +0b84f9d4189adf1b3d955384db1aba971b4e5ac2dedadeaffa3c76b0efa8fade node-v19.6.1-aix-ppc64.tar.gz +f95951571baaf2180ce41eb5f3e878f6580bc5b203d79fedb479bf5a1b147138 node-v19.6.1-darwin-arm64.tar.gz +bfc47b79ab01aa3e57c32011d4537aed97cb194775a89519c70b79f346cfed84 node-v19.6.1-darwin-arm64.tar.xz +a79442a282dec5a6bb1cb73adb926dbc4aa97fa3960193b9ecf56cc76fd6c114 node-v19.6.1-darwin-x64.tar.gz +e9c5bfd0a6893f555220086beee8067326d7c3dd41e8b6adccb90ecdea87c1b4 node-v19.6.1-darwin-x64.tar.xz +6f52107f83b6485a335dc4d72ae955d4ed289786a4628b09ac1f06d56d64f8dc node-v19.6.1-headers.tar.gz +746ca43484b4ca74158c01e2f1652911c0a772c80587397ce7e7b9d9e8c86aee node-v19.6.1-headers.tar.xz +1787b3795c64eac44ca6b88fe5bf29c7e7b72816ee7c1df1c64d6c323f2c1f71 node-v19.6.1-linux-arm64.tar.gz +a0ce4a79d1b43a401ba4158c354792b38aafc2f23d8b5d0b50812c7063b55c17 node-v19.6.1-linux-arm64.tar.xz +e9148d7110cc34ea9c22d9cd42eb3fd1876b1c203d72440e095ed4c0152b52d4 node-v19.6.1-linux-armv7l.tar.gz +b3814279cf48b20e62e55f4a68e9c9187397f7357cb1b9415c35a9d8402d230a node-v19.6.1-linux-armv7l.tar.xz +4b53f9e36f81794d8ac803fed404f261c0a459092a5077e1f600f0bf67e22158 node-v19.6.1-linux-ppc64le.tar.gz +ce0e07bdd036d8490c1d3ce4376d91a220ee99275762e6f5424fb5817d22fdfa node-v19.6.1-linux-ppc64le.tar.xz +67c86271321b0051511870c3d1c078f75400458c0ce7cb295bf8030cc633cf1e node-v19.6.1-linux-s390x.tar.gz +ab999123afd6b44c8d5235300e6fb00fc8aedfebfa2158489079519dd9ca1dd6 node-v19.6.1-linux-s390x.tar.xz +c6a64d49003861bf465a9ab8e876d5c13c59f1df4507df7cf5dc8ae6e48edf9d node-v19.6.1-linux-x64.tar.gz +2b11e02f29772b7ec475854bb40bc46efc0d380d4245e2480db56455c5120c3e node-v19.6.1-linux-x64.tar.xz +18dc168c79ea5f3ea50a873581f46f866079e44de2b54fd6805a79784b91682d node-v19.6.1.pkg +e44e67a4dc6a6a3574b8759326319de5062412343623eb6f8e9e9d1c2ef8c0ea node-v19.6.1.tar.gz +7710e6c2851c956be4926fc2540678f3fddf8e6d3826ea3aa9b8c28d6ea89a9b node-v19.6.1.tar.xz +87a6dce8ebdfebbe1adeb2fc9c6a7c4a91848b7c18c955b0670e9b14110678e0 node-v19.6.1-win-x64.7z +b3716a822786936879332abc16bc6df8bac0775dfdd4777268ad4f08d7f9aa8c node-v19.6.1-win-x64.zip +5bad5675a6bbcf6ad3bf3cb6b2eb7b916b58ddc869800f3fdf7039faa187d780 node-v19.6.1-win-x86.7z +f1b46dab2af773e28582d36ec373dc90165639daca0f813fc8b2e25543222fe2 node-v19.6.1-win-x86.zip +51142803caf327801152f41890ba9ad9625e674cee75d3ff73d21366557faaa2 node-v19.6.1-x64.msi +19da4565d260557f1e31738793cd4e0fec34568bd3a58d211433446e5046d5b5 node-v19.6.1-x86.msi +386d0e2c3bbf87ef6ee59bc6e6d2aa6c6e7ea271805dab33e1130deea1a0ba2e win-x64/node.exe +dccef7431ad9277c820827b7d5b2e63db6724b9713f7765e05a3125b70713f05 win-x64/node.lib +4305f2fbea5047cedf71d45355ca636a1ed675746f01349c4c8244f9be44fb6f win-x64/node_pdb.7z +3c5f2e53784fbad2c82bed4c6f58a889b4ef7932504ea6a9db93e6e3a741eec7 win-x64/node_pdb.zip +a3a11b277b157ec631f92615288dd1c06e1bd9502b006308055a1b4b8a8a9ed4 win-x86/node.exe +d1506c2a6dc8af7d5fdf916f170bf68f7b7f9a5f3c7cf0b52b45cf40966f472f win-x86/node.lib +c008653f941c08b95b58c3f2785fedab0c4ef4c50b963738ac4b767084f5ce90 win-x86/node_pdb.7z +6b9d10156f4d35b76ce89536deb2021767b5181f83fb60920e0712bddc693bab win-x86/node_pdb.zip +-----BEGIN PGP SIGNATURE----- + +iQGzBAEBCAAdFiEEiQwI24V5Fi/uDfnbi+q0389VXvQFAmPurAgACgkQi+q0389V +XvS0BAwAjGTSiwTZsifTgB9JImHBBJ+n+2wbJN13xJ6dYbpNFqcNtrVnE++jsghX +SXJpDBQj9rqAb4MuMBeoQqqkCFipixus9SgNX0TNIxXp87IjCKc5ZkEcrboVLdXo +spKvZDbvu32rUwQsX2B88PAe+/E0mS2Ykuhl5atfHEeq1phvAjdA/p7TE8q23m6n +kAhjqqq7PDC840GBOW2XaptGAs6cUy6qTBMXpYYwp1OJEl79B4K9cfFEt53s723H +pVtRzePyVXd3e7uDuLU4mkyiznsLGPaRdxRCsovcOH1cl33tybsXnadl233G6yxU +5TMvD9+4IYha/TiasUP0uODVcwBzKY8XFrIUS6qEReraJxBfUNiaKbJGqPCCOCPC +o4rTX10xFKYwsj42Gk9/KbJv+6SWOo6+DFeFSckmj16qDKkj3NOcScJ6u5WmNkdu +4fZmbWad+sJjIU4ItR/5/OIXOPKuBA0k78MJdrpCNvWidjpkTotqyAV5y+32GCBs +Dyg9h3Y+ +=fsRY +-----END PGP SIGNATURE----- + +``` From 6469bafd6f2fccb486474dfc7b361f418619ccd1 Mon Sep 17 00:00:00 2001 From: Michael Dawson Date: Thu, 16 Feb 2023 18:00:21 -0500 Subject: [PATCH 11/21] doc: update security annouce for binaries ready (#5055) * doc: update security annouce for binaries ready Signed-off-by: Michael Dawson * Update locale/en/blog/vulnerability/february-2023-security-releases.md Signed-off-by: Michael Dawson * Update locale/en/blog/vulnerability/february-2023-security-releases.md Signed-off-by: Michael Dawson * Update locale/en/blog/vulnerability/february-2023-security-releases.md Co-authored-by: Richard Lau Signed-off-by: Michael Dawson * squash: add update to banner Signed-off-by: Michael Dawson --------- Signed-off-by: Michael Dawson Co-authored-by: Richard Lau --- .../february-2023-security-releases.md | 92 ++++++++++++++++++- locale/en/site.json | 2 +- 2 files changed, 91 insertions(+), 3 deletions(-) diff --git a/locale/en/blog/vulnerability/february-2023-security-releases.md b/locale/en/blog/vulnerability/february-2023-security-releases.md index 41620c2c62365..c9028e263cb7c 100644 --- a/locale/en/blog/vulnerability/february-2023-security-releases.md +++ b/locale/en/blog/vulnerability/february-2023-security-releases.md @@ -1,12 +1,100 @@ --- -date: 2023-02-14T14:00:00.000Z +date: 2023-02-16T21:00:00.000Z category: vulnerability -title: Tuesday February 14 2023 Security Releases +title: Thursday February 16 2023 Security Releases slug: february-2023-security-releases layout: blog-post.hbs author: Michael Dawson --- +# _(Update 16-February-2023)_ Security releases available + +Updates are now available for the v19.x, v18.x, v16.x, and v14.x Node.js release lines for the +following issues. + +## OpenSSL Security updates + +This security release includes OpenSSL security updates as outlined in the recent +[OpenSSL security advisory](https://www.openssl.org/news/secadv/20230207.txt). + +Impacts: + +* All versions of the 19.x, 18.x, 16.x, and 14.x release lines. + +## Node.js Permissions policies can be bypassed via process.mainModule (High) ([CVE-2023-23918](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-23918)) + +It was possible to bypass [Permissions](https://nodejs.org/api/permissions.html) and access non authorized modules by using process.mainModule.require(). This only affects users who had enabled the experimental permissions option with --experimental-policy. + +Thank you, to [@goums](https://github.com/goums) for reporting this vulnerability and thank you [Rafael Gonzaga](https://github.com/RafaelGSS) for fixing it. + +Impacts: + +* All versions of the 19.x, 18.x, 16.x, and 14.x release lines. + +## Node.js OpenSSL error handling issues in nodejs crypto library (Medium) ([CVE-2023-23919](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-23919)) + +In some cases Node.js did does not clear the OpenSSL error stack after operations that may set it. This may lead to false positive errors during subsequent cryptographic operations that happen to be on the same thread. This in turn could be used to cause a denial of service. + +"Thank you, to Morgan Jones and Ryan Dorrity from Viasat Secure Mobile for reporting and discovering this vulnerability and thank you [Rafael Gonzaga](https://github.com/RafaelGSS) for fixing it. + +Impacts: + +* Versions of < 19.2.0 and lower of the 19.x release line and all versions of the 18.x, and 16.x release lines. + +## Fetch API in Node.js did not protect against CRLF injection in host headers (Medium) ([CVE-2023-23936](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-23936)) + +The [fetch API](https://nodejs.org/dist/latest/docs/api/globals.html#fetch) in Node.js did not prevent +CRLF injection in the 'host' header potentially allowing attacks such as HTTP response splitting +and HTTP header injection. + +Thank you, to Zhipeng Zhang ([@timon8](https://hackerone.com/timon8)) for reporting this vulnerability and thank you Robert Nagy for fixing it. + +Impacts: + +* All versions of the 19.x, 18.x and 16.x release lines. + +## Regular Expression Denial of Service in Headers in Node.js fetch API(Low) ([CVE-2023-24807](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-24807)) + +The Headers.set() and Headers.append() methods in the +[fetch API](https://nodejs.org/dist/latest/docs/api/globals.html#fetch) in Node.js where vulnerable to Regular a Expression Denial of Service (ReDoS) attacks. + +Thank you, to Carter Snook for reporting this vulnerability and thank you Rich Trott for fixing it. + +Impacts: + +* All versions of the 19.x, 18.x, and 16.x release lines. + +## Node.js insecure loading of ICU data through ICU_DATA environment variable (Low) ([CVE-2023-23920](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-23920)) + +Node.js would search and potentially load ICU data when running with elevated priviledges. Node.js +was modified to build with ICU_NO_USER_DATA_OVERRIDE to avoid this. + +Thank you, to Ben Noordhuis for reporting this vulnerability and thank you [Rafael Gonzaga](https://github.com/RafaelGSS) for fixing it. + +Impacts: + +* All versions of the 19.x, 18.x, 16.x, and 14.x release lines. + +## npm update for Node.js 14 + +This security release also includes an npm update for Node.js 14 to address a number +of CVEs which either do not affect Node.js or are low severity in the context of Node.js. You +can get more details for the individual CVEs in +[nodejs-dependency-vuln-assessments](https://github.com/nodejs/nodejs-dependency-vuln-assessments). + +Impacts: + +* All versions 14.x release lines. + +## Downloads and release details + +Thanks to Rafael Gonzaga and Richard Lau for their work on the releases. + +* [Node.js v14.21.3 (LTS)](https://nodejs.org/en/blog/release/v14.21.3/) +* [Node.js v16.19.1 (LTS)](https://nodejs.org/en/blog/release/v16.19.1/) +* [Node.js v18.14.1 (LTS)](https://nodejs.org/en/blog/release/v18.14.1/) +* [Node.js v19.6.1 (Current)](https://nodejs.org/en/blog/release/v19.6.1/) + ## _(Update 14-February-2023)_ 2 Day delay in security releases The Node.js project is delaying the planned security releases until Thursday diff --git a/locale/en/site.json b/locale/en/site.json index 3eeadf6fd309d..9d31e15b5f9ca 100644 --- a/locale/en/site.json +++ b/locale/en/site.json @@ -133,7 +133,7 @@ "index": { "startDate": "2023-02-07T16:00:00.000Z", "endDate": "2023-03-07T23:00:00.000Z", - "text": "New security releases to be made available February 16th, 2023", + "text": "Security releases now available", "link": "https://nodejs.org/en/blog/vulnerability/february-2023-security-releases/" }, "blacklivesmatter": { From 96525c8e45d08fa030901002c8343497ec134354 Mon Sep 17 00:00:00 2001 From: Myles Borins Date: Tue, 21 Feb 2023 13:37:10 -0500 Subject: [PATCH 12/21] blog: release notes for v19.7.0 and v18.14.2 (#5064) Refs:https://github.com/nodejs/node/pull/46725 Refs: https://github.com/nodejs/node/pull/46724 --- locale/en/blog/release/v18.14.2.md | 92 ++++++++++++ locale/en/blog/release/v19.7.0.md | 215 +++++++++++++++++++++++++++++ 2 files changed, 307 insertions(+) create mode 100644 locale/en/blog/release/v18.14.2.md create mode 100644 locale/en/blog/release/v19.7.0.md diff --git a/locale/en/blog/release/v18.14.2.md b/locale/en/blog/release/v18.14.2.md new file mode 100644 index 0000000000000..4ad388894af4c --- /dev/null +++ b/locale/en/blog/release/v18.14.2.md @@ -0,0 +1,92 @@ +--- +date: 2023-02-21T18:22:59.496Z +version: 18.14.2 +category: release +title: Node v18.14.2 (LTS) +slug: node-v18-14-2 +layout: blog-post.hbs +author: Myles Borins +--- + +### Notable Changes + +* \[[`f864bef32a`](https://github.com/nodejs/node/commit/f864bef32a)] - **deps**: upgrade npm to 9.5.0 (npm team) [#46673](https://github.com/nodejs/node/pull/46673) + +### Commits + +* \[[`880a65d7ff`](https://github.com/nodejs/node/commit/880a65d7ff)] - **build**: delete `snapshot.blob` file from the project (Juan José Arboleda) [#46626](https://github.com/nodejs/node/pull/46626) +* \[[`cbea56efda`](https://github.com/nodejs/node/commit/cbea56efda)] - **deps**: update undici to 5.20.0 (Node.js GitHub Bot) [#46711](https://github.com/nodejs/node/pull/46711) +* \[[`f864bef32a`](https://github.com/nodejs/node/commit/f864bef32a)] - **deps**: upgrade npm to 9.5.0 (npm team) [#46673](https://github.com/nodejs/node/pull/46673) +* \[[`648041d568`](https://github.com/nodejs/node/commit/648041d568)] - **deps**: upgrade npm to 9.4.0 (npm team) [#46353](https://github.com/nodejs/node/pull/46353) +* \[[`5e1f213f3c`](https://github.com/nodejs/node/commit/5e1f213f3c)] - **deps**: patch V8 to 10.2.154.26 (Michaël Zasso) [#46446](https://github.com/nodejs/node/pull/46446) + +Windows 32-bit Installer: https://nodejs.org/dist/v18.14.2/node-v18.14.2-x86.msi
+Windows 64-bit Installer: https://nodejs.org/dist/v18.14.2/node-v18.14.2-x64.msi
+Windows 32-bit Binary: https://nodejs.org/dist/v18.14.2/win-x86/node.exe
+Windows 64-bit Binary: https://nodejs.org/dist/v18.14.2/win-x64/node.exe
+macOS 64-bit Installer: https://nodejs.org/dist/v18.14.2/node-v18.14.2.pkg
+macOS Apple Silicon 64-bit Binary: https://nodejs.org/dist/v18.14.2/node-v18.14.2-darwin-arm64.tar.gz
+macOS Intel 64-bit Binary: https://nodejs.org/dist/v18.14.2/node-v18.14.2-darwin-x64.tar.gz
+Linux 64-bit Binary: https://nodejs.org/dist/v18.14.2/node-v18.14.2-linux-x64.tar.xz
+Linux PPC LE 64-bit Binary: https://nodejs.org/dist/v18.14.2/node-v18.14.2-linux-ppc64le.tar.xz
+Linux s390x 64-bit Binary: https://nodejs.org/dist/v18.14.2/node-v18.14.2-linux-s390x.tar.xz
+AIX 64-bit Binary: https://nodejs.org/dist/v18.14.2/node-v18.14.2-aix-ppc64.tar.gz
+ARMv7 32-bit Binary: https://nodejs.org/dist/v18.14.2/node-v18.14.2-linux-armv7l.tar.xz
+ARMv8 64-bit Binary: https://nodejs.org/dist/v18.14.2/node-v18.14.2-linux-arm64.tar.xz
+Source Code: https://nodejs.org/dist/v18.14.2/node-v18.14.2.tar.gz
+Other release files: https://nodejs.org/dist/v18.14.2/
+Documentation: https://nodejs.org/docs/v18.14.2/api/ + +### SHASUMS + +``` +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA256 + +2e9a2b5cf051e3ecf4e5816aec38c79e4d549db43dd33b523c1b6b9b3ea18326 node-v18.14.2-aix-ppc64.tar.gz +19f2e5f0659909e6f4b583fe581c0a5f14d079232f24093a55722d1bcf1b9991 node-v18.14.2-darwin-arm64.tar.gz +725f06eabcede54d7f235ff90a6a3db71104f6ffe40f854fe598595dd1cae597 node-v18.14.2-darwin-arm64.tar.xz +137fbd2abf59db87033a1114fab7afb497e3d747c3726dd881b6297d59782da2 node-v18.14.2-darwin-x64.tar.gz +f99dbf696c23d588747dd132f0bfa3bf2bf55326a3d5e38a8adcb93a7046a56b node-v18.14.2-darwin-x64.tar.xz +2a9c2de887310dce67c93e2939230a4192d198b3cf0303c23a6e67d8a526a7c5 node-v18.14.2-headers.tar.gz +e1fc3e63e269b4de0f9b187d6927fe0d981b9a7283232e61615f4fb4afdd6582 node-v18.14.2-headers.tar.xz +e5c5d83e65271260ea4135330309d43fdc26c42457156ff237eeba65c6237f58 node-v18.14.2-linux-arm64.tar.gz +e3e39b9c3d5475857f62bd8d501d4d3f39303691b6357fba81f2c2b6de6e8520 node-v18.14.2-linux-arm64.tar.xz +a48ec9924ca1d4fe28382b318dcb58f0687ab8e9d2f5a65ecb471fb747d369e2 node-v18.14.2-linux-armv7l.tar.gz +39c308b9a75591860c4d2c05edae82c10a1157cfb67594837d60666ee960e8fe node-v18.14.2-linux-armv7l.tar.xz +93ac8990cca042df5e73ab8bc5d0ee07d6083a3c3e79ea4a78aab376e31efbf7 node-v18.14.2-linux-ppc64le.tar.gz +5b6d518e3e5756a005565a0d343065298868f5c843ec2f33e87e3d5f49749efc node-v18.14.2-linux-ppc64le.tar.xz +d805972f7f8f8c5ad552a4d25e31dbef25944fe7f5d045b42449b44a95529ead node-v18.14.2-linux-s390x.tar.gz +43c1ad18b20525ca4e5234fcfe2e0a8278a49655d8d61fe7eb14d3aa42fb473c node-v18.14.2-linux-s390x.tar.xz +95bdaaf92265eefd40d2055fb9b5cd6cbc3cb2c4495e3ebd4b1b501822d69731 node-v18.14.2-linux-x64.tar.gz +de15b44738578367cfb250b6551b4c97e0e0e8050fa931a4a9a7262d374d6034 node-v18.14.2-linux-x64.tar.xz +3ecf4871d39427b2fa025b7c58405c0ac788812edbb644af9f03d3104e41175b node-v18.14.2.pkg +850aebb879e3efd904ebfe65325caa97b013773bb94fafd2d0fb794324918252 node-v18.14.2.tar.gz +fbc364dd25fee2cacc0f2033db2d86115fc07575310ea0e64408b8170d09c685 node-v18.14.2.tar.xz +a29727e85fd649d733a043a70362ede034825f2569103b81b6e9273ed1a0e2fc node-v18.14.2-win-x64.7z +fccac5e259f1196a2a30e82f42211dd7dddd9a48e4fd3f1627900aa23dff4ffa node-v18.14.2-win-x64.zip +b1e7abe1e962fe568040fd8d3bb185bd430972887f22aa57e05eef080c11dd96 node-v18.14.2-win-x86.7z +30161c71d428a71b62037a63c58a5d4bca34439811a3feea146ca23baf33a70e node-v18.14.2-win-x86.zip +1152f8163882faf8c6c33dcaaeebb3a03468bdcbe4e33d722d063c1da8f1fc57 node-v18.14.2-x64.msi +352ecd456852f870c0c1c63221c810b19993f83f5f0651125f1cee386eecca97 node-v18.14.2-x86.msi +8ab627d82d90d62be8017ee3659f38e7f58f32c8cadf4d5dc59a6e4f99507aeb win-x64/node.exe +28973fbe8ae770a132b4851b0166ec9ba435595f786bb05fc47c3611fefb1cf2 win-x64/node.lib +93157f3a4b89d9ee89485622f06942aa16bf99f00988fc5143e52b9e2b24bef5 win-x64/node_pdb.7z +741c969d4d30187000d7127d45e166aa5d74fc4b0546905a24c504bfcfdf06ba win-x64/node_pdb.zip +2a11436bc0b9154e5fa878041cd867d7420c66916e06a7755f1f8fc030951ce8 win-x86/node.exe +a10d89fbd502902abaf307fe73b604a4733d403ac5c577e536607c1f3b16ac14 win-x86/node.lib +efd93de17cd01e4ea00e69603d095fda488723e3ef25b640cd3240f9d3f2cded win-x86/node_pdb.7z +2d554f21d9c858412217f37b92026b688f5605f9c6169faccdc20b9e97b289ba win-x86/node_pdb.zip +-----BEGIN PGP SIGNATURE----- + +iQEzBAEBCAAdFiEEDv/hvO/ZyE49CYFSkzsB9AtcqUYFAmP1CzQACgkQkzsB9Atc +qUamJQgAuoCCE8UmvMk8WNsa5JtBx2QQzzAERvD8TuAK4dr6/BCMLI3Ro+F+0O+J +eupXWMR6UtMK0QSKsoivQeyCc+KwA+/2IOxq7TRzwDp1A/aRSA7W71/pRONWl1TO +7VrJU75txmduf4RmQUk+CrpNn6/TKfyIN+nhx6Rvq5NB0dHhIsruUyNOjyLJABW1 +wlzcakl1YilvVc7M5ZKvNwwgTxZ8RprZ9yVIy8LcjbVY4I5vYlj1qve4h9Xm2790 +UqxKjYZqHOvNkbGRVeK5QQg7Op3VIEFYQyw9DhdmQZeFHfxVy3EX9c5vHxpM7vKy +yhWYkglMa9OOziOB28UG8wgBfV1Prg== +=XskY +-----END PGP SIGNATURE----- + +``` diff --git a/locale/en/blog/release/v19.7.0.md b/locale/en/blog/release/v19.7.0.md new file mode 100644 index 0000000000000..979a1a307f203 --- /dev/null +++ b/locale/en/blog/release/v19.7.0.md @@ -0,0 +1,215 @@ +--- +date: 2023-02-21T18:22:47.676Z +version: 19.7.0 +category: release +title: Node v19.7.0 (Current) +slug: node-v19-7-0 +layout: blog-post.hbs +author: Myles Borins +--- + +### Notable Changes + +* \[[`60a612607e`](https://github.com/nodejs/node/commit/60a612607e)] - **deps**: upgrade npm to 9.5.0 (npm team) [#46673](https://github.com/nodejs/node/pull/46673) +* \[[`7d6c27eab1`](https://github.com/nodejs/node/commit/7d6c27eab1)] - **deps**: add ada as a dependency (Yagiz Nizipli) [#46410](https://github.com/nodejs/node/pull/46410) +* \[[`a79a8bf85a`](https://github.com/nodejs/node/commit/a79a8bf85a)] - **doc**: add debadree25 to collaborators (Debadree Chatterjee) [#46716](https://github.com/nodejs/node/pull/46716) +* \[[`0c2c322ee6`](https://github.com/nodejs/node/commit/0c2c322ee6)] - **doc**: add deokjinkim to collaborators (Deokjin Kim) [#46444](https://github.com/nodejs/node/pull/46444) +* \[[`9b23309f53`](https://github.com/nodejs/node/commit/9b23309f53)] - **doc,lib,src,test**: rename --test-coverage (Colin Ihrig) [#46017](https://github.com/nodejs/node/pull/46017) +* \[[`8590eb4830`](https://github.com/nodejs/node/commit/8590eb4830)] - **(SEMVER-MINOR)** **lib**: add aborted() utility function (Debadree Chatterjee) [#46494](https://github.com/nodejs/node/pull/46494) +* \[[`164bfe82cc`](https://github.com/nodejs/node/commit/164bfe82cc)] - **(SEMVER-MINOR)** **src**: add initial support for single executable applications (Darshan Sen) [#45038](https://github.com/nodejs/node/pull/45038) +* \[[`f3908411fd`](https://github.com/nodejs/node/commit/f3908411fd)] - **(SEMVER-MINOR)** **src**: allow optional Isolate termination in node::Stop() (Shelley Vohr) [#46583](https://github.com/nodejs/node/pull/46583) +* \[[`c34bac2fed`](https://github.com/nodejs/node/commit/c34bac2fed)] - **(SEMVER-MINOR)** **src**: allow blobs in addition to `FILE*`s in embedder snapshot API (Anna Henningsen) [#46491](https://github.com/nodejs/node/pull/46491) +* \[[`683a1f8f3e`](https://github.com/nodejs/node/commit/683a1f8f3e)] - **(SEMVER-MINOR)** **src**: allow snapshotting from the embedder API (Anna Henningsen) [#45888](https://github.com/nodejs/node/pull/45888) +* \[[`658d2f4710`](https://github.com/nodejs/node/commit/658d2f4710)] - **(SEMVER-MINOR)** **src**: make build\_snapshot a per-Isolate option, rather than a global one (Anna Henningsen) [#45888](https://github.com/nodejs/node/pull/45888) +* \[[`6801d3753c`](https://github.com/nodejs/node/commit/6801d3753c)] - **(SEMVER-MINOR)** **src**: add snapshot support for embedder API (Anna Henningsen) [#45888](https://github.com/nodejs/node/pull/45888) +* \[[`e77d538d32`](https://github.com/nodejs/node/commit/e77d538d32)] - **(SEMVER-MINOR)** **src**: allow embedder control of code generation policy (Shelley Vohr) [#46368](https://github.com/nodejs/node/pull/46368) +* \[[`633d3f292d`](https://github.com/nodejs/node/commit/633d3f292d)] - **(SEMVER-MINOR)** **stream**: add abort signal for ReadableStream and WritableStream (Debadree Chatterjee) [#46273](https://github.com/nodejs/node/pull/46273) +* \[[`6119289251`](https://github.com/nodejs/node/commit/6119289251)] - **test\_runner**: add initial code coverage support (Colin Ihrig) [#46017](https://github.com/nodejs/node/pull/46017) +* \[[`a51fe3c663`](https://github.com/nodejs/node/commit/a51fe3c663)] - **url**: replace url-parser with ada (Yagiz Nizipli) [#46410](https://github.com/nodejs/node/pull/46410) + +### Commits + +* \[[`731a7ae9da`](https://github.com/nodejs/node/commit/731a7ae9da)] - **async\_hooks**: add async local storage propagation benchmarks (Chengzhong Wu) [#46414](https://github.com/nodejs/node/pull/46414) +* \[[`05ad792a07`](https://github.com/nodejs/node/commit/05ad792a07)] - **async\_hooks**: remove experimental onPropagate option (James M Snell) [#46386](https://github.com/nodejs/node/pull/46386) +* \[[`6b21170b10`](https://github.com/nodejs/node/commit/6b21170b10)] - **benchmark**: add trailing commas in `benchmark/path` (Antoine du Hamel) [#46628](https://github.com/nodejs/node/pull/46628) +* \[[`4b89ec409f`](https://github.com/nodejs/node/commit/4b89ec409f)] - **benchmark**: add trailing commas in `benchmark/http` (Antoine du Hamel) [#46609](https://github.com/nodejs/node/pull/46609) +* \[[`ff95eb7386`](https://github.com/nodejs/node/commit/ff95eb7386)] - **benchmark**: add trailing commas in `benchmark/crypto` (Antoine du Hamel) [#46553](https://github.com/nodejs/node/pull/46553) +* \[[`638d9b8d4b`](https://github.com/nodejs/node/commit/638d9b8d4b)] - **benchmark**: add trailing commas in `benchmark/url` (Antoine du Hamel) [#46551](https://github.com/nodejs/node/pull/46551) +* \[[`7524871a9b`](https://github.com/nodejs/node/commit/7524871a9b)] - **benchmark**: add trailing commas in `benchmark/http2` (Antoine du Hamel) [#46552](https://github.com/nodejs/node/pull/46552) +* \[[`9d9b3f856f`](https://github.com/nodejs/node/commit/9d9b3f856f)] - **benchmark**: add trailing commas in `benchmark/process` (Antoine du Hamel) [#46481](https://github.com/nodejs/node/pull/46481) +* \[[`6c69ad6d43`](https://github.com/nodejs/node/commit/6c69ad6d43)] - **benchmark**: add trailing commas in `benchmark/misc` (Antoine du Hamel) [#46474](https://github.com/nodejs/node/pull/46474) +* \[[`7f8b292bee`](https://github.com/nodejs/node/commit/7f8b292bee)] - **benchmark**: add trailing commas in `benchmark/buffers` (Antoine du Hamel) [#46473](https://github.com/nodejs/node/pull/46473) +* \[[`897e3c2782`](https://github.com/nodejs/node/commit/897e3c2782)] - **benchmark**: add trailing commas in `benchmark/module` (Antoine du Hamel) [#46461](https://github.com/nodejs/node/pull/46461) +* \[[`7760d40c04`](https://github.com/nodejs/node/commit/7760d40c04)] - **benchmark**: add trailing commas in `benchmark/net` (Antoine du Hamel) [#46439](https://github.com/nodejs/node/pull/46439) +* \[[`8b88d605ca`](https://github.com/nodejs/node/commit/8b88d605ca)] - **benchmark**: add trailing commas in `benchmark/util` (Antoine du Hamel) [#46438](https://github.com/nodejs/node/pull/46438) +* \[[`2c8c9f978d`](https://github.com/nodejs/node/commit/2c8c9f978d)] - **benchmark**: add trailing commas in `benchmark/async_hooks` (Antoine du Hamel) [#46424](https://github.com/nodejs/node/pull/46424) +* \[[`b364b9bd60`](https://github.com/nodejs/node/commit/b364b9bd60)] - **benchmark**: add trailing commas in `benchmark/fs` (Antoine du Hamel) [#46426](https://github.com/nodejs/node/pull/46426) +* \[[`e15ddba7e7`](https://github.com/nodejs/node/commit/e15ddba7e7)] - **build**: add GitHub Action for coverage with --without-intl (Rich Trott) [#37954](https://github.com/nodejs/node/pull/37954) +* \[[`c781a48097`](https://github.com/nodejs/node/commit/c781a48097)] - **build**: do not disable inspector when intl is disabled (Rich Trott) [#37954](https://github.com/nodejs/node/pull/37954) +* \[[`b4deb2fcd5`](https://github.com/nodejs/node/commit/b4deb2fcd5)] - **crypto**: don't assume FIPS is disabled by default (Michael Dawson) [#46532](https://github.com/nodejs/node/pull/46532) +* \[[`60a612607e`](https://github.com/nodejs/node/commit/60a612607e)] - **deps**: upgrade npm to 9.5.0 (npm team) [#46673](https://github.com/nodejs/node/pull/46673) +* \[[`6c997035fc`](https://github.com/nodejs/node/commit/6c997035fc)] - **deps**: update corepack to 0.16.0 (Node.js GitHub Bot) [#46710](https://github.com/nodejs/node/pull/46710) +* \[[`2ed3875eee`](https://github.com/nodejs/node/commit/2ed3875eee)] - **deps**: update undici to 5.20.0 (Node.js GitHub Bot) [#46711](https://github.com/nodejs/node/pull/46711) +* \[[`20cb13bf7f`](https://github.com/nodejs/node/commit/20cb13bf7f)] - **deps**: update ada to v1.0.1 (Yagiz Nizipli) [#46550](https://github.com/nodejs/node/pull/46550) +* \[[`c0983cfc06`](https://github.com/nodejs/node/commit/c0983cfc06)] - **deps**: copy `postject-api.h` and `LICENSE` to the `deps` folder (Darshan Sen) [#46582](https://github.com/nodejs/node/pull/46582) +* \[[`7d6c27eab1`](https://github.com/nodejs/node/commit/7d6c27eab1)] - **deps**: add ada as a dependency (Yagiz Nizipli) [#46410](https://github.com/nodejs/node/pull/46410) +* \[[`7e7e2d037b`](https://github.com/nodejs/node/commit/7e7e2d037b)] - **deps**: update c-ares to 1.19.0 (Michaël Zasso) [#46415](https://github.com/nodejs/node/pull/46415) +* \[[`a79a8bf85a`](https://github.com/nodejs/node/commit/a79a8bf85a)] - **doc**: add debadree25 to collaborators (Debadree Chatterjee) [#46716](https://github.com/nodejs/node/pull/46716) +* \[[`6a8b04d709`](https://github.com/nodejs/node/commit/6a8b04d709)] - **doc**: move bcoe to emeriti (Benjamin Coe) [#46703](https://github.com/nodejs/node/pull/46703) +* \[[`a0a6ee0f54`](https://github.com/nodejs/node/commit/a0a6ee0f54)] - **doc**: add response.strictContentLength to documentation (Marco Ippolito) [#46627](https://github.com/nodejs/node/pull/46627) +* \[[`ffdd64dce3`](https://github.com/nodejs/node/commit/ffdd64dce3)] - **doc**: remove unused functions from example of `streamConsumers.text` (Deokjin Kim) [#46581](https://github.com/nodejs/node/pull/46581) +* \[[`c771d66864`](https://github.com/nodejs/node/commit/c771d66864)] - **doc**: fix test runner examples (Richie McColl) [#46565](https://github.com/nodejs/node/pull/46565) +* \[[`375bb22df9`](https://github.com/nodejs/node/commit/375bb22df9)] - **doc**: update test concurrency description / default values (richiemccoll) [#46457](https://github.com/nodejs/node/pull/46457) +* \[[`a7beac04ba`](https://github.com/nodejs/node/commit/a7beac04ba)] - **doc**: enrich test command with executable (Tony Gorez) [#44347](https://github.com/nodejs/node/pull/44347) +* \[[`aef57cd290`](https://github.com/nodejs/node/commit/aef57cd290)] - **doc**: fix wrong location of `requestTimeout`'s default value (Deokjin Kim) [#46423](https://github.com/nodejs/node/pull/46423) +* \[[`0c2c322ee6`](https://github.com/nodejs/node/commit/0c2c322ee6)] - **doc**: add deokjinkim to collaborators (Deokjin Kim) [#46444](https://github.com/nodejs/node/pull/46444) +* \[[`31d3e3c486`](https://github.com/nodejs/node/commit/31d3e3c486)] - **doc**: fix -C flag usage (三咲智子 Kevin Deng) [#46388](https://github.com/nodejs/node/pull/46388) +* \[[`905a6756a3`](https://github.com/nodejs/node/commit/905a6756a3)] - **doc**: add note about major release rotation (Rafael Gonzaga) [#46436](https://github.com/nodejs/node/pull/46436) +* \[[`33a98c42fa`](https://github.com/nodejs/node/commit/33a98c42fa)] - **doc**: update threat model based on discussions (Michael Dawson) [#46373](https://github.com/nodejs/node/pull/46373) +* \[[`9b23309f53`](https://github.com/nodejs/node/commit/9b23309f53)] - **doc,lib,src,test**: rename --test-coverage (Colin Ihrig) [#46017](https://github.com/nodejs/node/pull/46017) +* \[[`f192b83800`](https://github.com/nodejs/node/commit/f192b83800)] - **esm**: misc test refactors (Geoffrey Booth) [#46631](https://github.com/nodejs/node/pull/46631) +* \[[`7f2cdd36cf`](https://github.com/nodejs/node/commit/7f2cdd36cf)] - **http**: add note about clientError event (Paolo Insogna) [#46584](https://github.com/nodejs/node/pull/46584) +* \[[`d8c527f24f`](https://github.com/nodejs/node/commit/d8c527f24f)] - **http**: use v8::Array::New() with a prebuilt vector (Joyee Cheung) [#46447](https://github.com/nodejs/node/pull/46447) +* \[[`fa600fe003`](https://github.com/nodejs/node/commit/fa600fe003)] - **lib**: add trailing commas in `internal/process` (Antoine du Hamel) [#46687](https://github.com/nodejs/node/pull/46687) +* \[[`4aebee63f0`](https://github.com/nodejs/node/commit/4aebee63f0)] - **lib**: do not crash using workers with disabled shared array buffers (Ruben Bridgewater) [#41023](https://github.com/nodejs/node/pull/41023) +* \[[`a740908588`](https://github.com/nodejs/node/commit/a740908588)] - **lib**: delete module findPath unused params (sinkhaha) [#45371](https://github.com/nodejs/node/pull/45371) +* \[[`8b46c763d9`](https://github.com/nodejs/node/commit/8b46c763d9)] - **lib**: enforce use of trailing commas in more files (Antoine du Hamel) [#46655](https://github.com/nodejs/node/pull/46655) +* \[[`aae0020e27`](https://github.com/nodejs/node/commit/aae0020e27)] - **lib**: enforce use of trailing commas for functions (Antoine du Hamel) [#46629](https://github.com/nodejs/node/pull/46629) +* \[[`da9ebaf138`](https://github.com/nodejs/node/commit/da9ebaf138)] - **lib**: predeclare Event.isTrusted prop descriptor (Santiago Gimeno) [#46527](https://github.com/nodejs/node/pull/46527) +* \[[`35570e970e`](https://github.com/nodejs/node/commit/35570e970e)] - **lib**: tighten `AbortSignal.prototype.throwIfAborted` implementation (Antoine du Hamel) [#46521](https://github.com/nodejs/node/pull/46521) +* \[[`8590eb4830`](https://github.com/nodejs/node/commit/8590eb4830)] - **(SEMVER-MINOR)** **lib**: add aborted() utility function (Debadree Chatterjee) [#46494](https://github.com/nodejs/node/pull/46494) +* \[[`5d1a729f76`](https://github.com/nodejs/node/commit/5d1a729f76)] - **meta**: update AUTHORS (Node.js GitHub Bot) [#46624](https://github.com/nodejs/node/pull/46624) +* \[[`cb9b9ad879`](https://github.com/nodejs/node/commit/cb9b9ad879)] - **meta**: move one or more collaborators to emeritus (Node.js GitHub Bot) [#46513](https://github.com/nodejs/node/pull/46513) +* \[[`17b82c85d9`](https://github.com/nodejs/node/commit/17b82c85d9)] - **meta**: update AUTHORS (Node.js GitHub Bot) [#46504](https://github.com/nodejs/node/pull/46504) +* \[[`bb14a2b098`](https://github.com/nodejs/node/commit/bb14a2b098)] - **meta**: move one or more collaborators to emeritus (Node.js GitHub Bot) [#46411](https://github.com/nodejs/node/pull/46411) +* \[[`152a3c7d1d`](https://github.com/nodejs/node/commit/152a3c7d1d)] - **process**: print versions by sort (Himself65) [#46428](https://github.com/nodejs/node/pull/46428) +* \[[`164bfe82cc`](https://github.com/nodejs/node/commit/164bfe82cc)] - **(SEMVER-MINOR)** **src**: add initial support for single executable applications (Darshan Sen) [#45038](https://github.com/nodejs/node/pull/45038) +* \[[`f3908411fd`](https://github.com/nodejs/node/commit/f3908411fd)] - **(SEMVER-MINOR)** **src**: allow optional Isolate termination in node::Stop() (Shelley Vohr) [#46583](https://github.com/nodejs/node/pull/46583) +* \[[`bdba600d32`](https://github.com/nodejs/node/commit/bdba600d32)] - **src**: remove icu usage from node\_string.cc (Yagiz Nizipli) [#46548](https://github.com/nodejs/node/pull/46548) +* \[[`31fb2e22a0`](https://github.com/nodejs/node/commit/31fb2e22a0)] - **src**: add fflush() to SnapshotData::ToFile() (Anna Henningsen) [#46531](https://github.com/nodejs/node/pull/46531) +* \[[`c34bac2fed`](https://github.com/nodejs/node/commit/c34bac2fed)] - **(SEMVER-MINOR)** **src**: allow blobs in addition to `FILE*`s in embedder snapshot API (Anna Henningsen) [#46491](https://github.com/nodejs/node/pull/46491) +* \[[`c3325bfc0d`](https://github.com/nodejs/node/commit/c3325bfc0d)] - **src**: make edge names in BaseObjects more descriptive in heap snapshots (Joyee Cheung) [#46492](https://github.com/nodejs/node/pull/46492) +* \[[`3c5db8f419`](https://github.com/nodejs/node/commit/3c5db8f419)] - **src**: avoid leaking snapshot fp on error (Tobias Nießen) [#46497](https://github.com/nodejs/node/pull/46497) +* \[[`1a808a4aad`](https://github.com/nodejs/node/commit/1a808a4aad)] - **src**: check return value of ftell() (Tobias Nießen) [#46495](https://github.com/nodejs/node/pull/46495) +* \[[`f72f643549`](https://github.com/nodejs/node/commit/f72f643549)] - **src**: remove unused includes from main thread (Yagiz Nizipli) [#46471](https://github.com/nodejs/node/pull/46471) +* \[[`60c2a863da`](https://github.com/nodejs/node/commit/60c2a863da)] - **src**: use string\_view instead of std::string& (Yagiz Nizipli) [#46471](https://github.com/nodejs/node/pull/46471) +* \[[`f35f6d2218`](https://github.com/nodejs/node/commit/f35f6d2218)] - **src**: use simdutf utf8 to utf16 instead of icu (Yagiz Nizipli) [#46471](https://github.com/nodejs/node/pull/46471) +* \[[`00b81c7afe`](https://github.com/nodejs/node/commit/00b81c7afe)] - **src**: replace icu with simdutf for char counts (Yagiz Nizipli) [#46472](https://github.com/nodejs/node/pull/46472) +* \[[`683a1f8f3e`](https://github.com/nodejs/node/commit/683a1f8f3e)] - **(SEMVER-MINOR)** **src**: allow snapshotting from the embedder API (Anna Henningsen) [#45888](https://github.com/nodejs/node/pull/45888) +* \[[`658d2f4710`](https://github.com/nodejs/node/commit/658d2f4710)] - **(SEMVER-MINOR)** **src**: make build\_snapshot a per-Isolate option, rather than a global one (Anna Henningsen) [#45888](https://github.com/nodejs/node/pull/45888) +* \[[`6801d3753c`](https://github.com/nodejs/node/commit/6801d3753c)] - **(SEMVER-MINOR)** **src**: add snapshot support for embedder API (Anna Henningsen) [#45888](https://github.com/nodejs/node/pull/45888) +* \[[`95065c3185`](https://github.com/nodejs/node/commit/95065c3185)] - **src**: add additional utilities to crypto::SecureContext (James M Snell) [#45912](https://github.com/nodejs/node/pull/45912) +* \[[`efc59d0843`](https://github.com/nodejs/node/commit/efc59d0843)] - **src**: add KeyObjectHandle::HasInstance (James M Snell) [#45912](https://github.com/nodejs/node/pull/45912) +* \[[`a8a2d0e2b1`](https://github.com/nodejs/node/commit/a8a2d0e2b1)] - **src**: add GetCurrentCipherName/Version to crypto\_common (James M Snell) [#45912](https://github.com/nodejs/node/pull/45912) +* \[[`6cf860d3d6`](https://github.com/nodejs/node/commit/6cf860d3d6)] - **src**: back snapshot I/O with a std::vector sink (Joyee Cheung) [#46463](https://github.com/nodejs/node/pull/46463) +* \[[`e77d538d32`](https://github.com/nodejs/node/commit/e77d538d32)] - **(SEMVER-MINOR)** **src**: allow embedder control of code generation policy (Shelley Vohr) [#46368](https://github.com/nodejs/node/pull/46368) +* \[[`7756438c81`](https://github.com/nodejs/node/commit/7756438c81)] - **stream**: add trailing commas in webstream source files (Antoine du Hamel) [#46685](https://github.com/nodejs/node/pull/46685) +* \[[`6b64a945c6`](https://github.com/nodejs/node/commit/6b64a945c6)] - **stream**: add trailing commas in stream source files (Antoine du Hamel) [#46686](https://github.com/nodejs/node/pull/46686) +* \[[`633d3f292d`](https://github.com/nodejs/node/commit/633d3f292d)] - **(SEMVER-MINOR)** **stream**: add abort signal for ReadableStream and WritableStream (Debadree Chatterjee) [#46273](https://github.com/nodejs/node/pull/46273) +* \[[`f91260b32a`](https://github.com/nodejs/node/commit/f91260b32a)] - **stream**: refactor to use `validateAbortSignal` (Antoine du Hamel) [#46520](https://github.com/nodejs/node/pull/46520) +* \[[`6bf7388b62`](https://github.com/nodejs/node/commit/6bf7388b62)] - **stream**: allow transfer of readable byte streams (MrBBot) [#45955](https://github.com/nodejs/node/pull/45955) +* \[[`c2068537fa`](https://github.com/nodejs/node/commit/c2068537fa)] - **stream**: add pipeline() for webstreams (Debadree Chatterjee) [#46307](https://github.com/nodejs/node/pull/46307) +* \[[`4cf4b41c56`](https://github.com/nodejs/node/commit/4cf4b41c56)] - **stream**: add suport for abort signal in finished() for webstreams (Debadree Chatterjee) [#46403](https://github.com/nodejs/node/pull/46403) +* \[[`b844a09fa5`](https://github.com/nodejs/node/commit/b844a09fa5)] - **stream**: dont access Object.prototype.type during TransformStream init (Debadree Chatterjee) [#46389](https://github.com/nodejs/node/pull/46389) +* \[[`6ad01fd7b5`](https://github.com/nodejs/node/commit/6ad01fd7b5)] - **test**: fix `test-net-autoselectfamily` for kernel without IPv6 support (Livia Medeiros) [#45856](https://github.com/nodejs/node/pull/45856) +* \[[`2239e24306`](https://github.com/nodejs/node/commit/2239e24306)] - **test**: fix assertions in test-snapshot-dns-lookup\* (Tobias Nießen) [#46618](https://github.com/nodejs/node/pull/46618) +* \[[`c4ca98e786`](https://github.com/nodejs/node/commit/c4ca98e786)] - **test**: cover publicExponent validation in OpenSSL (Tobias Nießen) [#46632](https://github.com/nodejs/node/pull/46632) +* \[[`e60d3f2b1d`](https://github.com/nodejs/node/commit/e60d3f2b1d)] - **test**: add WPTRunner support for variants and generating WPT reports (Filip Skokan) [#46498](https://github.com/nodejs/node/pull/46498) +* \[[`217f2f6e2a`](https://github.com/nodejs/node/commit/217f2f6e2a)] - **test**: add trailing commas in `test/pummel` (Antoine du Hamel) [#46610](https://github.com/nodejs/node/pull/46610) +* \[[`641e1771c8`](https://github.com/nodejs/node/commit/641e1771c8)] - **test**: enable api-invalid-label.any.js in encoding WPTs (Filip Skokan) [#46506](https://github.com/nodejs/node/pull/46506) +* \[[`89aa161173`](https://github.com/nodejs/node/commit/89aa161173)] - **test**: fix tap parser fails if a test logs a number (Pulkit Gupta) [#46056](https://github.com/nodejs/node/pull/46056) +* \[[`faba8d4a30`](https://github.com/nodejs/node/commit/faba8d4a30)] - **test**: add trailing commas in `test/js-native-api` (Antoine du Hamel) [#46385](https://github.com/nodejs/node/pull/46385) +* \[[`d556ccdd26`](https://github.com/nodejs/node/commit/d556ccdd26)] - **test**: make more crypto tests work with BoringSSL (Shelley Vohr) [#46429](https://github.com/nodejs/node/pull/46429) +* \[[`c7f29b24a6`](https://github.com/nodejs/node/commit/c7f29b24a6)] - **test**: add trailing commas in `test/known_issues` (Antoine du Hamel) [#46408](https://github.com/nodejs/node/pull/46408) +* \[[`a66e7ca6c5`](https://github.com/nodejs/node/commit/a66e7ca6c5)] - **test**: add trailing commas in `test/internet` (Antoine du Hamel) [#46407](https://github.com/nodejs/node/pull/46407) +* \[[`0f75633086`](https://github.com/nodejs/node/commit/0f75633086)] - **test,crypto**: update WebCryptoAPI WPT (Filip Skokan) [#46575](https://github.com/nodejs/node/pull/46575) +* \[[`ddf5002782`](https://github.com/nodejs/node/commit/ddf5002782)] - **test\_runner**: parse non-ascii character correctly (Mert Can Altın) [#45736](https://github.com/nodejs/node/pull/45736) +* \[[`5b748114d2`](https://github.com/nodejs/node/commit/5b748114d2)] - **test\_runner**: allow nesting test within describe (Moshe Atlow) [#46544](https://github.com/nodejs/node/pull/46544) +* \[[`c526f9f70a`](https://github.com/nodejs/node/commit/c526f9f70a)] - **test\_runner**: fix missing test diagnostics (Moshe Atlow) [#46450](https://github.com/nodejs/node/pull/46450) +* \[[`b31aabb101`](https://github.com/nodejs/node/commit/b31aabb101)] - **test\_runner**: top-level diagnostics not ommited when running with --test (Pulkit Gupta) [#46441](https://github.com/nodejs/node/pull/46441) +* \[[`6119289251`](https://github.com/nodejs/node/commit/6119289251)] - **test\_runner**: add initial code coverage support (Colin Ihrig) [#46017](https://github.com/nodejs/node/pull/46017) +* \[[`6f24f0621e`](https://github.com/nodejs/node/commit/6f24f0621e)] - **timers**: cleanup no-longer relevant TODOs in timers/promises (James M Snell) [#46499](https://github.com/nodejs/node/pull/46499) +* \[[`1cd22e7d19`](https://github.com/nodejs/node/commit/1cd22e7d19)] - **tools**: fix bug in `prefer-primordials` lint rule (Antoine du Hamel) [#46659](https://github.com/nodejs/node/pull/46659) +* \[[`87df34ac28`](https://github.com/nodejs/node/commit/87df34ac28)] - **tools**: fix update-ada script (Yagiz Nizipli) [#46550](https://github.com/nodejs/node/pull/46550) +* \[[`f62b58a623`](https://github.com/nodejs/node/commit/f62b58a623)] - **tools**: add a daily wpt.fyi synchronized report upload (Filip Skokan) [#46498](https://github.com/nodejs/node/pull/46498) +* \[[`803f00aa32`](https://github.com/nodejs/node/commit/803f00aa32)] - **tools**: update eslint to 8.34.0 (Node.js GitHub Bot) [#46625](https://github.com/nodejs/node/pull/46625) +* \[[`f87216bdb2`](https://github.com/nodejs/node/commit/f87216bdb2)] - **tools**: update lint-md-dependencies to rollup\@3.15.0 to-vfile\@7.2.4 (Node.js GitHub Bot) [#46623](https://github.com/nodejs/node/pull/46623) +* \[[`8ee9e48560`](https://github.com/nodejs/node/commit/8ee9e48560)] - **tools**: update doc to remark-html\@15.0.2 to-vfile\@7.2.4 (Node.js GitHub Bot) [#46622](https://github.com/nodejs/node/pull/46622) +* \[[`148c5d9239`](https://github.com/nodejs/node/commit/148c5d9239)] - **tools**: update lint-md-dependencies to rollup\@3.13.0 vfile-reporter\@7.0.5 (Node.js GitHub Bot) [#46503](https://github.com/nodejs/node/pull/46503) +* \[[`51c6c61a58`](https://github.com/nodejs/node/commit/51c6c61a58)] - **tools**: update ESLint custom rules to not use the deprecated format (Antoine du Hamel) [#46460](https://github.com/nodejs/node/pull/46460) +* \[[`a51fe3c663`](https://github.com/nodejs/node/commit/a51fe3c663)] - **url**: replace url-parser with ada (Yagiz Nizipli) [#46410](https://github.com/nodejs/node/pull/46410) +* \[[`129c9e7180`](https://github.com/nodejs/node/commit/129c9e7180)] - **url**: remove unused `URL::ToFilePath()` (Yagiz Nizipli) [#46487](https://github.com/nodejs/node/pull/46487) +* \[[`9a604d67c3`](https://github.com/nodejs/node/commit/9a604d67c3)] - **url**: remove unused `URL::toObject` (Yagiz Nizipli) [#46486](https://github.com/nodejs/node/pull/46486) +* \[[`d6fbebda54`](https://github.com/nodejs/node/commit/d6fbebda54)] - **url**: remove unused `setURLConstructor` function (Yagiz Nizipli) [#46485](https://github.com/nodejs/node/pull/46485) +* \[[`17b3ee33c2`](https://github.com/nodejs/node/commit/17b3ee33c2)] - **vm**: properly support symbols on globals (Nicolas DUBIEN) [#46458](https://github.com/nodejs/node/pull/46458) + +Windows 32-bit Installer: https://nodejs.org/dist/v19.7.0/node-v19.7.0-x86.msi
+Windows 64-bit Installer: https://nodejs.org/dist/v19.7.0/node-v19.7.0-x64.msi
+Windows 32-bit Binary: https://nodejs.org/dist/v19.7.0/win-x86/node.exe
+Windows 64-bit Binary: https://nodejs.org/dist/v19.7.0/win-x64/node.exe
+macOS 64-bit Installer: https://nodejs.org/dist/v19.7.0/node-v19.7.0.pkg
+macOS Apple Silicon 64-bit Binary: https://nodejs.org/dist/v19.7.0/node-v19.7.0-darwin-arm64.tar.gz
+macOS Intel 64-bit Binary: https://nodejs.org/dist/v19.7.0/node-v19.7.0-darwin-x64.tar.gz
+Linux 64-bit Binary: https://nodejs.org/dist/v19.7.0/node-v19.7.0-linux-x64.tar.xz
+Linux PPC LE 64-bit Binary: https://nodejs.org/dist/v19.7.0/node-v19.7.0-linux-ppc64le.tar.xz
+Linux s390x 64-bit Binary: https://nodejs.org/dist/v19.7.0/node-v19.7.0-linux-s390x.tar.xz
+AIX 64-bit Binary: https://nodejs.org/dist/v19.7.0/node-v19.7.0-aix-ppc64.tar.gz
+ARMv7 32-bit Binary: https://nodejs.org/dist/v19.7.0/node-v19.7.0-linux-armv7l.tar.xz
+ARMv8 64-bit Binary: https://nodejs.org/dist/v19.7.0/node-v19.7.0-linux-arm64.tar.xz
+Source Code: https://nodejs.org/dist/v19.7.0/node-v19.7.0.tar.gz
+Other release files: https://nodejs.org/dist/v19.7.0/
+Documentation: https://nodejs.org/docs/v19.7.0/api/ + +### SHASUMS + +``` +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA256 + +af6a7a636db2a10bfd563181095ed9bcce4a2e49b519649ed0620d48509c1afc node-v19.7.0-aix-ppc64.tar.gz +7a96935baf731d0917a96370dda707b8195ae0a123d6c5ff777d41c3fdda949d node-v19.7.0-darwin-arm64.tar.gz +16fc661b7f95a4a871fe32acf0b72eb3001e3a41cee9b7af2c50369e028c4d6d node-v19.7.0-darwin-arm64.tar.xz +2b8593445a4ffc6f42020827dce134497204d55d1ac4a705c0919583d2e6a781 node-v19.7.0-darwin-x64.tar.gz +844ae93118f024ff00c47412456de53677ffeb85bbfdebec75d4c9fea84b8c1d node-v19.7.0-darwin-x64.tar.xz +63faf9adcf3d35de8e4426811105beea03c5d93a09c0aa277dcff8b45dccbb32 node-v19.7.0-headers.tar.gz +53bcb1b0688dda574129cb9ee7ec30efe7c77b87166715b1265758a41cec49d1 node-v19.7.0-headers.tar.xz +a9d3c9c3bfdcf7849161b56df8de652552f723144bb05e3df015269523c6e14b node-v19.7.0-linux-arm64.tar.gz +1b582ccfaa63c2b8eda93c4f8f08743da4c9d46b08c3bd831ba4bd2339db7e2d node-v19.7.0-linux-arm64.tar.xz +ad22832d56d202bee48c3612efbc51e9460c86db9d81b6d026fb38374a5ba914 node-v19.7.0-linux-armv7l.tar.gz +4f06bbaf2d81d9094841a20f944aa472d57cb832adf244f1e435585ed6e10514 node-v19.7.0-linux-armv7l.tar.xz +66bcab8612a1213714c9e106a11c3647aa1991b93a218dd000aeeb1a4d0fe351 node-v19.7.0-linux-ppc64le.tar.gz +22ec61a92f5c75455e9a9182593b2ef460a1eed4b3ed2e535cb8d8da3b6baf82 node-v19.7.0-linux-ppc64le.tar.xz +e42d785ec282b200922702fd97b87c31bf2b660bda20eaab1f9e4be62e5de336 node-v19.7.0-linux-s390x.tar.gz +e7839510d3c09c0ce5fc909c516d61907b0be18f097a98ae9ae28638c48408c1 node-v19.7.0-linux-s390x.tar.xz +f5f0ab097f4d120045a327ed2cf9afff264e10c5d304d6ec9529beedfd0c0fd6 node-v19.7.0-linux-x64.tar.gz +66d352bd96bc947828e29d3524716fdf0569f900eaa4bbc0517b618ffd597970 node-v19.7.0-linux-x64.tar.xz +9e14df904e31753973224d1071c814a124f96e28b8befa1f11549151a830dcd0 node-v19.7.0.pkg +3b16e85ce3442caaac35e0f28974a6fa381529c3a6caac1cc36234efa24a9e72 node-v19.7.0.tar.gz +511847f724ea405f85e25803cbcf8b131b14cd06b2d7046698bd2760c404bfc3 node-v19.7.0.tar.xz +32e798d8f139eee1e49d5d91e5547cdcfc80ed3a6b52b0f8455635f9c71e1674 node-v19.7.0-win-x64.7z +b7a6df0d6f14c90ca11b9989a4d135ed5b9a1edc2b16227b353287cf2e750e4a node-v19.7.0-win-x64.zip +ad8c1a3d6338b4f36df52af1860e5c3c2946b7c3c1552d8184c586acd4c594f5 node-v19.7.0-win-x86.7z +be83b05aee4bcbd0973f757d8d07917ab6ef03ec937e07c2d9d2da03b9dd8fd0 node-v19.7.0-win-x86.zip +7424560c62c5985750abe03e049297eeee68bdc8ea58c4269de2fc4d7194a8e4 node-v19.7.0-x64.msi +76f2adb694ad7f77486058940f66c3589f2cb3aca33fde31ee8323c9a8aba39e node-v19.7.0-x86.msi +adac1dfe0af865c45b03d08dff6ab983c2429113f82e5dc1d7405f7b35608670 win-x64/node.exe +7159341b365d39d7a7c9115aed8b0113c94702248a9dc7a9b337dc20fb9278e5 win-x64/node.lib +aeaa00c8cfcfc53395eeee151a66f864876d457f9153d1ae8df2506608315dd4 win-x64/node_pdb.7z +deb144f70d224a1136c86a15f010f09bc57fedbb54a6f202d0bc4f7f20a649db win-x64/node_pdb.zip +86320ab2f36e6832087d6102de89a9f5b15ff67e21d91c30675dbfd736060d92 win-x86/node.exe +56473b0dca973176374298479426c078b4e113e88c949a4a3e541994b76e8c36 win-x86/node.lib +d0eb21767de0502f6fbe956976cddbb65a05207ab337af7d78579ffaef844538 win-x86/node_pdb.7z +8605acbc2332d32dd764f76e60f778307fc41590f5ff71b054b791a0ca62ebae win-x86/node_pdb.zip +-----BEGIN PGP SIGNATURE----- + +iQEzBAEBCAAdFiEEDv/hvO/ZyE49CYFSkzsB9AtcqUYFAmP1C2MACgkQkzsB9Atc +qUbySwgAt4ajYUao8V0jA4qSKuy/ZAUv67st+iXCrzSgFovy1a+USLc/uoZodxPF +/750HerLQsgT6F+p2J3vSxplOvuC3TCZCEYX3uDB2fTph4hOdnuRW568LVlxS5KE +6AuLP4yRf/aweEUDIYWyCVP1Y+3yEhHxv0JXWubaMFINcrD6MrjeJ7Rb/ac66PMM +clJjQx9wS8F6/H8CQobyfgHlUeElGtaAzWAGvHBV+F5X49LgfRMEdO49J/07EC7q +58MN7iBYX9QXUYjsLTCXQixejLbL/V1wc+QXPKtvcerOCjfs6xFT2AJ1TeivLf5y +lARu3IftHM59pB491TezmpBW+eKgwQ== +=oi2I +-----END PGP SIGNATURE----- + +``` From adade260ab9c0ce240e4ffe1f291ad2d2c8d80b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Nie=C3=9Fen?= Date: Wed, 22 Feb 2023 17:56:01 +0100 Subject: [PATCH 13/21] doc: fix typos in security release announcement (#5056) Co-authored-by: Claudio Wunder --- .../february-2023-security-releases.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/locale/en/blog/vulnerability/february-2023-security-releases.md b/locale/en/blog/vulnerability/february-2023-security-releases.md index c9028e263cb7c..838d18236f9c9 100644 --- a/locale/en/blog/vulnerability/february-2023-security-releases.md +++ b/locale/en/blog/vulnerability/february-2023-security-releases.md @@ -21,11 +21,11 @@ Impacts: * All versions of the 19.x, 18.x, 16.x, and 14.x release lines. -## Node.js Permissions policies can be bypassed via process.mainModule (High) ([CVE-2023-23918](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-23918)) +## Node.js Permissions policies can be bypassed via process.mainModule (High) ([CVE-2023-23918](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-23918)) -It was possible to bypass [Permissions](https://nodejs.org/api/permissions.html) and access non authorized modules by using process.mainModule.require(). This only affects users who had enabled the experimental permissions option with --experimental-policy. +It was possible to bypass [Permissions](https://nodejs.org/api/permissions.html) and access non authorized modules by using process.mainModule.require(). This only affects users who had enabled the experimental permissions option with `--experimental-policy`. -Thank you, to [@goums](https://github.com/goums) for reporting this vulnerability and thank you [Rafael Gonzaga](https://github.com/RafaelGSS) for fixing it. +Thank you, to [@goums](https://github.com/goums) for reporting this vulnerability and thank you [Rafael Gonzaga](https://github.com/RafaelGSS) for fixing it. Impacts: @@ -35,7 +35,7 @@ Impacts: In some cases Node.js did does not clear the OpenSSL error stack after operations that may set it. This may lead to false positive errors during subsequent cryptographic operations that happen to be on the same thread. This in turn could be used to cause a denial of service. -"Thank you, to Morgan Jones and Ryan Dorrity from Viasat Secure Mobile for reporting and discovering this vulnerability and thank you [Rafael Gonzaga](https://github.com/RafaelGSS) for fixing it. +Thank you, to Morgan Jones and Ryan Dorrity from Viasat Secure Mobile for reporting and discovering this vulnerability and thank you [Rafael Gonzaga](https://github.com/RafaelGSS) for fixing it. Impacts: @@ -56,7 +56,7 @@ Impacts: ## Regular Expression Denial of Service in Headers in Node.js fetch API(Low) ([CVE-2023-24807](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-24807)) The Headers.set() and Headers.append() methods in the -[fetch API](https://nodejs.org/dist/latest/docs/api/globals.html#fetch) in Node.js where vulnerable to Regular a Expression Denial of Service (ReDoS) attacks. +[fetch API](https://nodejs.org/dist/latest/docs/api/globals.html#fetch) in Node.js were vulnerable to a Regular Expression Denial of Service (ReDoS) attacks. Thank you, to Carter Snook for reporting this vulnerability and thank you Rich Trott for fixing it. @@ -67,9 +67,9 @@ Impacts: ## Node.js insecure loading of ICU data through ICU_DATA environment variable (Low) ([CVE-2023-23920](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-23920)) Node.js would search and potentially load ICU data when running with elevated priviledges. Node.js -was modified to build with ICU_NO_USER_DATA_OVERRIDE to avoid this. +was modified to build with `ICU_NO_USER_DATA_OVERRIDE` to avoid this. -Thank you, to Ben Noordhuis for reporting this vulnerability and thank you [Rafael Gonzaga](https://github.com/RafaelGSS) for fixing it. +Thank you, to Ben Noordhuis for reporting this vulnerability and thank you [Rafael Gonzaga](https://github.com/RafaelGSS) for fixing it. Impacts: From abe8aa9dc0108f7fda4e5a8b39a1ed7988ff308c Mon Sep 17 00:00:00 2001 From: Cody Torgerson <34144063+CodytTorgerson@users.noreply.github.com> Date: Mon, 27 Feb 2023 15:52:03 +0100 Subject: [PATCH 14/21] fix(docs): misspelled words (#5049) Co-authored-by: Maledong --- locale/en/docs/guides/diagnostics/memory/using-heap-snapshot.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locale/en/docs/guides/diagnostics/memory/using-heap-snapshot.md b/locale/en/docs/guides/diagnostics/memory/using-heap-snapshot.md index ad18686eb003f..a12d23ad065a2 100644 --- a/locale/en/docs/guides/diagnostics/memory/using-heap-snapshot.md +++ b/locale/en/docs/guides/diagnostics/memory/using-heap-snapshot.md @@ -128,7 +128,7 @@ inspector protocol: ## How to find a memory leak with Heap Snapshots -You can find a memory leak by compaing too snapshots. It's important to make +You can find a memory leak by comparing two snapshots. It's important to make sure the snapshots difference does not contain unnecessary information. Following steps should produce a clean diff between snapshots. From 903c1c6c7ddb21a01668dad8803ebeafa62c1865 Mon Sep 17 00:00:00 2001 From: Sergi Sergio Date: Mon, 27 Feb 2023 19:15:33 +0400 Subject: [PATCH 15/21] =?UTF-8?q?ru=EF=BC=9Areplace=20jargon=20in=20Russia?= =?UTF-8?q?n=20text=20(#5027)Co-authored-by:=20Claudio=20Wunder=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix: replace jargon in russian text https://ru.wiktionary.org/wiki/%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB Co-authored-by: Claudio Wunder --- locale/ru/docs/es6.md | 18 +++++++++--------- locale/ru/docs/index.md | 6 +++--- locale/ru/download/current.md | 4 ++-- locale/ru/download/index.md | 4 ++-- locale/ru/get-involved/contribute.md | 2 +- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/locale/ru/docs/es6.md b/locale/ru/docs/es6.md index 0d546f31e8a4b..72d02a7942b77 100644 --- a/locale/ru/docs/es6.md +++ b/locale/ru/docs/es6.md @@ -10,20 +10,20 @@ Node.js строится на современных версиях [V8](https:/ [спецификации JavaScript ECMA-262](http://www.ecma-international.org/publications/standards/Ecma-262.htm) своевременно предоставляя их разработчикам Node.js, а также улучшая производительность и стабильность. -Весь функционал ECMAScript 2015 (ES6) разделен на три группы: **поставляемый (shipping)**, -**подготовленный (staged)** и **в процессе (in progress)**: +Вся функциональность ECMAScript 2015 (ES6) разделена на три группы: **поставляемая (shipping)**, +**подготовленная (staged)** и **в процессе (in progress)**: -* Весь **поставляемый** функционал, который V8 считает стабильным, включен **по умолчанию в Node.js** +* Вся **поставляемая** функциональность, которую V8 считает стабильной, включена **по умолчанию в Node.js** и **НЕ** нуждается в дополнительных конфигурациях и флагах. -* **Подготовленный** функционал, это список почти готовых внедрений, который еще не утвержден - командой V8 как стабильный, и требует дополнительный флаг `--harmony`. -* Функционал под знаком **в процессе** может быть активирован индивидуально, с помощью соответствующего +* **Подготовленная** функциональность, это список почти готовых внедрений, который еще не утвержден + командой V8 как стабильной, и требует дополнительный флаг `--harmony`. +* Функциональность под знаком **в процессе** может быть активирована индивидуально, с помощью соответствующего флага гармонизации, хотя это крайне нежелательно, кроме как для целей тестирования. Примечание: эти флаги доступны в V8 и могут измениться без уведомления об их устаревании. ## Какие функции поставляются с какой версией Node.js по умолчанию? -На сайте [node.green](https://node.green/) представлен отличный обзор поддерживаемого функционала +На сайте [node.green](https://node.green/) представлен отличный обзор поддерживаемой функциональности ECMAScript в различных версиях Node.js на основе таблицы сравнения kangax. ## Какие функции в процессе? @@ -31,7 +31,7 @@ ECMAScript в различных версиях Node.js на основе таб Новые функции постоянно добавляются в движок V8. Вообще говоря, ожидайте, что они появятся в будущем выпуске Node.js, хотя точных дат неизвестно. -Вы можете узнать функционал *в процессе*, доступный в каждом выпуске Node.js, используя аргумент +Вы можете узнать о функциональности *в процессе*, доступной в каждом выпуске Node.js, используя аргумент `--v8-options`. Обратите внимание, что это неполные и, возможно, некорректные функции V8, поэтому используйте их на свой страх и риск: @@ -41,7 +41,7 @@ node --v8-options | grep "in progress" ## Моя инфраструктура настроена с использованием флага --harmony. Должен ли я удалить его? -Текущее поведение флага `--harmony` на Node.js состоит в том, чтобы включать только **подготовленный** функционал. +Текущее поведение флага `--harmony` на Node.js состоит в том, чтобы включать только **подготовленную** функциональность. В конце концов, теперь это синоним `--es_staging`. Как упомянуто выше, это законченные функции, которые еще не считаются стабильными. Если вы беспокоитесь о безопасности использования таких функций, особенно в производственных средах, рассмотрите возможность выключения этого флага до тех пор, пока требуемые функции не перейдут в стадию "по умолчанию" на V8 и, следовательно, diff --git a/locale/ru/docs/index.md b/locale/ru/docs/index.md index acbe5248a8516..3f20a72b5e81b 100644 --- a/locale/ru/docs/index.md +++ b/locale/ru/docs/index.md @@ -10,7 +10,7 @@ labels: На этом сайте представлено несколько видов документаций: * Документация API -* Функционал ES6 +* Функциональность ES6 * Руководства ## Документация API @@ -30,9 +30,9 @@ labels: -## Функционал ES6 +## Функциональность ES6 -[Раздел ES6](/ru/docs/es6/) описывает три группы функционала ES6 и подробную информацию о том, какие функции +[Раздел ES6](/ru/docs/es6/) описывает три группы функциональности ES6 и подробную информацию о том, какие функции включены по умолчанию в Node.js. Также рассматривается вопрос: как найти версию V8, поставляемую с конкретным выпуском Node.js. diff --git a/locale/ru/download/current.md b/locale/ru/download/current.md index 6d563a79046c5..99d4dbc80b062 100644 --- a/locale/ru/download/current.md +++ b/locale/ru/download/current.md @@ -6,7 +6,7 @@ downloads: headline: Загрузки lts: LTS current: Текущая - tagline-current: Последний функционал + tagline-current: Последняя функциональность tagline-lts: Рекомендованный для большинства display-hint: Показать загрузки для intro: > @@ -23,7 +23,7 @@ downloads: additional: headline: Дополнительные платформы intro: > - Члены сообщества Node.js поддерживают неофициальные сборки Node.js для ряда других платформ. Обратите внимание, что такие сборки не поддерживаются основной командой Node.js и могут не содержать всего функционала, что и текущая версия Node.js. + Члены сообщества Node.js поддерживают неофициальные сборки Node.js для ряда других платформ. Обратите внимание, что такие сборки не поддерживаются основной командой Node.js и могут не содержать всей функциональности, что и текущая версия Node.js. platform: Платформа provider: Провайдер SmartOSBinaries: Исходный код для SmartOS diff --git a/locale/ru/download/index.md b/locale/ru/download/index.md index 95c77abb7cd7e..6d04eb2964627 100644 --- a/locale/ru/download/index.md +++ b/locale/ru/download/index.md @@ -6,7 +6,7 @@ downloads: headline: Загрузки lts: LTS current: Текущая - tagline-current: Последний функционал + tagline-current: Последняя функциональность tagline-lts: Рекомендованный для большинства display-hint: Показать загрузки для intro: > @@ -23,7 +23,7 @@ downloads: additional: headline: Дополнительные платформы intro: > - Члены сообщества Node.js поддерживают неофициальные сборки Node.js для ряда других платформ. Обратите внимание, что такие сборки не поддерживаются основной командой Node.js и могут не содержать всего функционала, что и текущая версия Node.js. + Члены сообщества Node.js поддерживают неофициальные сборки Node.js для ряда других платформ. Обратите внимание, что такие сборки не поддерживаются основной командой Node.js и могут не содержать всей функциональности, что и текущая версия Node.js. platform: Платформа provider: Провайдер SmartOSBinaries: Исходный код для SmartOS diff --git a/locale/ru/get-involved/contribute.md b/locale/ru/get-involved/contribute.md index 3de3a4746cbc4..e38825dbc68b2 100644 --- a/locale/ru/get-involved/contribute.md +++ b/locale/ru/get-involved/contribute.md @@ -36,7 +36,7 @@ layout: contribute.hbs ## Написание кода -Если вы хотите исправить ошибки или добавить новый функционал в Node.js, обязательно ознакомьтесь с +Если вы хотите исправить ошибки или добавить новую функциональность в Node.js, обязательно ознакомьтесь с [правилами участия для Node.js](https://github.com/nodejs/node/blob/main/CONTRIBUTING.md#pull-requests). Там же объясняется процесс проверки существующими сотрудниками всех вкладов в проект. From 78c18677d109abc889f56c2fe133c70343c364ce Mon Sep 17 00:00:00 2001 From: Rishabh Bhandari <41220684+RishabhKodes@users.noreply.github.com> Date: Mon, 27 Feb 2023 21:23:06 +0530 Subject: [PATCH 16/21] doc: added example for Readable stream back-pressure (#5066)Co-authored-by: Claudio Wunder * added example for back-pressure Signed-off-by: Rishabh Bhandari * linting fixes Signed-off-by: Rishabh Bhandari --------- Signed-off-by: Rishabh Bhandari Co-authored-by: Claudio Wunder --- .../docs/guides/backpressuring-in-streams.md | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/locale/en/docs/guides/backpressuring-in-streams.md b/locale/en/docs/guides/backpressuring-in-streams.md index 7358f3894c724..89d3270d408e4 100644 --- a/locale/en/docs/guides/backpressuring-in-streams.md +++ b/locale/en/docs/guides/backpressuring-in-streams.md @@ -504,6 +504,38 @@ readable.on('data', (data) => ); ``` +Here's an example of using [`.push()`][] with a Readable stream. + +```javascript +const { Readable } = require('stream'); + +// Create a custom Readable stream +const myReadableStream = new Readable({ + objectMode: true, + read(size) { + // Push some data onto the stream + this.push({ message: 'Hello, world!' }); + this.push(null); // Mark the end of the stream + } +}); + +// Consume the stream +myReadableStream.on('data', (chunk) => { + console.log(chunk); +}); + +// Output: +// { message: 'Hello, world!' } +``` +In this example, we create a custom Readable stream that pushes a single object +onto the stream using [`.push()`][]. The [`._read()`][] method is called when the stream is ready +to consume data, and in this case, we immediately push some data onto the stream and +mark the end of the stream by pushing null. + +We then consume the stream by listening for the 'data' event and logging each chunk of +data that is pushed onto the stream. In this case, we only push a single chunk of data +onto the stream, so we only see one log message. + ## Rules specific to Writable Streams Recall that a [`.write()`][] may return true or false dependent on some From 731568050603ff3f33c651544c80b3278a94d900 Mon Sep 17 00:00:00 2001 From: KruASe <55000336+KruASe76@users.noreply.github.com> Date: Mon, 27 Feb 2023 23:34:35 +0300 Subject: [PATCH 17/21] ru: correct translation for index.md (#5045)Co-authored-by: Alexandr Tovmach Co-authored-by: Maledong Co-authored-by: Claudio Wunder * Russian translation update Current translation is not quite accurate Signed-off-by: KruASe <55000336+KruASe76@users.noreply.github.com> * Update locale/ru/index.md Co-authored-by: Alexandr Tovmach Signed-off-by: KruASe <55000336+KruASe76@users.noreply.github.com> * Update locale/ru/index.md Co-authored-by: Alexandr Tovmach Signed-off-by: KruASe <55000336+KruASe76@users.noreply.github.com> --------- Signed-off-by: KruASe <55000336+KruASe76@users.noreply.github.com> Co-authored-by: Alexandr Tovmach Co-authored-by: Maledong Co-authored-by: Claudio Wunder --- locale/ru/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/locale/ru/index.md b/locale/ru/index.md index 2897348a86332..e916ab1576fdb 100644 --- a/locale/ru/index.md +++ b/locale/ru/index.md @@ -7,12 +7,12 @@ labels: other-downloads: Другие загрузки current: Текущая lts: LTS - tagline-current: Последние возможности + tagline-current: Новые возможности tagline-lts: Рекомендовано для большинства changelog: Список изменений api: Документация - version-schedule-prompt: Или смотрите на - version-schedule-prompt-link-text: график LTS + version-schedule-prompt: Информацию о поддерживаемых выпусках можно найти на + version-schedule-prompt-link-text: графике выпусков --- -Node.js® — это JavaScript-окружение построенное на движке [Chrome V8](https://v8.dev/). +Node.js® — это кросс-платформенная среда выполнения JavaScript с открытым исходным кодом. From 5f9862c5963a64d5887ac7925296d9769a070c96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9?= Date: Tue, 7 Mar 2023 15:46:31 -0500 Subject: [PATCH 18/21] Blog: v18.15.0 release post (#5073) --- locale/en/blog/release/v18.15.0.md | 186 +++++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 locale/en/blog/release/v18.15.0.md diff --git a/locale/en/blog/release/v18.15.0.md b/locale/en/blog/release/v18.15.0.md new file mode 100644 index 0000000000000..6ae5ee53196b1 --- /dev/null +++ b/locale/en/blog/release/v18.15.0.md @@ -0,0 +1,186 @@ +--- +date: 2023-03-07T20:12:11.827Z +version: 18.15.0 +category: release +title: Node v18.15.0 (LTS) +slug: node-v18-15-0 +layout: blog-post.hbs +author: Bethany Nicolle Griggs & Juan José Arboleda +--- + +### Notable Changes + +* \[[`63563f8a7a`](https://github.com/nodejs/node/commit/63563f8a7a)] - **doc,lib,src,test**: rename --test-coverage (Colin Ihrig) [#46017](https://github.com/nodejs/node/pull/46017) +* \[[`28a775b32f`](https://github.com/nodejs/node/commit/28a775b32f)] - **test\_runner**: add initial code coverage support (Colin Ihrig) [#46017](https://github.com/nodejs/node/pull/46017) +* \[[`4d50db14b3`](https://github.com/nodejs/node/commit/4d50db14b3)] - **(SEMVER-MINOR)** **test\_runner**: add reporters (Moshe Atlow) [#45712](https://github.com/nodejs/node/pull/45712) +* \[[`643545ab79`](https://github.com/nodejs/node/commit/643545ab79)] - **(SEMVER-MINOR)** **fs**: add statfs() functions (Colin Ihrig) [#46358](https://github.com/nodejs/node/pull/46358) +* \[[`110ead9abb`](https://github.com/nodejs/node/commit/110ead9abb)] - **(SEMVER-MINOR)** **vm**: expose cachedDataRejected for vm.compileFunction (Anna Henningsen) [#46320](https://github.com/nodejs/node/pull/46320) +* \[[`02632b42cf`](https://github.com/nodejs/node/commit/02632b42cf)] - **(SEMVER-MINOR)** **v8**: support gc profile (theanarkh) [#46255](https://github.com/nodejs/node/pull/46255) +* \[[`f09b838408`](https://github.com/nodejs/node/commit/f09b838408)] - **(SEMVER-MINOR)** **src,lib**: add constrainedMemory API for process (theanarkh) [#46218](https://github.com/nodejs/node/pull/46218) +* \[[`cb5bb12422`](https://github.com/nodejs/node/commit/cb5bb12422)] - **(SEMVER-MINOR)** **buffer**: add isAscii method (Yagiz Nizipli) [#46046](https://github.com/nodejs/node/pull/46046) + +### Commits + +* \[[`6f91c8e2ae`](https://github.com/nodejs/node/commit/6f91c8e2ae)] - **benchmark**: add trailing commas (Antoine du Hamel) [#46370](https://github.com/nodejs/node/pull/46370) +* \[[`d0b9be21eb`](https://github.com/nodejs/node/commit/d0b9be21eb)] - **benchmark**: remove buffer benchmarks redundancy (Brian White) [#45735](https://github.com/nodejs/node/pull/45735) +* \[[`6468f30d0d`](https://github.com/nodejs/node/commit/6468f30d0d)] - **benchmark**: introduce benchmark combination filtering (Brian White) [#45735](https://github.com/nodejs/node/pull/45735) +* \[[`cb5bb12422`](https://github.com/nodejs/node/commit/cb5bb12422)] - **(SEMVER-MINOR)** **buffer**: add isAscii method (Yagiz Nizipli) [#46046](https://github.com/nodejs/node/pull/46046) +* \[[`ec61bb04c0`](https://github.com/nodejs/node/commit/ec61bb04c0)] - **build**: export more OpenSSL symbols on Windows (Mohamed Akram) [#45486](https://github.com/nodejs/node/pull/45486) +* \[[`7bae4333ce`](https://github.com/nodejs/node/commit/7bae4333ce)] - **build**: fix MSVC 2022 Release compilation (Vladimir Morozov (REDMOND)) [#46228](https://github.com/nodejs/node/pull/46228) +* \[[`0f5f2d4470`](https://github.com/nodejs/node/commit/0f5f2d4470)] - **crypto**: include `hmac.h` in `crypto_util.h` (Adam Langley) [#46279](https://github.com/nodejs/node/pull/46279) +* \[[`91ece4161b`](https://github.com/nodejs/node/commit/91ece4161b)] - **crypto**: avoid hang when no algorithm available (Richard Lau) [#46237](https://github.com/nodejs/node/pull/46237) +* \[[`492fc95bdf`](https://github.com/nodejs/node/commit/492fc95bdf)] - **deps**: V8: cherry-pick 90be99fab31c (Michaël Zasso) [#46646](https://github.com/nodejs/node/pull/46646) +* \[[`732c77e3d9`](https://github.com/nodejs/node/commit/732c77e3d9)] - **deps**: update acorn to 8.8.2 (Node.js GitHub Bot) [#46363](https://github.com/nodejs/node/pull/46363) +* \[[`8582f99ffb`](https://github.com/nodejs/node/commit/8582f99ffb)] - **deps**: update to uvwasi 0.0.15 (Colin Ihrig) [#46253](https://github.com/nodejs/node/pull/46253) +* \[[`5453cd9940`](https://github.com/nodejs/node/commit/5453cd9940)] - **deps**: V8: cherry-pick bf0bd4868dde (Michaël Zasso) [#45908](https://github.com/nodejs/node/pull/45908) +* \[[`3ea53c5dc8`](https://github.com/nodejs/node/commit/3ea53c5dc8)] - **deps**: V8: cherry-pick c875e86df1d7 (sepehrst) [#46501](https://github.com/nodejs/node/pull/46501) +* \[[`c04808de4b`](https://github.com/nodejs/node/commit/c04808de4b)] - **doc**: correct the `sed` command for macOS in release process docs (Juan José) [#46397](https://github.com/nodejs/node/pull/46397) +* \[[`8113220690`](https://github.com/nodejs/node/commit/8113220690)] - **doc**: pass string to `textEncoder.encode` as input (Deokjin Kim) [#46421](https://github.com/nodejs/node/pull/46421) +* \[[`129dccf5d2`](https://github.com/nodejs/node/commit/129dccf5d2)] - **doc**: add tip for session.post function (theanarkh) [#46354](https://github.com/nodejs/node/pull/46354) +* \[[`919e581732`](https://github.com/nodejs/node/commit/919e581732)] - **doc**: add documentation for socket.destroySoon() (Luigi Pinca) [#46337](https://github.com/nodejs/node/pull/46337) +* \[[`fc15ac95a5`](https://github.com/nodejs/node/commit/fc15ac95a5)] - **doc**: fix commit message using test instead of deps (Tony Gorez) [#46313](https://github.com/nodejs/node/pull/46313) +* \[[`d153a93200`](https://github.com/nodejs/node/commit/d153a93200)] - **doc**: add v8 fast api contribution guidelines (Yagiz Nizipli) [#46199](https://github.com/nodejs/node/pull/46199) +* \[[`dbf082d082`](https://github.com/nodejs/node/commit/dbf082d082)] - **doc**: fix small typo error (0xflotus) [#46186](https://github.com/nodejs/node/pull/46186) +* \[[`94421b4cfe`](https://github.com/nodejs/node/commit/94421b4cfe)] - **doc**: mark some parameters as optional in webstreams (Deokjin Kim) [#46269](https://github.com/nodejs/node/pull/46269) +* \[[`5adb743511`](https://github.com/nodejs/node/commit/5adb743511)] - **doc**: update output of example in `events.getEventListeners` (Deokjin Kim) [#46268](https://github.com/nodejs/node/pull/46268) +* \[[`63563f8a7a`](https://github.com/nodejs/node/commit/63563f8a7a)] - **doc,lib,src,test**: rename --test-coverage (Colin Ihrig) [#46017](https://github.com/nodejs/node/pull/46017) +* \[[`4e88c7c813`](https://github.com/nodejs/node/commit/4e88c7c813)] - **esm**: delete preload mock test (Geoffrey Booth) [#46402](https://github.com/nodejs/node/pull/46402) +* \[[`643545ab79`](https://github.com/nodejs/node/commit/643545ab79)] - **(SEMVER-MINOR)** **fs**: add statfs() functions (Colin Ihrig) [#46358](https://github.com/nodejs/node/pull/46358) +* \[[`5019b5473f`](https://github.com/nodejs/node/commit/5019b5473f)] - **http**: res.setHeaders first implementation (Marco Ippolito) [#46109](https://github.com/nodejs/node/pull/46109) +* \[[`76622c4c60`](https://github.com/nodejs/node/commit/76622c4c60)] - **inspector**: allow opening inspector when `NODE_V8_COVERAGE` is set (Moshe Atlow) [#46113](https://github.com/nodejs/node/pull/46113) +* \[[`92f0747e03`](https://github.com/nodejs/node/commit/92f0747e03)] - **meta**: update AUTHORS (Node.js GitHub Bot) [#46399](https://github.com/nodejs/node/pull/46399) +* \[[`795251bc6f`](https://github.com/nodejs/node/commit/795251bc6f)] - **meta**: update AUTHORS (Node.js GitHub Bot) [#46303](https://github.com/nodejs/node/pull/46303) +* \[[`8865424c31`](https://github.com/nodejs/node/commit/8865424c31)] - **meta**: add .mailmap entry (Rich Trott) [#46303](https://github.com/nodejs/node/pull/46303) +* \[[`5ed679407b`](https://github.com/nodejs/node/commit/5ed679407b)] - **meta**: move evanlucas to emeritus (Evan Lucas) [#46274](https://github.com/nodejs/node/pull/46274) +* \[[`403df210ac`](https://github.com/nodejs/node/commit/403df210ac)] - **module**: move test reporter loading (Geoffrey Booth) [#45923](https://github.com/nodejs/node/pull/45923) +* \[[`2f7319e387`](https://github.com/nodejs/node/commit/2f7319e387)] - **readline**: fix detection of carriage return (Antoine du Hamel) [#46306](https://github.com/nodejs/node/pull/46306) +* \[[`73a8f46c4d`](https://github.com/nodejs/node/commit/73a8f46c4d)] - _**Revert**_ "**src**: let http2 streams end after session close" (Santiago Gimeno) [#46721](https://github.com/nodejs/node/pull/46721) +* \[[`30d783f91a`](https://github.com/nodejs/node/commit/30d783f91a)] - **src**: stop tracing agent before shutting down libuv (Santiago Gimeno) [#46380](https://github.com/nodejs/node/pull/46380) +* \[[`1508d90fda`](https://github.com/nodejs/node/commit/1508d90fda)] - **src**: get rid of fp arithmetic in ParseIPv4Host (Tobias Nießen) [#46326](https://github.com/nodejs/node/pull/46326) +* \[[`bdb793a082`](https://github.com/nodejs/node/commit/bdb793a082)] - **src**: use UNREACHABLE instead of CHECK(falsy) (Tobias Nießen) [#46317](https://github.com/nodejs/node/pull/46317) +* \[[`116a33649b`](https://github.com/nodejs/node/commit/116a33649b)] - **src**: add support for ETW stack walking (José Dapena Paz) [#46203](https://github.com/nodejs/node/pull/46203) +* \[[`b06298c98e`](https://github.com/nodejs/node/commit/b06298c98e)] - **src**: refactor EndsInANumber in node\_url.cc and adds IsIPv4NumberValid (Miguel Teixeira) [#46227](https://github.com/nodejs/node/pull/46227) +* \[[`26f41b041c`](https://github.com/nodejs/node/commit/26f41b041c)] - **src**: fix c++ exception on bad command line arg (Ben Noordhuis) [#46290](https://github.com/nodejs/node/pull/46290) +* \[[`14da89f41a`](https://github.com/nodejs/node/commit/14da89f41a)] - **src**: remove unreachable UNREACHABLE (Tobias Nießen) [#46281](https://github.com/nodejs/node/pull/46281) +* \[[`18c4dd004b`](https://github.com/nodejs/node/commit/18c4dd004b)] - **src**: replace custom ASCII validation with simdutf one (Anna Henningsen) [#46271](https://github.com/nodejs/node/pull/46271) +* \[[`cde375510f`](https://github.com/nodejs/node/commit/cde375510f)] - **src**: replace unreachable code with static\_assert (Tobias Nießen) [#46250](https://github.com/nodejs/node/pull/46250) +* \[[`f389b2f3fc`](https://github.com/nodejs/node/commit/f389b2f3fc)] - **src**: use explicit C++17 fallthrough (Tobias Nießen) [#46251](https://github.com/nodejs/node/pull/46251) +* \[[`8adaa1333c`](https://github.com/nodejs/node/commit/8adaa1333c)] - **src**: use CreateEnvironment instead of inlining its code where possible (Anna Henningsen) [#45886](https://github.com/nodejs/node/pull/45886) +* \[[`f09b838408`](https://github.com/nodejs/node/commit/f09b838408)] - **(SEMVER-MINOR)** **src,lib**: add constrainedMemory API for process (theanarkh) [#46218](https://github.com/nodejs/node/pull/46218) +* \[[`63e92eae63`](https://github.com/nodejs/node/commit/63e92eae63)] - **stream**: remove brandchecks from stream duplexify (Debadree Chatterjee) [#46315](https://github.com/nodejs/node/pull/46315) +* \[[`3acfe9bf92`](https://github.com/nodejs/node/commit/3acfe9bf92)] - **stream**: fix readable stream as async iterator function (Erick Wendel) [#46147](https://github.com/nodejs/node/pull/46147) +* \[[`de64315ccb`](https://github.com/nodejs/node/commit/de64315ccb)] - **test**: fix WPT title when no META title is present (Filip Skokan) [#46804](https://github.com/nodejs/node/pull/46804) +* \[[`162e3400ff`](https://github.com/nodejs/node/commit/162e3400ff)] - **test**: fix default WPT titles (Filip Skokan) [#46778](https://github.com/nodejs/node/pull/46778) +* \[[`5f422c4d70`](https://github.com/nodejs/node/commit/5f422c4d70)] - **test**: add WPTRunner support for variants and generating WPT reports (Filip Skokan) [#46498](https://github.com/nodejs/node/pull/46498) +* \[[`4f5aff2557`](https://github.com/nodejs/node/commit/4f5aff2557)] - **test**: fix tap parser fails if a test logs a number (Pulkit Gupta) [#46056](https://github.com/nodejs/node/pull/46056) +* \[[`32b020cf84`](https://github.com/nodejs/node/commit/32b020cf84)] - **test**: fix tap escaping with and without --test (Pulkit Gupta) [#46311](https://github.com/nodejs/node/pull/46311) +* \[[`f2bba1bcdb`](https://github.com/nodejs/node/commit/f2bba1bcdb)] - **test**: add trailing commas in `test/node-api` (Antoine du Hamel) [#46384](https://github.com/nodejs/node/pull/46384) +* \[[`f2ebe66fda`](https://github.com/nodejs/node/commit/f2ebe66fda)] - **test**: add trailing commas in `test/message` (Antoine du Hamel) [#46372](https://github.com/nodejs/node/pull/46372) +* \[[`ed564a9985`](https://github.com/nodejs/node/commit/ed564a9985)] - **test**: add trailing commas in `test/pseudo-tty` (Antoine du Hamel) [#46371](https://github.com/nodejs/node/pull/46371) +* \[[`e4437dd409`](https://github.com/nodejs/node/commit/e4437dd409)] - **test**: set common.bits to 64 for loong64 (Shi Pujin) [#45383](https://github.com/nodejs/node/pull/45383) +* \[[`9d40aef736`](https://github.com/nodejs/node/commit/9d40aef736)] - **test**: s390x zlib test case fixes (Adam Majer) [#46367](https://github.com/nodejs/node/pull/46367) +* \[[`ed3fb52716`](https://github.com/nodejs/node/commit/ed3fb52716)] - **test**: fix logInTimeout is not function (theanarkh) [#46348](https://github.com/nodejs/node/pull/46348) +* \[[`d05b0771be`](https://github.com/nodejs/node/commit/d05b0771be)] - **test**: avoid trying to call sysctl directly (Adam Majer) [#46366](https://github.com/nodejs/node/pull/46366) +* \[[`041aac3bbd`](https://github.com/nodejs/node/commit/041aac3bbd)] - **test**: avoid left behind child processes (Richard Lau) [#46276](https://github.com/nodejs/node/pull/46276) +* \[[`837ddcb322`](https://github.com/nodejs/node/commit/837ddcb322)] - **test**: add failing test for readline with carriage return (Alec Mev) [#46075](https://github.com/nodejs/node/pull/46075) +* \[[`75b8db41c6`](https://github.com/nodejs/node/commit/75b8db41c6)] - **test**: reduce `fs-write-optional-params` flakiness (LiviaMedeiros) [#46238](https://github.com/nodejs/node/pull/46238) +* \[[`c0d3fdaf63`](https://github.com/nodejs/node/commit/c0d3fdaf63)] - **test,crypto**: add CFRG curve vectors to wrap/unwrap tests (Filip Skokan) [#46406](https://github.com/nodejs/node/pull/46406) +* \[[`f328f7b15e`](https://github.com/nodejs/node/commit/f328f7b15e)] - **test,crypto**: update WebCryptoAPI WPT (Filip Skokan) [#46267](https://github.com/nodejs/node/pull/46267) +* \[[`1ef3c53e24`](https://github.com/nodejs/node/commit/1ef3c53e24)] - **test\_runner**: better handle async bootstrap errors (Colin Ihrig) [#46720](https://github.com/nodejs/node/pull/46720) +* \[[`0a690efb76`](https://github.com/nodejs/node/commit/0a690efb76)] - **test\_runner**: add `describe.only` and `it.only` shorthands (Richie McColl) [#46604](https://github.com/nodejs/node/pull/46604) +* \[[`28a1317efe`](https://github.com/nodejs/node/commit/28a1317efe)] - **test\_runner**: bootstrap reporters before running tests (Moshe Atlow) [#46737](https://github.com/nodejs/node/pull/46737) +* \[[`cd3aaa8fac`](https://github.com/nodejs/node/commit/cd3aaa8fac)] - **test\_runner**: emit test-only diagnostic warning (Richie McColl) [#46540](https://github.com/nodejs/node/pull/46540) +* \[[`c19fa45a65`](https://github.com/nodejs/node/commit/c19fa45a65)] - **test\_runner**: centralize CLI option handling (Colin Ihrig) [#46707](https://github.com/nodejs/node/pull/46707) +* \[[`0898145e37`](https://github.com/nodejs/node/commit/0898145e37)] - **test\_runner**: display skipped tests in spec reporter output (Richie McColl) [#46651](https://github.com/nodejs/node/pull/46651) +* \[[`894d7117fa`](https://github.com/nodejs/node/commit/894d7117fa)] - **test\_runner**: parse non-ascii character correctly (Mert Can Altın) [#45736](https://github.com/nodejs/node/pull/45736) +* \[[`5b3c606626`](https://github.com/nodejs/node/commit/5b3c606626)] - **test\_runner**: flatten TAP output when running using `--test` (Moshe Atlow) [#46440](https://github.com/nodejs/node/pull/46440) +* \[[`391ff0dba4`](https://github.com/nodejs/node/commit/391ff0dba4)] - **test\_runner**: allow nesting test within describe (Moshe Atlow) [#46544](https://github.com/nodejs/node/pull/46544) +* \[[`ba784e87b4`](https://github.com/nodejs/node/commit/ba784e87b4)] - **test\_runner**: fix missing test diagnostics (Moshe Atlow) [#46450](https://github.com/nodejs/node/pull/46450) +* \[[`c5f16fb5fb`](https://github.com/nodejs/node/commit/c5f16fb5fb)] - **test\_runner**: top-level diagnostics not ommited when running with --test (Pulkit Gupta) [#46441](https://github.com/nodejs/node/pull/46441) +* \[[`28a775b32f`](https://github.com/nodejs/node/commit/28a775b32f)] - **test\_runner**: add initial code coverage support (Colin Ihrig) [#46017](https://github.com/nodejs/node/pull/46017) +* \[[`0d999e373a`](https://github.com/nodejs/node/commit/0d999e373a)] - **test\_runner**: make built in reporters internal (Colin Ihrig) [#46092](https://github.com/nodejs/node/pull/46092) +* \[[`79f4b426fe`](https://github.com/nodejs/node/commit/79f4b426fe)] - **test\_runner**: report `file` in test runner events (Moshe Atlow) [#46030](https://github.com/nodejs/node/pull/46030) +* \[[`4d50db14b3`](https://github.com/nodejs/node/commit/4d50db14b3)] - **(SEMVER-MINOR)** **test\_runner**: add reporters (Moshe Atlow) [#45712](https://github.com/nodejs/node/pull/45712) +* \[[`5fdf374c74`](https://github.com/nodejs/node/commit/5fdf374c74)] - **test\_runner**: avoid swallowing of asynchronously thrown errors (MURAKAMI Masahiko) [#45264](https://github.com/nodejs/node/pull/45264) +* \[[`23b875806c`](https://github.com/nodejs/node/commit/23b875806c)] - **test\_runner**: update comment to comply with eslint no-fallthrough rule (Antoine du Hamel) [#46258](https://github.com/nodejs/node/pull/46258) +* \[[`00c5495aa3`](https://github.com/nodejs/node/commit/00c5495aa3)] - **tools**: update eslint to 8.33.0 (Node.js GitHub Bot) [#46400](https://github.com/nodejs/node/pull/46400) +* \[[`37a6ce1120`](https://github.com/nodejs/node/commit/37a6ce1120)] - **tools**: update doc to unist-util-select\@4.0.3 unist-util-visit\@4.1.2 (Node.js GitHub Bot) [#46364](https://github.com/nodejs/node/pull/46364) +* \[[`1eaafc7db4`](https://github.com/nodejs/node/commit/1eaafc7db4)] - **tools**: update lint-md-dependencies to rollup\@3.12.0 (Node.js GitHub Bot) [#46398](https://github.com/nodejs/node/pull/46398) +* \[[`a97774603b`](https://github.com/nodejs/node/commit/a97774603b)] - **tools**: require more trailing commas (Antoine du Hamel) [#46346](https://github.com/nodejs/node/pull/46346) +* \[[`03e244a59b`](https://github.com/nodejs/node/commit/03e244a59b)] - **tools**: update lint-md-dependencies (Node.js GitHub Bot) [#46302](https://github.com/nodejs/node/pull/46302) +* \[[`60d714e0c3`](https://github.com/nodejs/node/commit/60d714e0c3)] - **tools**: allow icutrim.py to run on python2 (Michael Dawson) [#46263](https://github.com/nodejs/node/pull/46263) +* \[[`b7950f50de`](https://github.com/nodejs/node/commit/b7950f50de)] - **tools**: update eslint to 8.32.0 (Node.js GitHub Bot) [#46258](https://github.com/nodejs/node/pull/46258) +* \[[`08bafc84f6`](https://github.com/nodejs/node/commit/08bafc84f6)] - **url**: refactor to use more primordials (Antoine du Hamel) [#45966](https://github.com/nodejs/node/pull/45966) +* \[[`02632b42cf`](https://github.com/nodejs/node/commit/02632b42cf)] - **(SEMVER-MINOR)** **v8**: support gc profile (theanarkh) [#46255](https://github.com/nodejs/node/pull/46255) +* \[[`110ead9abb`](https://github.com/nodejs/node/commit/110ead9abb)] - **(SEMVER-MINOR)** **vm**: expose cachedDataRejected for vm.compileFunction (Anna Henningsen) [#46320](https://github.com/nodejs/node/pull/46320) + +Windows 32-bit Installer: https://nodejs.org/dist/v18.15.0/node-v18.15.0-x86.msi
+Windows 64-bit Installer: https://nodejs.org/dist/v18.15.0/node-v18.15.0-x64.msi
+Windows 32-bit Binary: https://nodejs.org/dist/v18.15.0/win-x86/node.exe
+Windows 64-bit Binary: https://nodejs.org/dist/v18.15.0/win-x64/node.exe
+macOS 64-bit Installer: https://nodejs.org/dist/v18.15.0/node-v18.15.0.pkg
+macOS Apple Silicon 64-bit Binary: https://nodejs.org/dist/v18.15.0/node-v18.15.0-darwin-arm64.tar.gz
+macOS Intel 64-bit Binary: https://nodejs.org/dist/v18.15.0/node-v18.15.0-darwin-x64.tar.gz
+Linux 64-bit Binary: https://nodejs.org/dist/v18.15.0/node-v18.15.0-linux-x64.tar.xz
+Linux PPC LE 64-bit Binary: https://nodejs.org/dist/v18.15.0/node-v18.15.0-linux-ppc64le.tar.xz
+Linux s390x 64-bit Binary: https://nodejs.org/dist/v18.15.0/node-v18.15.0-linux-s390x.tar.xz
+AIX 64-bit Binary: https://nodejs.org/dist/v18.15.0/node-v18.15.0-aix-ppc64.tar.gz
+ARMv7 32-bit Binary: https://nodejs.org/dist/v18.15.0/node-v18.15.0-linux-armv7l.tar.xz
+ARMv8 64-bit Binary: https://nodejs.org/dist/v18.15.0/node-v18.15.0-linux-arm64.tar.xz
+Source Code: https://nodejs.org/dist/v18.15.0/node-v18.15.0.tar.gz
+Other release files: https://nodejs.org/dist/v18.15.0/
+Documentation: https://nodejs.org/docs/v18.15.0/api/ + +### SHASUMS + +``` +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA256 + +b5a7cf75c6d22536b8c364a4414bf6df88efea54429e185e2a0c819b90c491ed node-v18.15.0-aix-ppc64.tar.gz +bd302a689c3c34e2b61d86b97de66d26a335881a17af09b6a0a4bb1019df56e4 node-v18.15.0-darwin-arm64.tar.gz +5719959a463a265509d27ebc98cab0f6a09c3e1f6827859cc1d7c299ae56a8bc node-v18.15.0-darwin-arm64.tar.xz +76add174d2d3f98da08907412e82add7352b8cb6f639324d352a65c084b99c7e node-v18.15.0-darwin-x64.tar.gz +f257c015bc3a5ec5d8a552c87b3ac00f7763bead0061cd1f62125cce6285c0b6 node-v18.15.0-darwin-x64.tar.xz +5ada31143933f0443d20769ae5942c4b1c5c80fe9f8a8221dae12ed9bec2ad2d node-v18.15.0-headers.tar.gz +92c82571b32043a0ffc6e19cdd6d31503960b7062a90455bb9071a1a0ecd97b3 node-v18.15.0-headers.tar.xz +8ef7aa7a679360ddbf0c7c8511881030b3de9d1f54451d92ba5c8d59a91c7073 node-v18.15.0-linux-arm64.tar.gz +98ea6ed0a1ae55334ab2c03c34d5e52c6dc3dee8f236c0afc08ab1c964506633 node-v18.15.0-linux-arm64.tar.xz +ca2186313d3cbe5c67d0c08e931a6d290906f4f13c584e63fefa05a04dee9c58 node-v18.15.0-linux-armv7l.tar.gz +baad3cdf1365f46bf837635554b10bc3e320799e69ac26e07df1fcde0c1738c7 node-v18.15.0-linux-armv7l.tar.xz +da9ecfc33bc1162332a572f36a9cf2d71589eab6c7cf265d0a381ffc63148588 node-v18.15.0-linux-ppc64le.tar.gz +c9215ed3e9817dd42253b87a34997b8846570f7fdaaf3bf12fb4df6e731c12e2 node-v18.15.0-linux-ppc64le.tar.xz +d4c9d57db2f0b90c69af95e036014f86824b597642309811cd958f04866fb694 node-v18.15.0-linux-s390x.tar.gz +029216909814bc66caf64f3bb2dbdb961f10db0c6ec95f6039912248da15cfec node-v18.15.0-linux-s390x.tar.xz +b298a73a9fc07badfa9e4a2e86ed48824fc9201327cdc43e3f3f58b273c535e7 node-v18.15.0-linux-x64.tar.gz +c8c5fa53ce0c0f248e45983e86368e0b1daf84b77e88b310f769c3cfc12682ef node-v18.15.0-linux-x64.tar.xz +ec94f5f15539c4b7f61393494916f3877583957f439d43f69a3fb9df1480b588 node-v18.15.0.pkg +d65c4c3ef3c8815bccda9502081a29458c7c80797db0763f8752f270a824ac2b node-v18.15.0.tar.gz +8e44d65018ff973284195c23186469a0ea4082e97ec4200e5f5706d5584daa37 node-v18.15.0.tar.xz +cad3cc0910dc216e8b6dcfc3c5b3be0a619c2d4a4b29f2e674820b70e4f374dd node-v18.15.0-win-x64.7z +118fbcae58bc8c53cbe97a10c019734ed90685da8dda98aa0b0f4aeead42a647 node-v18.15.0-win-x64.zip +370dbe4ac8fa516a33540821d409153035c50a449ca12f74f78bcf0b634d1957 node-v18.15.0-win-x86.7z +948b54f929375803156deb1f2c691db42c298d0c69392a82d10cca1177e40545 node-v18.15.0-win-x86.zip +36de8d8fecd0920175ed6e61266934f3469888990f0cc54238e50437490515d5 node-v18.15.0-x64.msi +f7a2096bf8c34db99251e9cd9ce8ea4a7369be4e9f57daaa13b0f32c98de94b6 node-v18.15.0-x86.msi +17fd75d8a41bf9b4c475143e19ff2808afa7a92f7502ede731537d9da674d5e8 win-x64/node.exe +ef9630aefd29b4ed2fb31340d76a6936a69b869c6c9f18f4d0b5c26e866f738b win-x64/node.lib +acecef677661f5d93c3bbcef56cfd02c03cd684df70fbb5a01003bc364501e8d win-x64/node_pdb.7z +699d649ee46bddd532803f5e4d14a413d708a5b58840475f5fe7e5b40ccc1b0b win-x64/node_pdb.zip +d78b2f981465a40a23b964b2db32a390db1970a0dd5371682e121ae2b7422697 win-x86/node.exe +8c4ccf0f1e4fcecfb6956f4b8dcb226ca02ea574cd427a20c9186ea9eacccb87 win-x86/node.lib +fa430e027bf61c42f107b39c0b8cac23313671762ce11c5007729bb48c5abff4 win-x86/node_pdb.7z +f3400699d618d59a17f6622b4b386459dc9e8fab01a12d6413b939a360e990eb win-x86/node_pdb.zip +-----BEGIN PGP SIGNATURE----- + +iQEzBAEBCAAdFiEETtd49TnjY0x3nIfG1wYoSKGrAFwFAmQHmDUACgkQ1wYoSKGr +AFyX/wgAkPehwP+iH1nYUDVoQ+Xs1EcQbEG8WFGEshZnIiHIFqO1AmXo0t5/iUOK +yjzBBUD1YX05h8HPxX0bAtOd1Gj6F/IhQrG30SxN59IMyAa3/8trEbg20qGUbcGf +yoZ8oAe96w/xLcrESm4rvWIQzBNA2AbU8zRRhGSek8JRiKNdjj7APzVLJU4Qikv1 +y+nW03hBm3TDm0m0YeBOic793LXU/mCvk3x4WxEQbPFUh3qlj+ulYNPY2/vMzYPT +9KqRgI2PiEmNHS69/xGt1p3sxUQ43I0cjYC4fw8evbVXR1FVDTE/rd/NgZ4Fv6Tr +dPZ8t4Y7vIO+mYnhp2KNyDpBfIdWdQ== +=wfUF +-----END PGP SIGNATURE----- + +``` From ec1ebcc723cd97c8e96c375d7e616a76ecbc1751 Mon Sep 17 00:00:00 2001 From: Claudio Wunder Date: Wed, 8 Mar 2023 18:33:24 +0100 Subject: [PATCH 19/21] feat(infra): migrate to next.js infrastructure (#4991)Co-authored-by: Brian Muenzenmeyer Co-authored-by: Shanmughapriyan S Co-authored-by: Michael Esteban Co-authored-by: Shu Ding MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore(next.js): added initial package.json update and configuration files * chore(static): moved static files to public/static * chore(pages): moved locale directory to pages/ * chore(survey): added readme and updated deploy script for survey * chore(legacy): removed build.js and server.js * chore(typescript): updated theme.tsx and added typescript support * chore(folder-structure): continued moving files and clean up of things * chore(codeowners): updated codeowners * chore(eslint): updated markdown matching * chore(move): moved styles and layout and data folders * chore(i18n): added initial locale config * chore(lts): stick with v18 lts * chore(i18n): updated crowdin configuration * chore(lts): fixed lts naming on ci and nvm * chore(package.json): fixed lint commands * chore(package-lock): reindexed and updated package lock * chore(i18n): added react-intl package * chore(configs): updated next, eslint and tsconfig * chore(packages): add prettier config for the plugin * chore(configs): updated prettier, eslint adn package.json * chore(package): removed airbnb config * chore(lint): applied linting in core files * chore(lint): applied linting on markdown and style files * chore(ci): disable build job for now * chore(cache): added eslint cache files to ignore * chore(public): moved robots and security to root public folder * chore(eslint): added default next config * chore(remark): added remark configuration * chore(i18n): added ICU locale files boilerplates * chore(config): added website config file * chore(favicon): removed all favicon alternates to a simple png file * chore(dependencies): added a rss/atom/json feed package * chore(packages): updated packages and adopted npm-run-all * chore(layouts): removed blm specific layouts * feast(config): introduced site config provider and context * feat(header): started to create the header component * chore(provider): refactored provider * chore(fonts): added source sans pro font * feat(templates): added core component * chore(pages): removed legacy blm page * feat(types): introduced frontmatter types * chore(theme): started to update theme with layout * feat(config): updated site config types * feat(header): added all header meta tags * chore(document): added assets for theme switch * chore(eslint): fixed eslint failed rule * update nextra * chore(document): added remaining scripts * feat(footer): added footer * feat(header): updated header with favicon * feat(manifest): added manifest for PWA * feat(i18n): introduced i18n hook * chore(header): added i18n config * feat(layouts): added default layout * feat(layouts): initial version of the layout provider * refactor(provider): cleaned-up the site provider * feat(theme): adopted layout provider on theme * chore(layouts): removed unused layouts * feat(footer): added scroll-to-top * chore(i18n): added navigation and translations * chore(dependencies): added highlightjs and classnames * chore(utils): added link locale util * feat(i18n): introduced locale provider * feat(header): renamed header into htmlhead * feat(header): introduced page header * feat(components): introduced localised linkicomponent * feat(components): introduced language picker component * chore(footer): updated translation id * feat(app): updated app, document and theme with new locale and scripts * chore(layouts): added header to default layout * chore(layouts): removed old header layout * chore(docs): made the docs index mdx compatible * chore(types): added labels to frontmatter * chore(config): updated next config and remark plugins * chore(types): added types for node-version-data * feat(i18n): hook to support metadata about current route * feat(navigation): updated navigation metadata * feat(navigation): introduced a navigation hook * feat(node-versions): introduced provider and types for node-versions * feat(navigation): introduced side navigation component * feat(header): use the new navigation component * chore(app): introduced node data provider usage * feat(docs): introduced doc layout * chore(layouts): added docs to layout provider * chore(layouts/scripts): removed now unused layouts and scripts * chore(scripts): removed build scripts for node data * chore(utils): introduced new util * chore(data): removed non-needed data anymore * chore(navigation): include root entry on side nav * fix(footer): fixed spacing of items * fix(body): next element to also follow body rules * feat(layouts): introduced new layouts * chore(note): added todo notes on temporary components * feat(mdx): added proper node api versions component * chore(dependencies): removed non-needed dependencies * chore(docs): reverted mdx rename and use regular mdx provider for the component import * chore(remark): a lot of the lists are unordered and shouldn't need to be with * * chore(layouts): removed unused knowledge layouts * feat(banner): introduced banner component * feat(nextra): allow plain md syntax; include i18n file in ssg * feat(next): introduced lambdas for getting data * chore(eslint): added mjs to es6 context * feat(next): adopted new data fetching mechanism * feat(providers): updated providers with new data fetching * chore(types): simplified provider types * chore(i18n): added lts span * chore(next): improve next configuration * feat(header): allow subpath match for sidenav * chore(dependencies): added critters and sharp for css/image optimization * feat(caching): introduced caching of static async props * fix(header): home location sublink * chore(hooks): removed .tsx extension * chore(scripts): removed unused scripts * feat(utils): added util for changelog link * feat(providers): provide nextra context * chore(types): added numeric version * feat(hooks): nextra context hook * feat(components): download button component * feat(layouts): introduced index layout * feat(date): added format time util * chore(scripts): removed more unused scripts * disable flexsearch for now * chore(next): increase memory pool for build * feat(data): updated hooks and how data is provided * chore(components): moved a few components around * chore(404): added dev 404 page * chore(i18n): added navigation and i18n for downloads * feat(download): introduced download components * feat(pages): introduced download pages * feat(navigation): offer replacement of vars in link * chore(scripts): updated a few scripts * chore(scripts): removed other deprecated script * chore(handlebars): added handlebars * feat(release-post): contained release posts within the scripts folder * chore(external): no need to have a package.json there anymore * chore(release-post): minor typo fix * chore(dependencies): added sw dependency * chore(sw): enable sw feature * chore(types): updated node data types * feat(components): introduced download table component * chore(layouts): introduced previous releases layout * chore(scripts): added jquery as script * refactor(components): use Link component * chore(downloads): use dompurify for the frontmatter modules * fix(links): fix api docs links * fix(locale): fixed determination of route match * chore(deps): updated dependencies * chore(helpers): introduced helper for getting a header link * feat(heading): introduced anchored heading component * chore(theme): adopted anchored component * chore(anchor): id is always provided * chore(dependencies): updated package json * chore(mdx): transformed into mdx pages that need to be in mdx * chore(dependencies): updated dependencies * chore(mdx): default config * fix: upgrade nextra and refactor getNextData * feat(layouts): introduced blog post layout * fix(release-post): end paragraph markings * chore(layouts): sanitize to be memoized * fix: only pass necessary node versions in page props * chore(guides): removed non-translated guides * fix(markdown): fix buffer guide markdown * feat(mdx): blockquote as highlightbox * fix(linting): fixed prettier rules for mdx * fix: /404 route and optimize page size * fix: optimize next build * chore(canonical): add canonical * refactor(data): simplified data gathering * chore(dependencies): introducesd sitemap and swr * chore(ts): allow downlevel iteration * fix(build): unoptimized images * feat(downloads): only latest major of each version * chore(js): removed unused code * chore(404): prettified 404 file * chore(footer): fixed # not valid * chore(i18n): add 404 page messages * chore(404): use tsx instead of mdx * chore(react-intl): no errors * chore(i18n): fallback data * chore(ci): added build on ci again * chore(sitemap): added sitemap data * chore(eslint): prefer nodejs config * chore(fix): linting * chore(scripts): remove server 404 and fix main.js for 404 * chore(build): is memory efficient now * fix(i18n): always using english locale * chore(next): updated config options * feat(data): improved data rendering/reusability * chore(next): remove non-necessary packages * chore(scripts): refactored release-post to mjs * chore(scripts): simplify and document code * chore(next): refactored data scripts * refactor(header): i18n, svg and fix styles * chore(next): minor refactor of helper * feat(node-data): only on selected routes * fix(ts): fixed typescript types * refactor(providers): simplified the _app * chore(dependencies): added gray-matter * feat(helpers): introduced script helpers * chore(types): updated types * refactor(next): refactored data components * chore(sitemap): removed non-existent env * chore(optimize): removed css optimization * feat(dat): introduced blog data helper * fix(blogdata): fixed slug * feat(types): shared props and context * feat(utils): added time component * chore(gitignore): year pages * chore(types): refactored types * chore(data): improved blog data and create year pages * feat(blog): introduced blog index page * feat(layouts): implemented blog category layout * feat(i18n): migrate translations 🎉 (#1) * feat: migrate `ar` * feat: migrate `ca` * feat: migrate `de` * feat: migrate `es` * feat: migrate `fa` * feat: migrate `fr` * feat: migrate `gl` * feat: migrate `it` * feat: migrate `ja` * feat: migrate `ka` * feat: migrate `ko` * feat: migrate `nl` * feat: migrate `pt-br` * feat: migrate `ro` * feat: migrate `ru` * feat: migrate `tr` * feat: migrate `uk` * feat: migrate `zh-cn` * feat: migrate `zh-tw` * chore: update next and previous strings * chore: remove `en` site.json * fix(document): numerours document style fixes and javascript fixes * chore(eslint): global window * chore(external): moved external folders * feat(rss): introduced rss generation * chore(tests): removed unused tests * chore(readme): updated readme * chore(lint): ignore and fix linting * refactor(scripts): refactored the legacy scripts * chore(ci): set memory to 4gb on ci * chore(workers): no need tofr morkers * chore(ci): updated a doc and ci file * chore(refactor): minor refactors, text changes and bug fixes * Update COLLABORATOR_GUIDE.md Co-authored-by: Brian Muenzenmeyer Signed-off-by: Claudio Wunder * Apply suggestions from code review Co-authored-by: Shanmughapriyan S Signed-off-by: Claudio Wunder * fix: upgrade nextra to remove the __esModule hack * chore: disable outputFileTracing * chore(ci): use build cache * chore(js): fix theme switcher issues * fix(build): improved data transmission from static props * chore(fixes): minor style and config changes * fix(scrollto): minor scroll to fix * Update next.config.mjs Co-authored-by: Michael Esteban Signed-off-by: Claudio Wunder * chore(ci): attempt to optimize caching * chore(ci): fine-tune to be based on eslint hashing * chore(cache): only cache .next/cache * chore(mastodon): added mastodon verification * chore(next): updated packages and optimised build performance * chore(dependencies): updated dependencies * fix(lint): fixed linting * chore(dependencies): removed temp dep * chore(package): reduce memory --------- Signed-off-by: Claudio Wunder Co-authored-by: Shu Ding Co-authored-by: Shanmughapriyan S Co-authored-by: Brian Muenzenmeyer Co-authored-by: Michael Esteban --- .editorconfig | 8 +- .eslintignore | 21 +- .eslintrc | 95 +- .github/ISSUE_TEMPLATE/01-bug-report.yml | 19 +- .github/ISSUE_TEMPLATE/02-feature-request.yml | 2 +- .github/ISSUE_TEMPLATE/03-i18n.yml | 2 +- .github/dependabot.yml | 4 +- .github/workflows/ci.yml | 61 +- .github/workflows/codeql.yml | 6 +- .gitignore | 14 +- .mailmap | 1 - .nvmrc | 1 + .prettierignore | 17 + .prettierrc | 12 + .prettierrc.json | 13 - .remarkignore | 4 - .remarkrc | 42 +- .stylelintignore | 4 +- .stylelintrc | 17 +- CODEOWNERS | 35 +- COLLABORATOR_GUIDE.md | 80 +- CONTRIBUTING.md | 4 +- README.md | 61 +- TRANSLATION.md | 70 +- build.js | 350 - components/AnchoredHeading.tsx | 29 + components/Docs/NodeApiVersionLinks.tsx | 64 + components/Downloads/DownloadList.tsx | 37 + .../Downloads/DownloadReleasesTable.tsx | 55 + .../Downloads/PrimaryDownloadMatrix.tsx | 222 + .../Downloads/SecondaryDownloadMatrix.tsx | 71 + components/Footer.tsx | 72 + components/Header.tsx | 89 + components/Home/Banner.tsx | 39 + components/Home/HomeDownloadButton.tsx | 57 + components/HtmlHead.tsx | 60 + components/LocalisedLink.tsx | 30 + components/Pagination.tsx | 23 + components/SideNavigation.tsx | 36 + crowdin.yml | 13 +- external/survey-2018/package-lock.json | 30 - external/survey-2018/package.json | 10 - global.d.ts | 12 + hooks/useLocale.ts | 28 + hooks/useNavigation.tsx | 45 + hooks/useNextraContext.ts | 8 + hooks/useNodeData.ts | 17 + hooks/useSiteConfig.ts | 8 + i18n/config.json | 173 + i18n/locales/ar.json | 39 + i18n/locales/ca.json | 40 + i18n/locales/de.json | 39 + i18n/locales/en.json | 39 + i18n/locales/es.json | 39 + i18n/locales/fa.json | 39 + i18n/locales/fr.json | 39 + i18n/locales/gl.json | 39 + i18n/locales/it.json | 39 + i18n/locales/ja.json | 39 + i18n/locales/ka.json | 39 + i18n/locales/ko.json | 39 + i18n/locales/nl.json | 39 + i18n/locales/pt-br.json | 39 + i18n/locales/ro.json | 39 + i18n/locales/ru.json | 39 + i18n/locales/tr.json | 40 + i18n/locales/uk.json | 39 + i18n/locales/zh-cn.json | 39 + i18n/locales/zh-tw.json | 39 + jsconfig.json | 9 + layouts/AboutLayout.tsx | 15 + layouts/BaseLayout.tsx | 14 + layouts/BlogIndexLayout.tsx | 44 + layouts/BlogPostLayout.tsx | 38 + layouts/CategoryIndexLayout.tsx | 31 + layouts/ContributeLayout.tsx | 15 + layouts/DefaultLayout.tsx | 11 + layouts/DocsLayout.tsx | 32 + layouts/DownloadCurrentLayout.tsx | 35 + layouts/DownloadLayout.tsx | 35 + layouts/DownloadReleasesLayout.tsx | 78 + layouts/IndexLayout.tsx | 45 + layouts/about-release-schedule.hbs | 33 - layouts/about.hbs | 22 - layouts/black-lives-matter.hbs | 11 - layouts/blog-index.hbs | 41 - layouts/blog-post.hbs | 25 - layouts/category-index.hbs | 34 - layouts/contribute.hbs | 22 - .../css/page-modules/_release-schedule.scss | 28 - layouts/docs.hbs | 24 - layouts/download-current.hbs | 25 - layouts/download-releases.hbs | 69 - layouts/download.hbs | 25 - layouts/index.hbs | 88 - layouts/knowledge-base-index.hbs | 30 - layouts/knowledge-post.hbs | 25 - layouts/page.hbs | 16 - layouts/partials/blm-footer.hbs | 7 - layouts/partials/blm-header.hbs | 5 - layouts/partials/blm-html-head.hbs | 40 - layouts/partials/blm-styles.hbs | 130 - layouts/partials/download-list.hbs | 13 - layouts/partials/favicons.hbs | 7 - layouts/partials/footer.hbs | 29 - layouts/partials/header.hbs | 49 - layouts/partials/html-head.hbs | 39 - layouts/partials/navigation.hbs | 21 - layouts/partials/prev-next-navigation.hbs | 11 - layouts/partials/primary-download-matrix.hbs | 86 - .../partials/secondary-download-matrix.hbs | 26 - locale/ar/site.json | 142 - locale/ca/site.json | 121 - locale/de/site.json | 112 - locale/en/black-lives-matter.md | 196 - locale/en/site.json | 145 - locale/es/docs/guides/abi-stability.md | 35 - .../guides/anatomy-of-an-http-transaction.md | 316 - .../docs/guides/backpressuring-in-streams.md | 449 - .../docs/guides/blocking-vs-non-blocking.md | 102 - .../guides/buffer-constructor-deprecation.md | 216 - .../docs/guides/debugging-getting-started.md | 189 - .../es/docs/guides/diagnostics-flamegraph.md | 121 - locale/es/docs/guides/domain-postmortem.md | 365 - .../docs/guides/dont-block-the-event-loop.md | 385 - .../guides/event-loop-timers-and-nexttick.md | 339 - .../es/docs/guides/getting-started-guide.md | 29 - locale/es/docs/guides/index.md | 38 - locale/es/docs/guides/nodejs-docker-webapp.md | 238 - .../es/docs/guides/publishing-napi-modules.md | 37 - locale/es/docs/guides/security/index.md | 334 - locale/es/docs/guides/simple-profiling.md | 217 - locale/es/docs/guides/timers-in-node.md | 125 - .../working-with-different-filesystems.md | 90 - locale/es/site.json | 123 - locale/fa/download/releases.md | 27 - locale/fa/site.json | 122 - locale/fr/docs/es6.md | 40 - .../guides/anatomy-of-an-http-transaction.md | 316 - .../docs/guides/backpressuring-in-streams.md | 449 - .../docs/guides/blocking-vs-non-blocking.md | 102 - .../guides/buffer-constructor-deprecation.md | 216 - .../docs/guides/debugging-getting-started.md | 189 - .../fr/docs/guides/diagnostics-flamegraph.md | 121 - locale/fr/docs/guides/domain-postmortem.md | 365 - .../fr/docs/guides/getting-started-guide.md | 29 - locale/fr/docs/guides/index.md | 32 - locale/fr/docs/guides/nodejs-docker-webapp.md | 238 - .../fr/docs/guides/publishing-napi-modules.md | 37 - locale/fr/docs/guides/simple-profiling.md | 217 - locale/fr/docs/guides/timers-in-node.md | 125 - .../working-with-different-filesystems.md | 90 - locale/fr/docs/meta/topics/dependencies.md | 78 - locale/fr/site.json | 122 - locale/gl/site.json | 111 - locale/it/site.json | 107 - locale/ja/docs/index.md | 47 - locale/ja/site.json | 117 - locale/ka/site.json | 132 - locale/ko/docs/index.md | 71 - locale/ko/site.json | 122 - locale/nl/site.json | 145 - locale/pt-br/site.json | 121 - locale/ro/docs/es6.md | 40 - locale/ro/docs/guides/abi-stability.md | 35 - .../guides/anatomy-of-an-http-transaction.md | 316 - .../docs/guides/backpressuring-in-streams.md | 449 - .../docs/guides/blocking-vs-non-blocking.md | 102 - .../guides/buffer-constructor-deprecation.md | 216 - .../docs/guides/debugging-getting-started.md | 189 - .../ro/docs/guides/diagnostics-flamegraph.md | 121 - locale/ro/docs/guides/domain-postmortem.md | 365 - .../docs/guides/dont-block-the-event-loop.md | 385 - .../guides/event-loop-timers-and-nexttick.md | 339 - .../ro/docs/guides/getting-started-guide.md | 29 - locale/ro/docs/guides/index.md | 32 - locale/ro/docs/guides/nodejs-docker-webapp.md | 238 - .../ro/docs/guides/publishing-napi-modules.md | 37 - locale/ro/docs/guides/simple-profiling.md | 217 - locale/ro/docs/guides/timers-in-node.md | 125 - .../working-with-different-filesystems.md | 90 - locale/ro/docs/meta/topics/dependencies.md | 78 - locale/ro/site.json | 122 - locale/ru/site.json | 122 - locale/tr/site.json | 122 - locale/uk/site.json | 121 - locale/zh-cn/site.json | 137 - locale/zh-tw/site.json | 121 - navigation.json | 118 + next-env.d.ts | 5 + next-sitemap.config.js | 16 + next.config.mjs | 29 + next.data.mjs | 35 + package-lock.json | 18016 ++++++---------- package.json | 124 +- pages/_app.mdx | 26 + pages/_document.tsx | 21 + {locale => pages}/ar/404.md | 0 {locale => pages}/ar/about/governance.md | 0 {locale => pages}/ar/about/index.md | 0 {locale => pages}/ar/docs/es6.md | 0 .../ar/docs/guides/abi-stability.md | 0 .../guides/anatomy-of-an-http-transaction.md | 0 .../docs/guides/debugging-getting-started.md | 0 .../ar/docs/guides/getting-started-guide.md | 0 {locale => pages}/ar/docs/guides/index.md | 0 .../ar/docs/guides/publishing-napi-modules.md | 0 .../docs/index.md => pages/ar/docs/index.mdx | 12 +- .../ar/docs/meta/topics/dependencies.md | 0 {locale => pages}/ar/download/current.md | 0 {locale => pages}/ar/download/index.md | 0 .../ar/download/package-manager.md | 0 {locale => pages}/ar/download/releases.md | 0 .../ar/get-involved/collab-summit.md | 0 .../ar/get-involved/contribute.md | 0 {locale => pages}/ar/get-involved/index.md | 0 {locale => pages}/ar/index.md | 0 {locale => pages}/ca/404.md | 0 {locale => pages}/ca/about/index.md | 0 .../docs/index.md => pages/ca/docs/index.mdx | 12 +- {locale => pages}/ca/download/current.md | 0 {locale => pages}/ca/download/index.md | 0 {locale => pages}/ca/get-involved/index.md | 0 {locale => pages}/ca/index.md | 0 {locale => pages}/de/404.md | 0 {locale => pages}/de/about/index.md | 0 .../docs/index.md => pages/de/docs/index.mdx | 12 +- {locale => pages}/de/download/current.md | 0 {locale => pages}/de/download/index.md | 0 {locale => pages}/de/index.md | 0 {locale => pages}/en/404.md | 0 {locale => pages}/en/about/governance.md | 0 {locale => pages}/en/about/index.md | 0 .../advisory-board/advisory-board-update.md | 0 .../en/blog/advisory-board/index.md | 0 .../listening-to-the-community.md | 0 .../adjusted-release-schedule-covid.md | 0 .../apigee-rising-stack-yahoo.md | 0 .../appdynamics-newrelic-opbeat-sphinx.md | 0 .../en/blog/announcements/cars-dynatrace.md | 0 .../foundation-advances-growth.md | 0 .../announcements/foundation-elects-board.md | 0 .../announcements/foundation-express-news.md | 0 .../announcements/foundation-v4-announce.md | 0 .../en/blog/announcements/index.md | 0 .../interactive-2015-keynotes.md | 0 .../interactive-2015-programming.md | 0 .../en/blog/announcements/interactive-2015.md | 0 .../announcements/interactive-2016-ams.md | 0 ...interactive-2016-north-america-schedule.md | 0 .../nodejs-certified-developer-program.md | 0 .../nodejs-foundation-momentum-release.md | 0 .../announcements/nodejs-foundation-survey.md | 0 .../announcements/nodejs-security-project.md | 0 ...emarks-transferred-to-openjs-foundation.md | 0 .../en/blog/announcements/nodejs16-eol.md | 0 ...etiring-the-node-js-community-committee.md | 0 .../announcements/v18-release-announce.md | 0 .../announcements/v19-release-announce.md | 0 .../en/blog/announcements/v6-release.md | 0 .../en/blog/announcements/welcome-google.md | 0 .../en/blog/announcements/welcome-redhat.md | 0 .../en/blog/community/2017-election.md | 0 .../community/building-nodejs-together.md | 0 .../blog/community/foundation-benefits-all.md | 0 {locale => pages}/en/blog/community/index.md | 0 .../blog/community/individual-membership.md | 0 .../en/blog/community/next-chapter.md | 0 ...eaders-building-open-neutral-foundation.md | 0 .../en/blog/community/node-v5.md | 0 .../en/blog/community/quality-with-speed.md | 0 .../en/blog/community/transitions.md | 0 .../en/blog/community/update-v8-5.4.md | 0 .../en/blog/community/v5-to-v7.md | 0 {locale => pages}/en/blog/feature/index.md | 0 {locale => pages}/en/blog/feature/streams2.md | 0 {locale => pages}/en/blog/index.md | 0 {locale => pages}/en/blog/module/index.md | 0 ...server-continuous-deployment-with-fleet.md | 0 .../service-logging-in-json-with-bunyan.md | 0 .../en/blog/nodejs-road-ahead.md | 0 .../en/blog/npm/2013-outage-postmortem.md | 0 {locale => pages}/en/blog/npm/index.md | 0 ...ng-node-js-dependencies-with-shrinkwrap.md | 0 .../npm-1-0-global-vs-local-installation.md | 0 {locale => pages}/en/blog/npm/npm-1-0-link.md | 0 .../en/blog/npm/npm-1-0-released.md | 0 .../en/blog/npm/npm-1-0-the-new-ls.md | 0 .../en/blog/npm/peer-dependencies.mdx | 27 +- {locale => pages}/en/blog/release/index.md | 0 {locale => pages}/en/blog/release/v0.10.0.md | 0 {locale => pages}/en/blog/release/v0.10.1.md | 0 {locale => pages}/en/blog/release/v0.10.10.md | 0 {locale => pages}/en/blog/release/v0.10.11.md | 0 {locale => pages}/en/blog/release/v0.10.12.md | 0 {locale => pages}/en/blog/release/v0.10.13.md | 0 {locale => pages}/en/blog/release/v0.10.14.md | 0 {locale => pages}/en/blog/release/v0.10.15.md | 0 {locale => pages}/en/blog/release/v0.10.16.md | 0 {locale => pages}/en/blog/release/v0.10.17.md | 0 {locale => pages}/en/blog/release/v0.10.18.md | 0 {locale => pages}/en/blog/release/v0.10.19.md | 0 {locale => pages}/en/blog/release/v0.10.2.md | 0 {locale => pages}/en/blog/release/v0.10.20.md | 0 {locale => pages}/en/blog/release/v0.10.21.md | 0 {locale => pages}/en/blog/release/v0.10.22.md | 0 {locale => pages}/en/blog/release/v0.10.23.md | 0 {locale => pages}/en/blog/release/v0.10.24.md | 0 {locale => pages}/en/blog/release/v0.10.25.md | 0 {locale => pages}/en/blog/release/v0.10.26.md | 0 {locale => pages}/en/blog/release/v0.10.27.md | 0 {locale => pages}/en/blog/release/v0.10.28.md | 0 {locale => pages}/en/blog/release/v0.10.29.md | 0 {locale => pages}/en/blog/release/v0.10.3.md | 0 {locale => pages}/en/blog/release/v0.10.30.md | 0 {locale => pages}/en/blog/release/v0.10.31.md | 0 {locale => pages}/en/blog/release/v0.10.32.md | 0 {locale => pages}/en/blog/release/v0.10.33.md | 0 {locale => pages}/en/blog/release/v0.10.34.md | 0 {locale => pages}/en/blog/release/v0.10.35.md | 0 {locale => pages}/en/blog/release/v0.10.36.md | 0 {locale => pages}/en/blog/release/v0.10.37.md | 0 {locale => pages}/en/blog/release/v0.10.38.md | 0 {locale => pages}/en/blog/release/v0.10.39.md | 0 {locale => pages}/en/blog/release/v0.10.4.md | 0 {locale => pages}/en/blog/release/v0.10.40.md | 0 {locale => pages}/en/blog/release/v0.10.41.md | 0 {locale => pages}/en/blog/release/v0.10.42.md | 0 {locale => pages}/en/blog/release/v0.10.43.md | 0 {locale => pages}/en/blog/release/v0.10.44.md | 0 {locale => pages}/en/blog/release/v0.10.45.md | 0 {locale => pages}/en/blog/release/v0.10.46.md | 0 {locale => pages}/en/blog/release/v0.10.47.md | 0 {locale => pages}/en/blog/release/v0.10.48.md | 0 {locale => pages}/en/blog/release/v0.10.5.md | 0 {locale => pages}/en/blog/release/v0.10.6.md | 0 {locale => pages}/en/blog/release/v0.10.7.md | 0 {locale => pages}/en/blog/release/v0.10.8.md | 0 {locale => pages}/en/blog/release/v0.10.9.md | 0 {locale => pages}/en/blog/release/v0.11.0.md | 0 {locale => pages}/en/blog/release/v0.11.1.md | 0 {locale => pages}/en/blog/release/v0.11.10.md | 0 {locale => pages}/en/blog/release/v0.11.11.md | 0 {locale => pages}/en/blog/release/v0.11.12.md | 0 {locale => pages}/en/blog/release/v0.11.14.md | 0 {locale => pages}/en/blog/release/v0.11.15.md | 0 {locale => pages}/en/blog/release/v0.11.16.md | 0 {locale => pages}/en/blog/release/v0.11.2.md | 0 {locale => pages}/en/blog/release/v0.11.3.md | 0 {locale => pages}/en/blog/release/v0.11.4.md | 0 {locale => pages}/en/blog/release/v0.11.5.md | 0 {locale => pages}/en/blog/release/v0.11.6.md | 0 {locale => pages}/en/blog/release/v0.11.7.md | 0 {locale => pages}/en/blog/release/v0.11.8.md | 0 {locale => pages}/en/blog/release/v0.11.9.md | 0 {locale => pages}/en/blog/release/v0.12.0.md | 0 {locale => pages}/en/blog/release/v0.12.1.md | 0 {locale => pages}/en/blog/release/v0.12.10.md | 0 {locale => pages}/en/blog/release/v0.12.11.md | 0 {locale => pages}/en/blog/release/v0.12.12.md | 0 {locale => pages}/en/blog/release/v0.12.13.md | 0 {locale => pages}/en/blog/release/v0.12.14.md | 0 {locale => pages}/en/blog/release/v0.12.15.md | 0 {locale => pages}/en/blog/release/v0.12.16.md | 0 {locale => pages}/en/blog/release/v0.12.17.md | 0 {locale => pages}/en/blog/release/v0.12.18.md | 0 {locale => pages}/en/blog/release/v0.12.2.md | 0 {locale => pages}/en/blog/release/v0.12.3.md | 0 {locale => pages}/en/blog/release/v0.12.4.md | 0 {locale => pages}/en/blog/release/v0.12.5.md | 0 {locale => pages}/en/blog/release/v0.12.6.md | 0 {locale => pages}/en/blog/release/v0.12.7.md | 0 {locale => pages}/en/blog/release/v0.12.8.md | 0 {locale => pages}/en/blog/release/v0.12.9.md | 0 {locale => pages}/en/blog/release/v0.4.10.md | 0 {locale => pages}/en/blog/release/v0.4.11.md | 0 {locale => pages}/en/blog/release/v0.4.12.md | 0 {locale => pages}/en/blog/release/v0.4.3.md | 0 {locale => pages}/en/blog/release/v0.4.4.md | 0 {locale => pages}/en/blog/release/v0.4.5.md | 0 {locale => pages}/en/blog/release/v0.4.6.md | 0 {locale => pages}/en/blog/release/v0.4.7.md | 0 {locale => pages}/en/blog/release/v0.4.8.md | 0 {locale => pages}/en/blog/release/v0.4.9.md | 0 {locale => pages}/en/blog/release/v0.5.0.md | 0 {locale => pages}/en/blog/release/v0.5.1.md | 0 {locale => pages}/en/blog/release/v0.5.10.md | 0 {locale => pages}/en/blog/release/v0.5.2.md | 0 {locale => pages}/en/blog/release/v0.5.3.md | 0 {locale => pages}/en/blog/release/v0.5.4.md | 0 {locale => pages}/en/blog/release/v0.5.5.md | 0 {locale => pages}/en/blog/release/v0.5.6.md | 0 {locale => pages}/en/blog/release/v0.5.7.md | 0 {locale => pages}/en/blog/release/v0.5.8.md | 0 {locale => pages}/en/blog/release/v0.5.9.md | 0 {locale => pages}/en/blog/release/v0.6.0.md | 0 {locale => pages}/en/blog/release/v0.6.1.md | 0 {locale => pages}/en/blog/release/v0.6.10.md | 0 {locale => pages}/en/blog/release/v0.6.11.md | 0 {locale => pages}/en/blog/release/v0.6.12.md | 0 {locale => pages}/en/blog/release/v0.6.13.md | 0 {locale => pages}/en/blog/release/v0.6.14.md | 0 {locale => pages}/en/blog/release/v0.6.15.md | 0 {locale => pages}/en/blog/release/v0.6.16.md | 0 {locale => pages}/en/blog/release/v0.6.17.md | 0 {locale => pages}/en/blog/release/v0.6.18.md | 0 {locale => pages}/en/blog/release/v0.6.19.md | 0 {locale => pages}/en/blog/release/v0.6.2.md | 0 {locale => pages}/en/blog/release/v0.6.20.md | 0 {locale => pages}/en/blog/release/v0.6.21.md | 0 {locale => pages}/en/blog/release/v0.6.3.md | 0 {locale => pages}/en/blog/release/v0.6.4.md | 0 {locale => pages}/en/blog/release/v0.6.5.md | 0 {locale => pages}/en/blog/release/v0.6.6.md | 0 {locale => pages}/en/blog/release/v0.6.7.md | 0 {locale => pages}/en/blog/release/v0.6.8.md | 0 {locale => pages}/en/blog/release/v0.6.9.md | 0 {locale => pages}/en/blog/release/v0.7.0.md | 0 {locale => pages}/en/blog/release/v0.7.1.md | 0 {locale => pages}/en/blog/release/v0.7.10.md | 0 {locale => pages}/en/blog/release/v0.7.11.md | 0 {locale => pages}/en/blog/release/v0.7.12.md | 0 {locale => pages}/en/blog/release/v0.7.2.md | 0 {locale => pages}/en/blog/release/v0.7.3.md | 0 {locale => pages}/en/blog/release/v0.7.4.md | 0 {locale => pages}/en/blog/release/v0.7.5.md | 0 {locale => pages}/en/blog/release/v0.7.6.md | 0 {locale => pages}/en/blog/release/v0.7.7.md | 0 {locale => pages}/en/blog/release/v0.7.8.md | 0 {locale => pages}/en/blog/release/v0.7.9.md | 0 {locale => pages}/en/blog/release/v0.8.0.md | 0 {locale => pages}/en/blog/release/v0.8.1.md | 0 {locale => pages}/en/blog/release/v0.8.10.md | 0 {locale => pages}/en/blog/release/v0.8.11.md | 0 {locale => pages}/en/blog/release/v0.8.12.md | 0 {locale => pages}/en/blog/release/v0.8.13.md | 0 {locale => pages}/en/blog/release/v0.8.14.md | 0 {locale => pages}/en/blog/release/v0.8.15.md | 0 {locale => pages}/en/blog/release/v0.8.16.md | 0 {locale => pages}/en/blog/release/v0.8.17.md | 0 {locale => pages}/en/blog/release/v0.8.18.md | 0 {locale => pages}/en/blog/release/v0.8.19.md | 0 {locale => pages}/en/blog/release/v0.8.2.md | 0 {locale => pages}/en/blog/release/v0.8.20.md | 0 {locale => pages}/en/blog/release/v0.8.21.md | 0 {locale => pages}/en/blog/release/v0.8.22.md | 0 {locale => pages}/en/blog/release/v0.8.23.md | 0 {locale => pages}/en/blog/release/v0.8.24.md | 0 {locale => pages}/en/blog/release/v0.8.25.md | 0 {locale => pages}/en/blog/release/v0.8.26.md | 0 {locale => pages}/en/blog/release/v0.8.27.md | 0 {locale => pages}/en/blog/release/v0.8.28.md | 0 {locale => pages}/en/blog/release/v0.8.3.md | 0 {locale => pages}/en/blog/release/v0.8.4.md | 0 {locale => pages}/en/blog/release/v0.8.5.md | 0 {locale => pages}/en/blog/release/v0.8.6.md | 0 {locale => pages}/en/blog/release/v0.8.7.md | 0 {locale => pages}/en/blog/release/v0.8.8.md | 0 {locale => pages}/en/blog/release/v0.8.9.md | 0 {locale => pages}/en/blog/release/v0.9.0.md | 0 {locale => pages}/en/blog/release/v0.9.1.md | 0 {locale => pages}/en/blog/release/v0.9.10.md | 0 {locale => pages}/en/blog/release/v0.9.11.md | 0 {locale => pages}/en/blog/release/v0.9.12.md | 0 {locale => pages}/en/blog/release/v0.9.2.md | 0 {locale => pages}/en/blog/release/v0.9.3.md | 0 {locale => pages}/en/blog/release/v0.9.4.md | 0 {locale => pages}/en/blog/release/v0.9.5.md | 0 {locale => pages}/en/blog/release/v0.9.6.md | 0 {locale => pages}/en/blog/release/v0.9.7.md | 0 {locale => pages}/en/blog/release/v0.9.8.md | 0 {locale => pages}/en/blog/release/v10.0.0.md | 0 {locale => pages}/en/blog/release/v10.1.0.md | 0 {locale => pages}/en/blog/release/v10.10.0.md | 0 {locale => pages}/en/blog/release/v10.11.0.md | 0 {locale => pages}/en/blog/release/v10.12.0.md | 0 {locale => pages}/en/blog/release/v10.13.0.md | 0 {locale => pages}/en/blog/release/v10.14.0.md | 0 {locale => pages}/en/blog/release/v10.14.1.md | 0 {locale => pages}/en/blog/release/v10.14.2.md | 0 {locale => pages}/en/blog/release/v10.15.0.md | 0 {locale => pages}/en/blog/release/v10.15.1.md | 0 {locale => pages}/en/blog/release/v10.15.2.md | 0 {locale => pages}/en/blog/release/v10.15.3.md | 0 {locale => pages}/en/blog/release/v10.16.0.md | 0 {locale => pages}/en/blog/release/v10.16.1.md | 0 {locale => pages}/en/blog/release/v10.16.2.md | 0 {locale => pages}/en/blog/release/v10.16.3.md | 0 {locale => pages}/en/blog/release/v10.17.0.md | 0 {locale => pages}/en/blog/release/v10.18.0.md | 0 {locale => pages}/en/blog/release/v10.18.1.md | 0 {locale => pages}/en/blog/release/v10.19.0.md | 0 {locale => pages}/en/blog/release/v10.2.0.md | 0 {locale => pages}/en/blog/release/v10.2.1.md | 0 {locale => pages}/en/blog/release/v10.20.0.md | 0 {locale => pages}/en/blog/release/v10.20.1.md | 0 {locale => pages}/en/blog/release/v10.21.0.md | 0 {locale => pages}/en/blog/release/v10.22.0.md | 0 {locale => pages}/en/blog/release/v10.22.1.md | 0 {locale => pages}/en/blog/release/v10.23.0.md | 0 {locale => pages}/en/blog/release/v10.23.1.md | 0 {locale => pages}/en/blog/release/v10.23.2.md | 0 {locale => pages}/en/blog/release/v10.23.3.md | 0 {locale => pages}/en/blog/release/v10.24.0.md | 0 {locale => pages}/en/blog/release/v10.24.1.md | 0 {locale => pages}/en/blog/release/v10.3.0.md | 0 {locale => pages}/en/blog/release/v10.4.0.md | 0 {locale => pages}/en/blog/release/v10.4.1.md | 0 {locale => pages}/en/blog/release/v10.5.0.md | 0 {locale => pages}/en/blog/release/v10.6.0.md | 0 {locale => pages}/en/blog/release/v10.7.0.md | 0 {locale => pages}/en/blog/release/v10.8.0.md | 0 {locale => pages}/en/blog/release/v10.9.0.md | 0 {locale => pages}/en/blog/release/v11.0.0.md | 0 {locale => pages}/en/blog/release/v11.1.0.md | 0 {locale => pages}/en/blog/release/v11.10.0.md | 0 {locale => pages}/en/blog/release/v11.10.1.md | 0 {locale => pages}/en/blog/release/v11.11.0.md | 0 {locale => pages}/en/blog/release/v11.12.0.md | 0 {locale => pages}/en/blog/release/v11.13.0.md | 0 {locale => pages}/en/blog/release/v11.14.0.md | 0 {locale => pages}/en/blog/release/v11.15.0.md | 0 {locale => pages}/en/blog/release/v11.2.0.md | 0 {locale => pages}/en/blog/release/v11.3.0.md | 0 {locale => pages}/en/blog/release/v11.4.0.md | 0 {locale => pages}/en/blog/release/v11.5.0.md | 0 {locale => pages}/en/blog/release/v11.6.0.md | 0 {locale => pages}/en/blog/release/v11.7.0.md | 0 {locale => pages}/en/blog/release/v11.8.0.md | 0 {locale => pages}/en/blog/release/v11.9.0.md | 0 {locale => pages}/en/blog/release/v12.0.0.md | 0 {locale => pages}/en/blog/release/v12.1.0.md | 0 {locale => pages}/en/blog/release/v12.10.0.md | 0 {locale => pages}/en/blog/release/v12.11.0.md | 0 {locale => pages}/en/blog/release/v12.11.1.md | 0 {locale => pages}/en/blog/release/v12.12.0.md | 0 {locale => pages}/en/blog/release/v12.13.0.md | 0 {locale => pages}/en/blog/release/v12.13.1.md | 0 {locale => pages}/en/blog/release/v12.14.0.md | 0 {locale => pages}/en/blog/release/v12.14.1.md | 0 {locale => pages}/en/blog/release/v12.15.0.md | 0 {locale => pages}/en/blog/release/v12.16.0.md | 0 {locale => pages}/en/blog/release/v12.16.1.md | 0 {locale => pages}/en/blog/release/v12.16.2.md | 0 {locale => pages}/en/blog/release/v12.16.3.md | 0 {locale => pages}/en/blog/release/v12.17.0.md | 0 {locale => pages}/en/blog/release/v12.18.0.md | 0 {locale => pages}/en/blog/release/v12.18.1.md | 0 {locale => pages}/en/blog/release/v12.18.2.md | 0 {locale => pages}/en/blog/release/v12.18.3.md | 0 {locale => pages}/en/blog/release/v12.18.4.md | 0 {locale => pages}/en/blog/release/v12.19.0.md | 0 {locale => pages}/en/blog/release/v12.19.1.md | 0 {locale => pages}/en/blog/release/v12.2.0.md | 0 {locale => pages}/en/blog/release/v12.20.0.md | 0 {locale => pages}/en/blog/release/v12.20.1.md | 0 {locale => pages}/en/blog/release/v12.20.2.md | 0 {locale => pages}/en/blog/release/v12.21.0.md | 0 {locale => pages}/en/blog/release/v12.22.0.md | 0 {locale => pages}/en/blog/release/v12.22.1.md | 0 .../en/blog/release/v12.22.10.md | 0 .../en/blog/release/v12.22.11.md | 0 .../en/blog/release/v12.22.12.md | 0 {locale => pages}/en/blog/release/v12.22.2.md | 0 {locale => pages}/en/blog/release/v12.22.3.md | 0 {locale => pages}/en/blog/release/v12.22.4.md | 0 {locale => pages}/en/blog/release/v12.22.5.md | 0 {locale => pages}/en/blog/release/v12.22.6.md | 0 {locale => pages}/en/blog/release/v12.22.7.md | 0 {locale => pages}/en/blog/release/v12.22.8.md | 0 {locale => pages}/en/blog/release/v12.22.9.md | 0 {locale => pages}/en/blog/release/v12.3.0.md | 0 {locale => pages}/en/blog/release/v12.3.1.md | 0 {locale => pages}/en/blog/release/v12.4.0.md | 0 {locale => pages}/en/blog/release/v12.5.0.md | 0 {locale => pages}/en/blog/release/v12.6.0.md | 0 {locale => pages}/en/blog/release/v12.7.0.md | 0 {locale => pages}/en/blog/release/v12.8.0.md | 0 {locale => pages}/en/blog/release/v12.8.1.md | 0 {locale => pages}/en/blog/release/v12.9.0.md | 0 {locale => pages}/en/blog/release/v12.9.1.md | 0 {locale => pages}/en/blog/release/v13.0.0.md | 0 {locale => pages}/en/blog/release/v13.0.1.md | 0 {locale => pages}/en/blog/release/v13.1.0.md | 0 {locale => pages}/en/blog/release/v13.10.0.md | 0 {locale => pages}/en/blog/release/v13.10.1.md | 0 {locale => pages}/en/blog/release/v13.11.0.md | 0 {locale => pages}/en/blog/release/v13.12.0.md | 0 {locale => pages}/en/blog/release/v13.13.0.md | 0 {locale => pages}/en/blog/release/v13.14.0.md | 0 {locale => pages}/en/blog/release/v13.2.0.md | 0 {locale => pages}/en/blog/release/v13.3.0.md | 0 {locale => pages}/en/blog/release/v13.4.0.md | 0 {locale => pages}/en/blog/release/v13.5.0.md | 0 {locale => pages}/en/blog/release/v13.6.0.md | 0 {locale => pages}/en/blog/release/v13.7.0.md | 0 {locale => pages}/en/blog/release/v13.8.0.md | 0 {locale => pages}/en/blog/release/v13.9.0.md | 0 {locale => pages}/en/blog/release/v14.0.0.md | 0 {locale => pages}/en/blog/release/v14.1.0.md | 206 +- {locale => pages}/en/blog/release/v14.10.0.md | 0 {locale => pages}/en/blog/release/v14.10.1.md | 0 {locale => pages}/en/blog/release/v14.11.0.md | 0 {locale => pages}/en/blog/release/v14.12.0.md | 0 {locale => pages}/en/blog/release/v14.13.0.md | 0 {locale => pages}/en/blog/release/v14.13.1.md | 0 {locale => pages}/en/blog/release/v14.14.0.md | 0 {locale => pages}/en/blog/release/v14.15.0.md | 0 {locale => pages}/en/blog/release/v14.15.1.md | 0 {locale => pages}/en/blog/release/v14.15.2.md | 0 {locale => pages}/en/blog/release/v14.15.3.md | 0 {locale => pages}/en/blog/release/v14.15.4.md | 0 {locale => pages}/en/blog/release/v14.15.5.md | 0 {locale => pages}/en/blog/release/v14.16.0.md | 0 {locale => pages}/en/blog/release/v14.16.1.md | 0 {locale => pages}/en/blog/release/v14.17.0.md | 0 {locale => pages}/en/blog/release/v14.17.1.md | 0 {locale => pages}/en/blog/release/v14.17.2.md | 0 {locale => pages}/en/blog/release/v14.17.3.md | 0 {locale => pages}/en/blog/release/v14.17.4.md | 0 {locale => pages}/en/blog/release/v14.17.5.md | 0 {locale => pages}/en/blog/release/v14.17.6.md | 0 {locale => pages}/en/blog/release/v14.18.0.md | 0 {locale => pages}/en/blog/release/v14.18.1.md | 0 {locale => pages}/en/blog/release/v14.18.2.md | 0 {locale => pages}/en/blog/release/v14.18.3.md | 0 {locale => pages}/en/blog/release/v14.19.0.md | 0 {locale => pages}/en/blog/release/v14.19.1.md | 0 {locale => pages}/en/blog/release/v14.19.2.md | 0 {locale => pages}/en/blog/release/v14.19.3.md | 0 {locale => pages}/en/blog/release/v14.2.0.md | 0 {locale => pages}/en/blog/release/v14.20.0.md | 0 {locale => pages}/en/blog/release/v14.20.1.md | 0 {locale => pages}/en/blog/release/v14.21.0.md | 0 {locale => pages}/en/blog/release/v14.21.1.md | 0 {locale => pages}/en/blog/release/v14.21.2.md | 0 {locale => pages}/en/blog/release/v14.21.3.md | 0 {locale => pages}/en/blog/release/v14.3.0.md | 0 {locale => pages}/en/blog/release/v14.4.0.md | 0 {locale => pages}/en/blog/release/v14.5.0.md | 0 {locale => pages}/en/blog/release/v14.6.0.md | 0 {locale => pages}/en/blog/release/v14.7.0.md | 0 {locale => pages}/en/blog/release/v14.8.0.md | 0 {locale => pages}/en/blog/release/v14.9.0.md | 0 {locale => pages}/en/blog/release/v15.0.0.md | 0 {locale => pages}/en/blog/release/v15.0.1.md | 0 {locale => pages}/en/blog/release/v15.1.0.md | 0 {locale => pages}/en/blog/release/v15.10.0.md | 0 {locale => pages}/en/blog/release/v15.11.0.md | 0 {locale => pages}/en/blog/release/v15.12.0.md | 0 {locale => pages}/en/blog/release/v15.13.0.md | 0 {locale => pages}/en/blog/release/v15.14.0.md | 0 {locale => pages}/en/blog/release/v15.2.0.md | 0 {locale => pages}/en/blog/release/v15.2.1.md | 0 {locale => pages}/en/blog/release/v15.3.0.md | 0 {locale => pages}/en/blog/release/v15.4.0.md | 0 {locale => pages}/en/blog/release/v15.5.0.md | 0 {locale => pages}/en/blog/release/v15.5.1.md | 0 {locale => pages}/en/blog/release/v15.6.0.md | 0 {locale => pages}/en/blog/release/v15.7.0.md | 0 {locale => pages}/en/blog/release/v15.8.0.md | 0 {locale => pages}/en/blog/release/v15.9.0.md | 0 {locale => pages}/en/blog/release/v16.0.0.md | 0 {locale => pages}/en/blog/release/v16.1.0.md | 0 {locale => pages}/en/blog/release/v16.10.0.md | 0 {locale => pages}/en/blog/release/v16.11.0.md | 0 {locale => pages}/en/blog/release/v16.11.1.md | 0 {locale => pages}/en/blog/release/v16.12.0.md | 0 {locale => pages}/en/blog/release/v16.13.0.md | 0 {locale => pages}/en/blog/release/v16.13.1.md | 0 {locale => pages}/en/blog/release/v16.13.2.md | 0 {locale => pages}/en/blog/release/v16.14.0.md | 0 {locale => pages}/en/blog/release/v16.14.1.md | 0 {locale => pages}/en/blog/release/v16.14.2.md | 0 {locale => pages}/en/blog/release/v16.15.0.md | 0 {locale => pages}/en/blog/release/v16.15.1.md | 0 {locale => pages}/en/blog/release/v16.16.0.md | 0 {locale => pages}/en/blog/release/v16.17.0.md | 0 {locale => pages}/en/blog/release/v16.17.1.md | 0 {locale => pages}/en/blog/release/v16.18.0.md | 0 {locale => pages}/en/blog/release/v16.18.1.md | 0 {locale => pages}/en/blog/release/v16.19.0.md | 0 {locale => pages}/en/blog/release/v16.19.1.md | 0 {locale => pages}/en/blog/release/v16.2.0.md | 0 {locale => pages}/en/blog/release/v16.3.0.md | 0 {locale => pages}/en/blog/release/v16.4.0.md | 0 {locale => pages}/en/blog/release/v16.4.1.md | 0 {locale => pages}/en/blog/release/v16.4.2.md | 0 {locale => pages}/en/blog/release/v16.5.0.md | 0 {locale => pages}/en/blog/release/v16.6.0.md | 0 {locale => pages}/en/blog/release/v16.6.1.md | 0 {locale => pages}/en/blog/release/v16.6.2.md | 0 {locale => pages}/en/blog/release/v16.7.0.md | 0 {locale => pages}/en/blog/release/v16.8.0.md | 0 {locale => pages}/en/blog/release/v16.9.0.md | 0 {locale => pages}/en/blog/release/v16.9.1.md | 0 {locale => pages}/en/blog/release/v17.0.0.md | 0 {locale => pages}/en/blog/release/v17.0.1.md | 0 {locale => pages}/en/blog/release/v17.1.0.md | 0 {locale => pages}/en/blog/release/v17.2.0.md | 0 {locale => pages}/en/blog/release/v17.3.0.md | 0 {locale => pages}/en/blog/release/v17.3.1.md | 0 {locale => pages}/en/blog/release/v17.4.0.md | 0 {locale => pages}/en/blog/release/v17.5.0.md | 0 {locale => pages}/en/blog/release/v17.6.0.md | 0 {locale => pages}/en/blog/release/v17.7.0.md | 0 {locale => pages}/en/blog/release/v17.7.1.md | 0 {locale => pages}/en/blog/release/v17.7.2.md | 0 {locale => pages}/en/blog/release/v17.8.0.md | 0 {locale => pages}/en/blog/release/v17.9.0.md | 0 {locale => pages}/en/blog/release/v17.9.1.md | 0 {locale => pages}/en/blog/release/v18.0.0.md | 0 {locale => pages}/en/blog/release/v18.1.0.md | 0 {locale => pages}/en/blog/release/v18.10.0.md | 0 {locale => pages}/en/blog/release/v18.11.0.md | 0 {locale => pages}/en/blog/release/v18.12.0.md | 0 {locale => pages}/en/blog/release/v18.12.1.md | 0 {locale => pages}/en/blog/release/v18.13.0.md | 0 {locale => pages}/en/blog/release/v18.14.0.md | 0 {locale => pages}/en/blog/release/v18.14.1.md | 0 {locale => pages}/en/blog/release/v18.14.2.md | 0 {locale => pages}/en/blog/release/v18.15.0.md | 0 {locale => pages}/en/blog/release/v18.2.0.md | 0 {locale => pages}/en/blog/release/v18.3.0.md | 0 {locale => pages}/en/blog/release/v18.4.0.md | 0 {locale => pages}/en/blog/release/v18.5.0.md | 0 {locale => pages}/en/blog/release/v18.6.0.md | 0 {locale => pages}/en/blog/release/v18.7.0.md | 0 {locale => pages}/en/blog/release/v18.8.0.md | 0 {locale => pages}/en/blog/release/v18.9.0.md | 0 {locale => pages}/en/blog/release/v18.9.1.md | 0 {locale => pages}/en/blog/release/v19.0.0.md | 0 {locale => pages}/en/blog/release/v19.0.1.md | 0 {locale => pages}/en/blog/release/v19.1.0.md | 0 {locale => pages}/en/blog/release/v19.2.0.md | 0 {locale => pages}/en/blog/release/v19.3.0.md | 0 {locale => pages}/en/blog/release/v19.4.0.md | 0 {locale => pages}/en/blog/release/v19.5.0.md | 0 {locale => pages}/en/blog/release/v19.6.0.md | 0 {locale => pages}/en/blog/release/v19.6.1.md | 0 {locale => pages}/en/blog/release/v19.7.0.md | 0 {locale => pages}/en/blog/release/v4.0.0.md | 0 {locale => pages}/en/blog/release/v4.1.0.md | 0 {locale => pages}/en/blog/release/v4.1.1.md | 0 {locale => pages}/en/blog/release/v4.1.2.md | 0 {locale => pages}/en/blog/release/v4.2.0.md | 0 {locale => pages}/en/blog/release/v4.2.1.md | 0 {locale => pages}/en/blog/release/v4.2.2.md | 0 {locale => pages}/en/blog/release/v4.2.3.md | 0 {locale => pages}/en/blog/release/v4.2.4.md | 0 {locale => pages}/en/blog/release/v4.2.5.md | 0 {locale => pages}/en/blog/release/v4.2.6.md | 0 {locale => pages}/en/blog/release/v4.3.0.md | 0 {locale => pages}/en/blog/release/v4.3.1.md | 0 {locale => pages}/en/blog/release/v4.3.2.md | 0 {locale => pages}/en/blog/release/v4.4.0.md | 0 {locale => pages}/en/blog/release/v4.4.1.md | 0 {locale => pages}/en/blog/release/v4.4.2.md | 0 {locale => pages}/en/blog/release/v4.4.3.md | 0 {locale => pages}/en/blog/release/v4.4.4.md | 0 {locale => pages}/en/blog/release/v4.4.5.md | 0 {locale => pages}/en/blog/release/v4.4.6.md | 0 {locale => pages}/en/blog/release/v4.4.7.md | 0 {locale => pages}/en/blog/release/v4.5.0.md | 0 {locale => pages}/en/blog/release/v4.6.0.md | 0 {locale => pages}/en/blog/release/v4.6.1.md | 0 {locale => pages}/en/blog/release/v4.6.2.md | 0 {locale => pages}/en/blog/release/v4.7.0.md | 0 {locale => pages}/en/blog/release/v4.7.1.md | 0 {locale => pages}/en/blog/release/v4.7.2.md | 0 {locale => pages}/en/blog/release/v4.7.3.md | 0 {locale => pages}/en/blog/release/v4.8.0.md | 0 {locale => pages}/en/blog/release/v4.8.1.md | 0 {locale => pages}/en/blog/release/v4.8.2.md | 0 {locale => pages}/en/blog/release/v4.8.3.md | 0 {locale => pages}/en/blog/release/v4.8.4.md | 0 {locale => pages}/en/blog/release/v4.8.5.md | 0 {locale => pages}/en/blog/release/v4.8.6.md | 0 {locale => pages}/en/blog/release/v4.8.7.md | 0 {locale => pages}/en/blog/release/v4.9.0.md | 0 {locale => pages}/en/blog/release/v4.9.1.md | 0 {locale => pages}/en/blog/release/v5.0.0.md | 0 {locale => pages}/en/blog/release/v5.1.0.md | 0 {locale => pages}/en/blog/release/v5.1.1.md | 0 {locale => pages}/en/blog/release/v5.10.0.md | 0 {locale => pages}/en/blog/release/v5.10.1.md | 0 {locale => pages}/en/blog/release/v5.11.0.md | 0 {locale => pages}/en/blog/release/v5.11.1.md | 0 {locale => pages}/en/blog/release/v5.12.0.md | 0 {locale => pages}/en/blog/release/v5.2.0.md | 0 {locale => pages}/en/blog/release/v5.3.0.md | 0 {locale => pages}/en/blog/release/v5.4.0.md | 0 {locale => pages}/en/blog/release/v5.4.1.md | 0 {locale => pages}/en/blog/release/v5.5.0.md | 0 {locale => pages}/en/blog/release/v5.6.0.md | 0 {locale => pages}/en/blog/release/v5.7.0.md | 0 {locale => pages}/en/blog/release/v5.7.1.md | 0 {locale => pages}/en/blog/release/v5.8.0.md | 0 {locale => pages}/en/blog/release/v5.9.0.md | 0 {locale => pages}/en/blog/release/v5.9.1.md | 0 {locale => pages}/en/blog/release/v6.0.0.md | 0 {locale => pages}/en/blog/release/v6.1.0.md | 0 {locale => pages}/en/blog/release/v6.10.0.md | 0 {locale => pages}/en/blog/release/v6.10.1.md | 0 {locale => pages}/en/blog/release/v6.10.2.md | 0 {locale => pages}/en/blog/release/v6.10.3.md | 0 {locale => pages}/en/blog/release/v6.11.0.md | 0 {locale => pages}/en/blog/release/v6.11.1.md | 0 {locale => pages}/en/blog/release/v6.11.2.md | 0 {locale => pages}/en/blog/release/v6.11.3.md | 0 {locale => pages}/en/blog/release/v6.11.4.md | 0 {locale => pages}/en/blog/release/v6.11.5.md | 0 {locale => pages}/en/blog/release/v6.12.0.md | 0 {locale => pages}/en/blog/release/v6.12.1.md | 0 {locale => pages}/en/blog/release/v6.12.2.md | 0 {locale => pages}/en/blog/release/v6.12.3.md | 0 {locale => pages}/en/blog/release/v6.13.0.md | 0 {locale => pages}/en/blog/release/v6.13.1.md | 0 {locale => pages}/en/blog/release/v6.14.0.md | 0 {locale => pages}/en/blog/release/v6.14.1.md | 0 {locale => pages}/en/blog/release/v6.14.2.md | 0 {locale => pages}/en/blog/release/v6.14.3.md | 0 {locale => pages}/en/blog/release/v6.14.4.md | 0 {locale => pages}/en/blog/release/v6.15.0.md | 0 {locale => pages}/en/blog/release/v6.15.1.md | 0 {locale => pages}/en/blog/release/v6.16.0.md | 0 {locale => pages}/en/blog/release/v6.17.0.md | 0 {locale => pages}/en/blog/release/v6.17.1.md | 0 {locale => pages}/en/blog/release/v6.2.0.md | 0 {locale => pages}/en/blog/release/v6.2.1.md | 0 {locale => pages}/en/blog/release/v6.2.2.md | 0 {locale => pages}/en/blog/release/v6.3.0.md | 0 {locale => pages}/en/blog/release/v6.3.1.md | 0 {locale => pages}/en/blog/release/v6.4.0.md | 0 {locale => pages}/en/blog/release/v6.5.0.md | 0 {locale => pages}/en/blog/release/v6.6.0.md | 0 {locale => pages}/en/blog/release/v6.7.0.md | 0 {locale => pages}/en/blog/release/v6.8.0.md | 0 {locale => pages}/en/blog/release/v6.8.1.md | 0 {locale => pages}/en/blog/release/v6.9.0.md | 0 {locale => pages}/en/blog/release/v6.9.1.md | 0 {locale => pages}/en/blog/release/v6.9.2.md | 0 {locale => pages}/en/blog/release/v6.9.3.md | 0 {locale => pages}/en/blog/release/v6.9.4.md | 0 {locale => pages}/en/blog/release/v6.9.5.md | 0 {locale => pages}/en/blog/release/v7.0.0.md | 0 {locale => pages}/en/blog/release/v7.1.0.md | 0 {locale => pages}/en/blog/release/v7.10.0.md | 0 {locale => pages}/en/blog/release/v7.10.1.md | 0 {locale => pages}/en/blog/release/v7.2.0.md | 0 {locale => pages}/en/blog/release/v7.2.1.md | 0 {locale => pages}/en/blog/release/v7.3.0.md | 0 {locale => pages}/en/blog/release/v7.4.0.md | 0 {locale => pages}/en/blog/release/v7.5.0.md | 0 {locale => pages}/en/blog/release/v7.6.0.md | 0 {locale => pages}/en/blog/release/v7.7.0.md | 0 {locale => pages}/en/blog/release/v7.7.1.md | 0 {locale => pages}/en/blog/release/v7.7.2.md | 0 {locale => pages}/en/blog/release/v7.7.3.md | 0 {locale => pages}/en/blog/release/v7.7.4.md | 0 {locale => pages}/en/blog/release/v7.8.0.md | 0 {locale => pages}/en/blog/release/v7.9.0.md | 0 {locale => pages}/en/blog/release/v8.0.0.md | 0 {locale => pages}/en/blog/release/v8.1.0.md | 0 {locale => pages}/en/blog/release/v8.1.1.md | 0 {locale => pages}/en/blog/release/v8.1.2.md | 0 {locale => pages}/en/blog/release/v8.1.3.md | 0 {locale => pages}/en/blog/release/v8.1.4.md | 0 {locale => pages}/en/blog/release/v8.10.0.md | 0 {locale => pages}/en/blog/release/v8.11.0.md | 0 {locale => pages}/en/blog/release/v8.11.1.md | 0 {locale => pages}/en/blog/release/v8.11.2.md | 0 {locale => pages}/en/blog/release/v8.11.3.md | 0 {locale => pages}/en/blog/release/v8.11.4.md | 0 {locale => pages}/en/blog/release/v8.12.0.md | 0 {locale => pages}/en/blog/release/v8.13.0.md | 0 {locale => pages}/en/blog/release/v8.14.0.md | 0 {locale => pages}/en/blog/release/v8.14.1.md | 0 {locale => pages}/en/blog/release/v8.15.0.md | 0 {locale => pages}/en/blog/release/v8.15.1.md | 0 {locale => pages}/en/blog/release/v8.16.0.md | 0 {locale => pages}/en/blog/release/v8.16.1.md | 0 {locale => pages}/en/blog/release/v8.16.2.md | 0 {locale => pages}/en/blog/release/v8.17.0.md | 0 {locale => pages}/en/blog/release/v8.2.0.md | 0 {locale => pages}/en/blog/release/v8.2.1.md | 0 {locale => pages}/en/blog/release/v8.3.0.md | 0 {locale => pages}/en/blog/release/v8.4.0.md | 0 {locale => pages}/en/blog/release/v8.5.0.md | 0 {locale => pages}/en/blog/release/v8.6.0.md | 0 {locale => pages}/en/blog/release/v8.7.0.md | 0 {locale => pages}/en/blog/release/v8.8.0.md | 0 {locale => pages}/en/blog/release/v8.8.1.md | 0 {locale => pages}/en/blog/release/v8.9.0.md | 0 {locale => pages}/en/blog/release/v8.9.1.md | 0 {locale => pages}/en/blog/release/v8.9.2.md | 0 {locale => pages}/en/blog/release/v8.9.3.md | 0 {locale => pages}/en/blog/release/v8.9.4.md | 0 {locale => pages}/en/blog/release/v9.0.0.md | 0 {locale => pages}/en/blog/release/v9.1.0.md | 0 {locale => pages}/en/blog/release/v9.10.0.md | 0 {locale => pages}/en/blog/release/v9.10.1.md | 0 {locale => pages}/en/blog/release/v9.11.0.md | 0 {locale => pages}/en/blog/release/v9.11.1.md | 0 {locale => pages}/en/blog/release/v9.11.2.md | 0 {locale => pages}/en/blog/release/v9.2.0.md | 0 {locale => pages}/en/blog/release/v9.2.1.md | 0 {locale => pages}/en/blog/release/v9.3.0.md | 0 {locale => pages}/en/blog/release/v9.4.0.md | 0 {locale => pages}/en/blog/release/v9.5.0.md | 0 {locale => pages}/en/blog/release/v9.6.0.md | 0 {locale => pages}/en/blog/release/v9.6.1.md | 0 {locale => pages}/en/blog/release/v9.7.0.md | 0 {locale => pages}/en/blog/release/v9.7.1.md | 0 {locale => pages}/en/blog/release/v9.8.0.md | 0 {locale => pages}/en/blog/release/v9.9.0.md | 0 .../en/blog/uncategorized/10-lts-to-12-lts.md | 0 ...-way-to-build-scalable-network-programs.md | 0 .../uncategorized/bnoordhuis-departure.md | 0 .../uncategorized/development-environment.md | 0 .../evolving-the-node-js-brand.md | 0 .../en/blog/uncategorized/growing-up.md | 0 .../en/blog/uncategorized/index.md | 0 .../en/blog/uncategorized/jobs-nodejs-org.md | 0 .../uncategorized/ldapjs-a-reprise-of-ldap.md | 0 .../blog/uncategorized/libuv-status-report.md | 0 .../node-interactive-convince-boss.md | 0 .../node-meetup-this-thursday.md | 0 .../node-office-hours-cut-short.md | 0 .../blog/uncategorized/notes-from-the-road.md | 0 .../en/blog/uncategorized/office-hours.md | 0 ...ng-node-to-windows-with-microsofts-help.md | 0 .../blog/uncategorized/profiling-node-js.md | 0 .../uncategorized/some-new-node-projects.md | 0 .../the-videos-from-node-meetup.md | 0 .../tj-fontaine-new-node-lead.md | 0 .../en/blog/uncategorized/trademark.md | 0 .../en/blog/uncategorized/version-0-6.md | 0 .../blog/video/bert-belder-libuv-lxjs-2012.md | 0 ...antrill-instrumenting-the-real-time-web.md | 0 {locale => pages}/en/blog/video/index.md | 0 .../en/blog/video/welcome-to-the-node-blog.md | 0 .../april-2020-openssl-updates.md | 0 .../april-2021-security-releases.md | 0 .../aug-2019-security-releases.md | 0 .../aug-2021-security-releases.md | 0 .../aug-2021-security-releases2.md | 0 .../august-2018-security-releases.md | 0 .../cve-2015-8027_cve-2015-6764.md | 0 .../december-2015-security-release-update.md | 0 .../december-2015-security-releases.md | 0 .../december-2017-security-releases.md | 0 .../december-2019-security-releases.md | 0 .../february-2016-security-releases.md | 0 .../february-2019-security-releases.md | 0 .../february-2020-security-releases.md | 0 .../february-2021-security-releases.md | 0 .../february-2023-security-releases.md | 0 .../http-server-pipeline-flood-dos.md | 0 ...-vulnerability-please-upgrade-to-0-6-17.md | 0 .../en/blog/vulnerability/index.md | 0 .../jan-2018-spectre-meltdown.md | 0 .../jan-2022-security-releases.md | 0 .../january-2021-security-releases.md | 0 .../july-2017-security-releases.md | 0 .../july-2021-security-releases-2.md | 0 .../july-2021-security-releases.md | 0 .../july-2022-security-releases.md | 0 .../june-2016-security-releases.md | 0 .../june-2018-security-releases.md | 0 .../june-2020-security-releases.md | 0 .../mar-2022-security-releases.md | 0 .../march-2018-security-releases.md | 0 .../november-2018-security-releases.md | 0 .../november-2020-security-releases.md | 0 .../november-2022-security-releases.md | 0 .../npm-tokens-leak-march-2016.md | 0 .../en/blog/vulnerability/oct-2017-dos.md | 0 .../oct-2021-security-releases.md | 0 .../october-2016-security-releases.md | 0 ...openssl-and-low-severity-fixes-jan-2016.md | 0 .../en/blog/vulnerability/openssl-and-utf8.md | 0 ...enssl-and-zlib-vulnerability-assessment.md | 0 ...enssl-fixes-in-regular-releases-dec2022.md | 0 ...enssl-fixes-in-regular-releases-jun2022.md | 0 ...enssl-fixes-in-regular-releases-may2022.md | 0 .../vulnerability/openssl-january-2017.md | 0 .../blog/vulnerability/openssl-march-2016.md | 0 .../en/blog/vulnerability/openssl-may-2016.md | 0 .../vulnerability/openssl-november-2017.md | 0 .../vulnerability/openssl-november-2022.md | 0 .../september-2016-security-releases.md | 0 .../september-2017-path-validation.md | 0 .../september-2019-openssl-no-updates.md | 0 .../september-2019-openssl-updates.md | 0 .../september-2020-security-releases.md | 0 .../september-2022-security-releases.md | 0 .../v8-memory-corruption-stack-overflow.md | 0 .../en/blog/weekly-updates/index.md | 0 .../weekly-update.2015-02-06.md | 0 .../weekly-update.2015-02-13.md | 0 .../weekly-update.2015-02-20.md | 0 .../weekly-update.2015-02-27.md | 0 .../weekly-update.2015-03-06.md | 0 .../weekly-update.2015-03-13.md | 0 .../weekly-update.2015-03-20.md | 0 .../weekly-update.2015-03-27.md | 0 .../weekly-update.2015-04-03.md | 0 .../weekly-update.2015-04-10.md | 0 .../weekly-update.2015-04-17.md | 0 .../weekly-update.2015-04-24.md | 0 .../weekly-update.2015-05-01.md | 0 .../weekly-update.2015-05-08.md | 0 .../weekly-update.2015-05-15.md | 0 .../weekly-update.2015-05-22.md | 0 .../weekly-update.2015-05-29.md | 0 .../weekly-update.2015-06-05.md | 0 .../weekly-update.2015-06-12.md | 0 .../weekly-update.2015-06-19.md | 0 .../weekly-update.2015-06-26.md | 0 .../weekly-update.2015-07-03.md | 0 .../weekly-update.2015-07-10.md | 0 .../weekly-update.2015-07-17.md | 0 .../weekly-update.2015-07-24.md | 0 .../weekly-update.2015-07-31.md | 0 .../weekly-update.2015-08-07.md | 0 .../weekly-update.2015-08-14.md | 0 .../weekly-update.2015-08-21.md | 0 .../weekly-update.2015-08-28.md | 0 .../weekly-update.2015-09-04.md | 0 .../weekly-update.2015-09-11.md | 0 .../weekly-update.2015-09-18.md | 0 .../weekly-update.2015-10-02.md | 0 .../weekly-update.2015-10-09.md | 0 .../weekly-update.2015-10-16.md | 0 .../weekly-update.2015-10-23.md | 0 .../weekly-update.2015-10-30.md | 0 .../weekly-update.2015-11-06.md | 0 .../weekly-update.2015-11-13.md | 0 .../weekly-update.2015-11-20.md | 0 .../weekly-update.2015-11-27.md | 0 .../weekly-update.2015-12-04.md | 0 .../weekly-update.2015-12-11.md | 0 .../weekly-update.2016-01-01.md | 0 .../weekly-update.2016-01-11.md | 0 .../weekly-update.2016-01-18.md | 0 .../weekly-update.2016-01-22.md | 0 .../weekly-update.2016-01-29.md | 0 .../weekly-update.2016-02-08.md | 0 .../weekly-update.2016-02-15.md | 0 .../weekly-update.2016-02-22.md | 0 .../weekly-update.2016-03-01.md | 0 .../weekly-update.2016-03-07.md | 0 .../weekly-update.2016-03-14.md | 0 .../weekly-update.2016-04-17.md | 0 .../weekly-update.2016-04-23.md | 0 .../weekly-update.2016-04-29.md | 0 .../weekly-update.2016-05-30.md | 0 .../weekly-update.2016-06-16.md | 0 .../weekly-update.2016-06-26.md | 0 .../weekly-update.2016-07-08.md | 0 .../weekly-update.2016-07-16.md | 0 .../weekly-update.2016-07-22.md | 0 .../weekly-update.2016-08-15.md | 0 .../weekly-update.2016-10-28.md | 0 .../weekly-update.2016-11-04.md | 0 .../weekly-update.2016-11-11.md | 0 .../weekly-update.2016-11-24.md | 0 .../weekly-update.2016-12-02.md | 0 .../weekly-update.2016-12-25.md | 0 .../weekly-update.2017-02-10.md | 0 .../en/blog/wg/diag-wg-update-2017-02.md | 0 {locale => pages}/en/docs/es6.md | 0 .../en/docs/guides/abi-stability.md | 0 .../guides/anatomy-of-an-http-transaction.md | 0 .../docs/guides/backpressuring-in-streams.md | 0 .../docs/guides/blocking-vs-non-blocking.md | 0 .../guides/buffer-constructor-deprecation.md | 72 +- .../docs/guides/debugging-getting-started.md | 0 .../en/docs/guides/diagnostics-flamegraph.md | 0 .../en/docs/guides/diagnostics/index.md | 0 .../diagnostics/live-debugging/index.md | 0 .../live-debugging/using-inspector.md | 0 .../docs/guides/diagnostics/memory/index.md | 0 .../diagnostics/memory/using-gc-traces.md | 0 .../diagnostics/memory/using-heap-profiler.md | 0 .../diagnostics/memory/using-heap-snapshot.md | 0 .../diagnostics/poor-performance/index.md | 0 .../poor-performance/using-linux-perf.md | 0 .../en/docs/guides/domain-postmortem.md | 0 .../docs/guides/dont-block-the-event-loop.md | 0 .../guides/event-loop-timers-and-nexttick.md | 0 .../en/docs/guides/getting-started-guide.md | 0 {locale => pages}/en/docs/guides/index.md | 0 .../en/docs/guides/nodejs-docker-webapp.md | 0 .../en/docs/guides/publishing-napi-modules.md | 0 .../en/docs/guides/security/index.md | 0 .../en/docs/guides/simple-profiling.md | 0 .../en/docs/guides/timers-in-node.md | 0 .../working-with-different-filesystems.md | 0 .../docs/index.md => pages/en/docs/index.mdx | 12 +- .../en/docs/meta/topics/dependencies.md | 0 {locale => pages}/en/download/current.md | 0 {locale => pages}/en/download/index.md | 0 .../en/download/package-manager.md | 0 {locale => pages}/en/download/releases.md | 0 .../en/get-involved/collab-summit.md | 0 .../en/get-involved/contribute.md | 0 {locale => pages}/en/get-involved/index.md | 0 {locale => pages}/en/index.md | 0 {locale => pages}/es/404.md | 0 {locale => pages}/es/about/governance.md | 0 {locale => pages}/es/about/index.md | 0 {locale => pages}/es/docs/es6.md | 0 .../docs/index.md => pages/es/docs/index.mdx | 12 +- .../es/docs/meta/topics/dependencies.md | 0 {locale => pages}/es/download/current.md | 0 {locale => pages}/es/download/index.md | 0 .../es/download/package-manager.md | 0 {locale => pages}/es/download/releases.md | 0 .../es/get-involved/collab-summit.md | 0 .../es/get-involved/contribute.md | 0 {locale => pages}/es/get-involved/index.md | 0 {locale => pages}/es/index.md | 0 {locale => pages}/fa/404.md | 0 {locale => pages}/fa/about/index.md | 0 {locale => pages}/fa/index.md | 0 {locale => pages}/fr/404.md | 0 {locale => pages}/fr/about/governance.md | 0 {locale => pages}/fr/about/index.md | 0 .../docs/index.md => pages/fr/docs/index.mdx | 12 +- {locale => pages}/fr/download/current.md | 0 {locale => pages}/fr/download/index.md | 0 .../fr/download/package-manager.md | 0 {locale => pages}/fr/download/releases.md | 0 .../fr/get-involved/collab-summit.md | 0 .../fr/get-involved/contribute.md | 0 {locale => pages}/fr/get-involved/index.md | 0 {locale => pages}/fr/index.md | 0 {locale => pages}/gl/404.md | 0 {locale => pages}/gl/index.md | 0 {locale => pages}/it/404.md | 0 {locale => pages}/it/about/index.md | 0 .../it/get-involved/collab-summit.md | 0 {locale => pages}/it/get-involved/index.md | 0 {locale => pages}/it/index.md | 0 {locale => pages}/ja/404.md | 0 {locale => pages}/ja/about/index.md | 0 {locale => pages}/ja/docs/es6.md | 0 .../docs/guides/blocking-vs-non-blocking.md | 0 .../guides/buffer-constructor-deprecation.md | 76 +- .../docs/guides/debugging-getting-started.md | 6 - .../ja/docs/guides/diagnostics-flamegraph.md | 0 .../ja/docs/guides/getting-started-guide.md | 0 {locale => pages}/ja/docs/guides/index.md | 0 .../ja/docs/guides/nodejs-docker-webapp.md | 0 .../ja/docs/guides/simple-profiling.md | 0 .../ja/docs/guides/timers-in-node.md | 0 pages/ja/docs/index.mdx | 37 + .../ja/docs/meta/topics/dependencies.md | 0 {locale => pages}/ja/download/current.md | 0 {locale => pages}/ja/download/index.md | 0 .../ja/download/package-manager.md | 0 {locale => pages}/ja/download/releases.md | 0 .../ja/get-involved/collab-summit.md | 0 .../ja/get-involved/contribute.md | 0 {locale => pages}/ja/get-involved/index.md | 0 {locale => pages}/ja/index.md | 0 {locale => pages}/ka/404.md | 0 {locale => pages}/ka/about/governance.md | 0 {locale => pages}/ka/about/index.md | 0 {locale => pages}/ka/docs/es6.md | 0 .../docs/guides/debugging-getting-started.md | 0 .../ka/docs/guides/getting-started-guide.md | 0 {locale => pages}/ka/docs/guides/index.md | 0 .../docs/index.md => pages/ka/docs/index.mdx | 12 +- {locale => pages}/ka/download/index.md | 0 {locale => pages}/ka/get-involved/index.md | 0 {locale => pages}/ka/index.md | 0 {locale => pages}/ko/404.md | 0 {locale => pages}/ko/about/governance.md | 0 {locale => pages}/ko/about/index.md | 0 {locale => pages}/ko/docs/es6.md | 0 .../guides/anatomy-of-an-http-transaction.md | 0 .../docs/guides/blocking-vs-non-blocking.md | 0 .../docs/guides/debugging-getting-started.md | 0 .../ko/docs/guides/domain-postmortem.md | 0 .../docs/guides/dont-block-the-event-loop.md | 0 .../guides/event-loop-timers-and-nexttick.md | 0 .../ko/docs/guides/getting-started-guide.md | 0 {locale => pages}/ko/docs/guides/index.md | 0 .../ko/docs/guides/nodejs-docker-webapp.md | 0 .../ko/docs/guides/simple-profiling.md | 0 .../ko/docs/guides/timers-in-node.md | 0 .../working-with-different-filesystems.md | 0 pages/ko/docs/index.mdx | 42 + .../ko/docs/meta/topics/dependencies.md | 0 {locale => pages}/ko/download/current.md | 0 {locale => pages}/ko/download/index.md | 0 .../ko/download/package-manager.md | 0 {locale => pages}/ko/download/releases.md | 0 {locale => pages}/ko/get-involved/index.md | 0 {locale => pages}/ko/index.md | 0 {locale => pages}/nl/404.md | 0 {locale => pages}/nl/about/governance.md | 0 {locale => pages}/nl/about/index.md | 0 .../docs/index.md => pages/nl/docs/index.mdx | 12 +- {locale => pages}/nl/download/current.md | 0 {locale => pages}/nl/download/index.md | 0 .../nl/download/package-manager.md | 0 {locale => pages}/nl/download/releases.md | 0 {locale => pages}/nl/index.md | 0 {locale => pages}/pt-br/404.md | 0 {locale => pages}/pt-br/about/governance.md | 0 {locale => pages}/pt-br/about/index.md | 0 {locale => pages}/pt-br/docs/es6.md | 0 .../pt-br/docs/guides/abi-stability.md | 0 .../docs/guides/blocking-vs-non-blocking.md | 0 .../docs/guides/debugging-getting-started.md | 0 .../docs/guides/diagnostics-flamegraph.md | 0 .../docs/guides/dont-block-the-event-loop.md | 0 .../index.md => pages/pt-br/docs/index.mdx | 12 +- .../pt-br/docs/meta/topics/dependencies.md | 0 {locale => pages}/pt-br/download/current.md | 0 {locale => pages}/pt-br/download/index.md | 0 .../pt-br/download/package-manager.md | 0 {locale => pages}/pt-br/download/releases.md | 0 .../pt-br/get-involved/collab-summit.md | 0 .../pt-br/get-involved/contribute.md | 0 {locale => pages}/pt-br/get-involved/index.md | 0 {locale => pages}/pt-br/index.md | 0 {locale => pages}/ro/404.md | 0 {locale => pages}/ro/about/governance.md | 0 {locale => pages}/ro/about/index.md | 0 .../docs/index.md => pages/ro/docs/index.mdx | 12 +- {locale => pages}/ro/download/current.md | 0 {locale => pages}/ro/download/index.md | 0 .../ro/download/package-manager.md | 0 {locale => pages}/ro/download/releases.md | 0 .../ro/get-involved/collab-summit.md | 0 .../ro/get-involved/contribute.md | 0 {locale => pages}/ro/get-involved/index.md | 0 {locale => pages}/ro/index.md | 0 {locale => pages}/ru/404.md | 0 {locale => pages}/ru/about/governance.md | 0 {locale => pages}/ru/about/index.md | 0 {locale => pages}/ru/docs/es6.md | 0 .../docs/guides/blocking-vs-non-blocking.md | 0 .../docs/guides/debugging-getting-started.md | 0 .../ru/docs/guides/diagnostics-flamegraph.md | 0 .../ru/docs/guides/getting-started-guide.md | 0 {locale => pages}/ru/docs/guides/index.md | 0 .../ru/docs/guides/nodejs-docker-webapp.md | 0 .../ru/docs/guides/simple-profiling.md | 0 .../ru/docs/guides/timers-in-node.md | 0 .../docs/index.md => pages/ru/docs/index.mdx | 12 +- .../ru/docs/meta/topics/dependencies.md | 0 {locale => pages}/ru/download/current.md | 0 {locale => pages}/ru/download/index.md | 0 .../ru/download/package-manager.md | 0 {locale => pages}/ru/download/releases.md | 0 .../ru/get-involved/collab-summit.md | 0 .../ru/get-involved/contribute.md | 0 {locale => pages}/ru/get-involved/index.md | 0 {locale => pages}/ru/index.md | 0 {locale => pages}/tr/404.md | 0 {locale => pages}/tr/about/index.md | 0 {locale => pages}/tr/docs/es6.md | 0 .../docs/index.md => pages/tr/docs/index.mdx | 12 +- {locale => pages}/tr/download/current.md | 0 {locale => pages}/tr/download/index.md | 0 {locale => pages}/tr/index.md | 0 {locale => pages}/uk/404.md | 0 {locale => pages}/uk/about/governance.md | 0 {locale => pages}/uk/about/index.md | 0 {locale => pages}/uk/docs/es6.md | 0 .../docs/index.md => pages/uk/docs/index.mdx | 12 +- .../uk/docs/meta/topics/dependencies.md | 0 {locale => pages}/uk/download/current.md | 0 {locale => pages}/uk/download/index.md | 0 {locale => pages}/uk/download/releases.md | 0 .../uk/get-involved/contribute.md | 0 {locale => pages}/uk/get-involved/index.md | 0 {locale => pages}/uk/index.md | 0 {locale => pages}/zh-cn/404.md | 0 {locale => pages}/zh-cn/about/governance.md | 0 {locale => pages}/zh-cn/about/index.md | 0 {locale => pages}/zh-cn/docs/es6.md | 0 .../zh-cn/docs/guides/abi-stability.md | 0 .../guides/anatomy-of-an-http-transaction.md | 0 .../docs/guides/backpressuring-in-streams.md | 0 .../docs/guides/blocking-vs-non-blocking.md | 0 .../guides/buffer-constructor-deprecation.md | 64 +- .../docs/guides/debugging-getting-started.md | 0 .../docs/guides/diagnostics-flamegraph.md | 0 .../zh-cn/docs/guides/diagnostics/index.md | 0 .../diagnostics/live-debugging/index.md | 0 .../live-debugging/using-inspector.md | 0 .../docs/guides/diagnostics/memory/index.md | 0 .../diagnostics/memory/using-gc-traces.md | 0 .../diagnostics/memory/using-heap-profiler.md | 0 .../diagnostics/memory/using-heap-snapshot.md | 0 .../diagnostics/poor-performance/index.md | 0 .../poor-performance/using-linux-perf.md | 0 .../zh-cn/docs/guides/domain-postmortem.md | 0 .../docs/guides/dont-block-the-event-loop.md | 0 .../guides/event-loop-timers-and-nexttick.md | 0 .../docs/guides/getting-started-guide.md | 0 {locale => pages}/zh-cn/docs/guides/index.md | 0 .../zh-cn/docs/guides/nodejs-docker-webapp.md | 0 .../docs/guides/publishing-napi-modules.md | 0 .../zh-cn/docs/guides/security/index.md | 0 .../zh-cn/docs/guides/simple-profiling.md | 0 .../zh-cn/docs/guides/timers-in-node.md | 0 .../working-with-different-filesystems.md | 0 .../index.md => pages/zh-cn/docs/index.mdx | 12 +- .../zh-cn/docs/meta/topics/dependencies.md | 0 {locale => pages}/zh-cn/download/current.md | 0 {locale => pages}/zh-cn/download/index.md | 0 .../zh-cn/download/package-manager.md | 0 {locale => pages}/zh-cn/download/releases.md | 0 .../zh-cn/get-involved/collab-summit.md | 0 .../zh-cn/get-involved/contribute.md | 0 {locale => pages}/zh-cn/get-involved/index.md | 0 {locale => pages}/zh-cn/index.md | 0 {locale => pages}/zh-tw/404.md | 0 {locale => pages}/zh-tw/about/governance.md | 0 {locale => pages}/zh-tw/about/index.md | 0 .../index.md => pages/zh-tw/docs/index.mdx | 12 +- {locale => pages}/zh-tw/download/current.md | 0 {locale => pages}/zh-tw/download/index.md | 0 .../zh-tw/download/package-manager.md | 0 {locale => pages}/zh-tw/download/releases.md | 0 .../zh-tw/get-involved/collab-summit.md | 0 .../zh-tw/get-involved/contribute.md | 0 {locale => pages}/zh-tw/get-involved/index.md | 0 {locale => pages}/zh-tw/index.md | 0 providers/layoutProvider.tsx | 67 + providers/localeProvider.tsx | 37 + providers/nodeDataProvider.tsx | 16 + providers/siteProvider.tsx | 12 + public/en/feed/.gitkeep | 1 + .../2018-nodejs-user-survey-raw-data.xlsx | Bin .../2018-nodejs-user-survey-report.pdf | Bin .../en/user-survey-report}/bootstrap.min.css | 0 .../en/user-survey-report}/bootstrap.min.js | 0 .../en/user-survey-report}/d3.v3.min.js | 0 .../en/user-survey-report}/data.js | 0 .../en/user-survey-report}/data.min.js | 0 .../en/user-survey-report}/full.js | 0 .../en/user-survey-report}/full.min.js | 0 .../en/user-survey-report}/graph.html | 0 .../en/user-survey-report}/graph.js | 0 .../en/user-survey-report}/graph.min.js | 0 .../images/charts/capture.png | Bin .../images/charts/capture11.png | Bin .../images/charts/capture12.png | Bin .../images/charts/capture14.png | Bin .../images/charts/capture15.png | Bin .../images/charts/capture18.png | Bin .../images/charts/capture1_1.png | Bin .../images/charts/capture1_2.png | Bin .../images/charts/capture2.png | Bin .../images/charts/capture20.png | Bin .../images/charts/capture21.png | Bin .../images/charts/capture22.png | Bin .../images/charts/capture23.png | Bin .../images/charts/capture24.png | Bin .../images/charts/capture25.png | Bin .../images/charts/capture26.png | Bin .../images/charts/capture27.png | Bin .../images/charts/capture28.png | Bin .../images/charts/capture29.png | Bin .../images/charts/capture3.png | Bin .../images/charts/capture30.png | Bin .../images/charts/capture31.png | Bin .../images/charts/capture32.png | Bin .../images/charts/capture33.png | Bin .../images/charts/capture34.png | Bin .../images/charts/capture35.png | Bin .../images/charts/capture36.png | Bin .../images/charts/capture38.png | Bin .../images/charts/capture39.png | Bin .../images/charts/capture40.png | Bin .../images/charts/capture41.png | Bin .../images/charts/capture42.png | Bin .../images/charts/capture43.png | Bin .../images/charts/capture45.png | Bin .../images/charts/capture46.png | Bin .../images/charts/capture47.png | Bin .../images/charts/capture5.png | Bin .../images/charts/capture6.png | Bin .../images/charts/capture8.png | Bin .../en/user-survey-report}/images/footer.png | Bin .../en/user-survey-report}/images/header.png | Bin .../images/logo_footer.png | Bin .../images/logo_header.png | Bin .../user-survey-report}/images/picture2.png | Bin .../user-survey-report}/images/picture3.png | Bin .../user-survey-report}/images/picture4.png | Bin .../user-survey-report}/images/picture5.png | Bin .../user-survey-report}/images/picture6.png | Bin .../images/twitter/chart1.png | Bin .../images/twitter/chart10.png | Bin .../images/twitter/chart11.png | Bin .../images/twitter/chart12.png | Bin .../images/twitter/chart13.png | Bin .../images/twitter/chart14.png | Bin .../images/twitter/chart15.png | Bin .../images/twitter/chart16.png | Bin .../images/twitter/chart17.png | Bin .../images/twitter/chart18.png | Bin .../images/twitter/chart19.png | Bin .../images/twitter/chart2.png | Bin .../images/twitter/chart20.png | Bin .../images/twitter/chart21.png | Bin .../images/twitter/chart22.png | Bin .../images/twitter/chart23.png | Bin .../images/twitter/chart24.png | Bin .../images/twitter/chart25.png | Bin .../images/twitter/chart26.png | Bin .../images/twitter/chart27.png | Bin .../images/twitter/chart28.png | Bin .../images/twitter/chart29.png | Bin .../images/twitter/chart3.png | Bin .../images/twitter/chart30.png | Bin .../images/twitter/chart31.png | Bin .../images/twitter/chart32.png | Bin .../images/twitter/chart33.png | Bin .../images/twitter/chart34.png | Bin .../images/twitter/chart35.png | Bin .../images/twitter/chart36.png | Bin .../images/twitter/chart37.png | Bin .../images/twitter/chart38.png | Bin .../images/twitter/chart39.png | Bin .../images/twitter/chart4.png | Bin .../images/twitter/chart40.png | Bin .../images/twitter/chart41.png | Bin .../images/twitter/chart42.png | Bin .../images/twitter/chart43.png | Bin .../images/twitter/chart44.png | Bin .../images/twitter/chart45.png | Bin .../images/twitter/chart5.png | Bin .../images/twitter/chart6.png | Bin .../images/twitter/chart7.png | Bin .../images/twitter/chart8.png | Bin .../images/twitter/chart9.png | Bin .../en/user-survey-report}/index.html | 0 .../en/user-survey-report}/jquery.min.js | 0 .../en/user-survey-report}/linksBE.csv | 0 .../en/user-survey-report}/linksFE.csv | 0 .../en/user-survey-report}/linksFS.csv | 0 .../en/user-survey-report}/nodes.csv | 0 .../en/user-survey-report}/style.css | 0 .../images/favicons => public}/manifest.json | 0 public/robots.txt | 13 + {static => public}/security.txt | 0 .../documents/2016-survey-infographic.png | Bin .../static}/documents/2016-survey-report.pdf | Bin .../foundation-visual-guidelines.pdf | Bin .../static}/documents/nodeconf.pdf | Bin .../static}/documents/trademark-policy.pdf | Bin .../blog/201609_lts_schedule_summary.gif | Bin .../static}/images/blog/module/bunyan.png | Bin .../XwrpFNICJ2-3000x3000.png | Bin .../bapm3fk8Ve-3000x3000.png | Bin .../xu1faVCq8p-3000x3000.png | Bin .../web-300x300.jpg | Bin .../static}/images/blog/release/lts.png | Bin .../evolving-the-node-js-brand/grid.png | Bin .../evolving-the-node-js-brand/network.png | Bin .../evolving-the-node-js-brand/node.png | Bin .../evolving-the-node-js-brand/nodejs.png | Bin .../tri-color-node.png | Bin .../ldapjs-a-reprise-of-ldap/uR16U.png | Bin .../d7c62f3e-d94c-11e5-8ff8-f32c74b13cc3.png | Bin .../static}/images/community-icons.png | Bin .../static}/images/dark-mode.svg | 0 .../docs/guides/diagnostics/_cursor.png | Bin .../docs/guides/diagnostics/compare.png | Bin .../diagnostics/heap-profiler-tutorial-1.png | Bin .../diagnostics/heap-profiler-tutorial-2.png | Bin .../diagnostics/heap-profiler-tutorial-3.png | Bin .../diagnostics/heap-profiler-tutorial-4.png | Bin .../diagnostics/heap-profiler-tutorial-5.png | Bin .../docs/guides/diagnostics/load-snapshot.png | Bin .../docs/guides/diagnostics/snapshot.png | Bin .../images/docs/guides/diagnostics/tools.png | Bin .../favicons/android-chrome-192x192.png | Bin .../favicons/android-chrome-512x512.png | Bin public/static/images/favicons/favicon.png | Bin 0 -> 1345 bytes .../static}/images/ghc-banner.png | Bin public/static/images/language-picker.svg | 9 + .../static}/images/light-mode.svg | 0 .../static}/images/logo-hexagon-card.png | Bin .../static}/images/logo-hexagon.png | Bin .../static}/images/logo-hexagon.svg | 0 .../static}/images/logo-light.png | Bin .../static}/images/logo-light.svg | 0 {static => public/static}/images/logo.png | Bin {static => public/static}/images/logo.svg | 0 .../static}/images/logos/js-black.eps | Bin .../static}/images/logos/js-black.svg | 0 .../static}/images/logos/js-green.svg | 0 .../static}/images/logos/node-favicon.png | Bin .../static}/images/logos/nodejs-black.eps | Bin .../static}/images/logos/nodejs-black.png | Bin .../static}/images/logos/nodejs-dark.eps | Bin .../static}/images/logos/nodejs-dark.png | Bin .../static}/images/logos/nodejs-green.eps | Bin .../static}/images/logos/nodejs-green.png | Bin .../static}/images/logos/nodejs-light.eps | Bin .../static}/images/logos/nodejs-new-black.svg | 0 .../images/logos/nodejs-new-pantone-black.svg | 0 .../images/logos/nodejs-new-pantone-white.svg | 0 .../static}/images/logos/nodejs-new-white.svg | 0 .../static}/images/logos/nodejs.png | Bin .../static}/images/node-cert-logo.png | Bin .../static}/images/nodejs-training.png | Bin .../static}/images/openjs_foundation-logo.svg | 0 public/static/js/legacyMain.js | 145 + {static => public/static}/legacy/README.md | 10 +- .../static}/legacy/images/anchor.png | Bin .../legacy/images/apple-touch-icon.png | Bin .../static}/legacy/images/close-downloads.png | Bin .../static}/legacy/images/community-icons.png | Bin .../static}/legacy/images/download-logo.png | Bin .../static}/legacy/images/ebay-logo.png | Bin .../static}/legacy/images/favicon.ico | Bin .../static}/legacy/images/footer-logo-alt.png | Bin .../static}/legacy/images/footer-logo.png | Bin .../static}/legacy/images/forkme.png | Bin .../static}/legacy/images/home-icons.png | Bin .../static}/legacy/images/icons-interior.png | Bin .../static}/legacy/images/icons.png | Bin .../images/joyent-logo_orange_nodeorg-01.png | Bin .../static}/legacy/images/linkedin-logo.png | Bin .../static}/legacy/images/logo-header.png | Bin .../static}/legacy/images/logo-light.png | Bin .../static}/legacy/images/logo-light.svg | 0 .../static}/legacy/images/logo.png | Bin .../static}/legacy/images/logo.svg | 0 .../static}/legacy/images/microsoft-logo.png | Bin .../legacy/images/not-invented-here.png | Bin .../static}/legacy/images/ryan-speaker.jpg | Bin .../static}/legacy/images/sponsored.png | Bin .../static}/legacy/images/stripe.png | Bin .../static}/legacy/images/twitter-bird.png | Bin .../static}/legacy/images/walmart-thumb.jpg | Bin .../static}/legacy/images/yahoo-logo.png | Bin {static => public/static}/legacy/lfcollab.css | 0 {static => public/static}/legacy/pipe.css | 0 .../static}/legacy/sh_javascript.min.js | 0 {static => public/static}/legacy/sh_main.js | 0 .../static}/legacy/sh_vim-dark.css | 0 scripts/helpers/apidocslink.js | 21 - scripts/helpers/betweenDate.js | 27 - scripts/helpers/changeloglink.js | 20 - scripts/helpers/equals.js | 5 - scripts/helpers/json.js | 3 - scripts/helpers/latestversion.js | 28 - scripts/helpers/majorapidocslink.js | 8 - scripts/helpers/release-schedule.js | 63 - scripts/helpers/startswith.js | 5 - scripts/helpers/strftime.js | 20 - scripts/helpers/stripv.js | 3 - scripts/load-versions.js | 24 - scripts/next-data/_helpers.mjs | 14 + scripts/next-data/generatePreBuildFiles.mjs | 58 + scripts/next-data/getBlogData.mjs | 127 + scripts/next-data/getLocalisationData.mjs | 48 + scripts/next-data/getNodeVersionData.mjs | 34 + scripts/plugins/anchor-markdown-headings.js | 57 - scripts/plugins/debug.js | 15 - scripts/plugins/githubLinks.js | 68 - scripts/plugins/hbsReg.js | 35 - scripts/plugins/navigation.js | 48 - scripts/plugins/scriptReg.js | 26 - scripts/plugins/withPreserveLocale.js | 27 - .../downloadsTable.mjs} | 100 +- .../index.mjs} | 196 +- .../template.hbs} | 6 +- scripts/vnu-jar.js | 50 - server.js | 173 - site.json | 42 + source/nodejsVersions.md | 21 - source/schedule.json | 65 - source/versions.json | 6284 ------ static/images/favicons/apple-touch-icon.png | Bin 3987 -> 0 bytes static/images/favicons/favicon-16x16.png | Bin 585 -> 0 bytes static/images/favicons/favicon-32x32.png | Bin 1180 -> 0 bytes static/images/favicons/favicon.ico | Bin 15086 -> 0 bytes static/images/favicons/safari-pinned-tab.svg | 1 - static/js/main.js | 161 - static/js/previousVersion.js | 15 - static/js/themeSwitcher.js | 20 - static/robots.txt | 6 - {layouts/css => styles}/_base.scss | 35 +- {layouts/css => styles}/_utils.scss | 12 +- {layouts/css => styles}/_variables.scss | 8 +- .../css => styles}/layout/_dark-theme.scss | 13 +- {layouts/css => styles}/layout/_grid.scss | 4 +- {layouts/css => styles}/layout/_lists.scss | 4 +- {layouts/css => styles}/layout/_main.scss | 0 .../css => styles}/layout/_sticky-footer.scss | 4 +- .../page-modules/_anchorLinks.scss | 10 +- .../page-modules/_blog-index.scss | 6 +- .../page-modules/_blog-post.scss | 2 +- .../page-modules/_download.scss | 46 +- .../css => styles}/page-modules/_footer.scss | 2 +- .../css => styles}/page-modules/_header.scss | 88 +- .../css => styles}/page-modules/_home.scss | 110 +- .../page-modules/_jsfoundation.scss | 22 +- .../page-modules/_prev-next-navigation.scss | 2 +- .../page-modules/_scrollToTop.scss | 17 +- {layouts/css => styles}/styles.scss | 69 +- .../css => styles}/vendor/prism-tomorrow.css | 24 +- tests/scripts/CHANGELOG.fixture.legacy.md | 343 - tests/scripts/CHANGELOG.fixture.md | 1669 -- .../scripts/CHANGELOG.fixture.withconsole.md | 56 - tests/scripts/anchor-mardown-headings.test.js | 132 - tests/scripts/latestversion.test.js | 65 - tests/scripts/release-post.test.js | 370 - theme.tsx | 57 + tsconfig.json | 29 + types/blog.ts | 14 + types/config.ts | 26 + types/features.ts | 14 + types/frontmatter.ts | 27 + types/i18n.ts | 15 + types/index.ts | 24 + types/layouts.ts | 13 + types/navigation.ts | 9 + types/nodeVersions.ts | 20 + util/dateIsBetween.ts | 13 + util/formatTime.ts | 4 + util/getNodeApiLink.ts | 15 + util/getNodeJsChangelog.ts | 24 + util/getTimeComponent.tsx | 7 + util/linkWithLocale.ts | 4 + util/sourceSansPro.ts | 9 + 1641 files changed, 11742 insertions(+), 35865 deletions(-) delete mode 100644 .mailmap create mode 100644 .nvmrc create mode 100644 .prettierignore create mode 100644 .prettierrc delete mode 100644 .prettierrc.json delete mode 100644 .remarkignore delete mode 100755 build.js create mode 100644 components/AnchoredHeading.tsx create mode 100644 components/Docs/NodeApiVersionLinks.tsx create mode 100644 components/Downloads/DownloadList.tsx create mode 100644 components/Downloads/DownloadReleasesTable.tsx create mode 100644 components/Downloads/PrimaryDownloadMatrix.tsx create mode 100644 components/Downloads/SecondaryDownloadMatrix.tsx create mode 100644 components/Footer.tsx create mode 100644 components/Header.tsx create mode 100644 components/Home/Banner.tsx create mode 100644 components/Home/HomeDownloadButton.tsx create mode 100644 components/HtmlHead.tsx create mode 100644 components/LocalisedLink.tsx create mode 100644 components/Pagination.tsx create mode 100644 components/SideNavigation.tsx delete mode 100644 external/survey-2018/package-lock.json delete mode 100644 external/survey-2018/package.json create mode 100644 global.d.ts create mode 100644 hooks/useLocale.ts create mode 100644 hooks/useNavigation.tsx create mode 100644 hooks/useNextraContext.ts create mode 100644 hooks/useNodeData.ts create mode 100644 hooks/useSiteConfig.ts create mode 100644 i18n/config.json create mode 100644 i18n/locales/ar.json create mode 100644 i18n/locales/ca.json create mode 100644 i18n/locales/de.json create mode 100644 i18n/locales/en.json create mode 100644 i18n/locales/es.json create mode 100644 i18n/locales/fa.json create mode 100644 i18n/locales/fr.json create mode 100644 i18n/locales/gl.json create mode 100644 i18n/locales/it.json create mode 100644 i18n/locales/ja.json create mode 100644 i18n/locales/ka.json create mode 100644 i18n/locales/ko.json create mode 100644 i18n/locales/nl.json create mode 100644 i18n/locales/pt-br.json create mode 100644 i18n/locales/ro.json create mode 100644 i18n/locales/ru.json create mode 100644 i18n/locales/tr.json create mode 100644 i18n/locales/uk.json create mode 100644 i18n/locales/zh-cn.json create mode 100644 i18n/locales/zh-tw.json create mode 100644 jsconfig.json create mode 100644 layouts/AboutLayout.tsx create mode 100644 layouts/BaseLayout.tsx create mode 100644 layouts/BlogIndexLayout.tsx create mode 100644 layouts/BlogPostLayout.tsx create mode 100644 layouts/CategoryIndexLayout.tsx create mode 100644 layouts/ContributeLayout.tsx create mode 100644 layouts/DefaultLayout.tsx create mode 100644 layouts/DocsLayout.tsx create mode 100644 layouts/DownloadCurrentLayout.tsx create mode 100644 layouts/DownloadLayout.tsx create mode 100644 layouts/DownloadReleasesLayout.tsx create mode 100644 layouts/IndexLayout.tsx delete mode 100644 layouts/about-release-schedule.hbs delete mode 100644 layouts/about.hbs delete mode 100644 layouts/black-lives-matter.hbs delete mode 100644 layouts/blog-index.hbs delete mode 100644 layouts/blog-post.hbs delete mode 100644 layouts/category-index.hbs delete mode 100644 layouts/contribute.hbs delete mode 100644 layouts/css/page-modules/_release-schedule.scss delete mode 100644 layouts/docs.hbs delete mode 100644 layouts/download-current.hbs delete mode 100644 layouts/download-releases.hbs delete mode 100644 layouts/download.hbs delete mode 100644 layouts/index.hbs delete mode 100644 layouts/knowledge-base-index.hbs delete mode 100644 layouts/knowledge-post.hbs delete mode 100644 layouts/page.hbs delete mode 100644 layouts/partials/blm-footer.hbs delete mode 100644 layouts/partials/blm-header.hbs delete mode 100644 layouts/partials/blm-html-head.hbs delete mode 100644 layouts/partials/blm-styles.hbs delete mode 100644 layouts/partials/download-list.hbs delete mode 100644 layouts/partials/favicons.hbs delete mode 100644 layouts/partials/footer.hbs delete mode 100644 layouts/partials/header.hbs delete mode 100644 layouts/partials/html-head.hbs delete mode 100644 layouts/partials/navigation.hbs delete mode 100644 layouts/partials/prev-next-navigation.hbs delete mode 100644 layouts/partials/primary-download-matrix.hbs delete mode 100644 layouts/partials/secondary-download-matrix.hbs delete mode 100644 locale/ar/site.json delete mode 100644 locale/ca/site.json delete mode 100644 locale/de/site.json delete mode 100644 locale/en/black-lives-matter.md delete mode 100644 locale/en/site.json delete mode 100644 locale/es/docs/guides/abi-stability.md delete mode 100644 locale/es/docs/guides/anatomy-of-an-http-transaction.md delete mode 100644 locale/es/docs/guides/backpressuring-in-streams.md delete mode 100644 locale/es/docs/guides/blocking-vs-non-blocking.md delete mode 100644 locale/es/docs/guides/buffer-constructor-deprecation.md delete mode 100644 locale/es/docs/guides/debugging-getting-started.md delete mode 100644 locale/es/docs/guides/diagnostics-flamegraph.md delete mode 100644 locale/es/docs/guides/domain-postmortem.md delete mode 100644 locale/es/docs/guides/dont-block-the-event-loop.md delete mode 100644 locale/es/docs/guides/event-loop-timers-and-nexttick.md delete mode 100644 locale/es/docs/guides/getting-started-guide.md delete mode 100644 locale/es/docs/guides/index.md delete mode 100644 locale/es/docs/guides/nodejs-docker-webapp.md delete mode 100644 locale/es/docs/guides/publishing-napi-modules.md delete mode 100644 locale/es/docs/guides/security/index.md delete mode 100644 locale/es/docs/guides/simple-profiling.md delete mode 100644 locale/es/docs/guides/timers-in-node.md delete mode 100644 locale/es/docs/guides/working-with-different-filesystems.md delete mode 100644 locale/es/site.json delete mode 100644 locale/fa/download/releases.md delete mode 100644 locale/fa/site.json delete mode 100644 locale/fr/docs/es6.md delete mode 100644 locale/fr/docs/guides/anatomy-of-an-http-transaction.md delete mode 100644 locale/fr/docs/guides/backpressuring-in-streams.md delete mode 100644 locale/fr/docs/guides/blocking-vs-non-blocking.md delete mode 100644 locale/fr/docs/guides/buffer-constructor-deprecation.md delete mode 100644 locale/fr/docs/guides/debugging-getting-started.md delete mode 100644 locale/fr/docs/guides/diagnostics-flamegraph.md delete mode 100644 locale/fr/docs/guides/domain-postmortem.md delete mode 100644 locale/fr/docs/guides/getting-started-guide.md delete mode 100644 locale/fr/docs/guides/index.md delete mode 100644 locale/fr/docs/guides/nodejs-docker-webapp.md delete mode 100644 locale/fr/docs/guides/publishing-napi-modules.md delete mode 100644 locale/fr/docs/guides/simple-profiling.md delete mode 100644 locale/fr/docs/guides/timers-in-node.md delete mode 100644 locale/fr/docs/guides/working-with-different-filesystems.md delete mode 100644 locale/fr/docs/meta/topics/dependencies.md delete mode 100644 locale/fr/site.json delete mode 100644 locale/gl/site.json delete mode 100644 locale/it/site.json delete mode 100644 locale/ja/docs/index.md delete mode 100644 locale/ja/site.json delete mode 100644 locale/ka/site.json delete mode 100644 locale/ko/docs/index.md delete mode 100644 locale/ko/site.json delete mode 100644 locale/nl/site.json delete mode 100644 locale/pt-br/site.json delete mode 100644 locale/ro/docs/es6.md delete mode 100644 locale/ro/docs/guides/abi-stability.md delete mode 100644 locale/ro/docs/guides/anatomy-of-an-http-transaction.md delete mode 100644 locale/ro/docs/guides/backpressuring-in-streams.md delete mode 100644 locale/ro/docs/guides/blocking-vs-non-blocking.md delete mode 100644 locale/ro/docs/guides/buffer-constructor-deprecation.md delete mode 100644 locale/ro/docs/guides/debugging-getting-started.md delete mode 100644 locale/ro/docs/guides/diagnostics-flamegraph.md delete mode 100644 locale/ro/docs/guides/domain-postmortem.md delete mode 100644 locale/ro/docs/guides/dont-block-the-event-loop.md delete mode 100644 locale/ro/docs/guides/event-loop-timers-and-nexttick.md delete mode 100644 locale/ro/docs/guides/getting-started-guide.md delete mode 100644 locale/ro/docs/guides/index.md delete mode 100644 locale/ro/docs/guides/nodejs-docker-webapp.md delete mode 100644 locale/ro/docs/guides/publishing-napi-modules.md delete mode 100644 locale/ro/docs/guides/simple-profiling.md delete mode 100644 locale/ro/docs/guides/timers-in-node.md delete mode 100644 locale/ro/docs/guides/working-with-different-filesystems.md delete mode 100644 locale/ro/docs/meta/topics/dependencies.md delete mode 100644 locale/ro/site.json delete mode 100644 locale/ru/site.json delete mode 100644 locale/tr/site.json delete mode 100644 locale/uk/site.json delete mode 100644 locale/zh-cn/site.json delete mode 100644 locale/zh-tw/site.json create mode 100644 navigation.json create mode 100644 next-env.d.ts create mode 100644 next-sitemap.config.js create mode 100644 next.config.mjs create mode 100644 next.data.mjs create mode 100644 pages/_app.mdx create mode 100644 pages/_document.tsx rename {locale => pages}/ar/404.md (100%) rename {locale => pages}/ar/about/governance.md (100%) rename {locale => pages}/ar/about/index.md (100%) rename {locale => pages}/ar/docs/es6.md (100%) rename {locale => pages}/ar/docs/guides/abi-stability.md (100%) rename {locale => pages}/ar/docs/guides/anatomy-of-an-http-transaction.md (100%) rename {locale => pages}/ar/docs/guides/debugging-getting-started.md (100%) rename {locale => pages}/ar/docs/guides/getting-started-guide.md (100%) rename {locale => pages}/ar/docs/guides/index.md (100%) rename {locale => pages}/ar/docs/guides/publishing-napi-modules.md (100%) rename locale/ar/docs/index.md => pages/ar/docs/index.mdx (88%) rename {locale => pages}/ar/docs/meta/topics/dependencies.md (100%) rename {locale => pages}/ar/download/current.md (100%) rename {locale => pages}/ar/download/index.md (100%) rename {locale => pages}/ar/download/package-manager.md (100%) rename {locale => pages}/ar/download/releases.md (100%) rename {locale => pages}/ar/get-involved/collab-summit.md (100%) rename {locale => pages}/ar/get-involved/contribute.md (100%) rename {locale => pages}/ar/get-involved/index.md (100%) rename {locale => pages}/ar/index.md (100%) rename {locale => pages}/ca/404.md (100%) rename {locale => pages}/ca/about/index.md (100%) rename locale/ca/docs/index.md => pages/ca/docs/index.mdx (87%) rename {locale => pages}/ca/download/current.md (100%) rename {locale => pages}/ca/download/index.md (100%) rename {locale => pages}/ca/get-involved/index.md (100%) rename {locale => pages}/ca/index.md (100%) rename {locale => pages}/de/404.md (100%) rename {locale => pages}/de/about/index.md (100%) rename locale/de/docs/index.md => pages/de/docs/index.mdx (89%) rename {locale => pages}/de/download/current.md (100%) rename {locale => pages}/de/download/index.md (100%) rename {locale => pages}/de/index.md (100%) rename {locale => pages}/en/404.md (100%) rename {locale => pages}/en/about/governance.md (100%) rename {locale => pages}/en/about/index.md (100%) rename {locale => pages}/en/blog/advisory-board/advisory-board-update.md (100%) rename {locale => pages}/en/blog/advisory-board/index.md (100%) rename {locale => pages}/en/blog/advisory-board/listening-to-the-community.md (100%) rename {locale => pages}/en/blog/announcements/adjusted-release-schedule-covid.md (100%) rename {locale => pages}/en/blog/announcements/apigee-rising-stack-yahoo.md (100%) rename {locale => pages}/en/blog/announcements/appdynamics-newrelic-opbeat-sphinx.md (100%) rename {locale => pages}/en/blog/announcements/cars-dynatrace.md (100%) rename {locale => pages}/en/blog/announcements/foundation-advances-growth.md (100%) rename {locale => pages}/en/blog/announcements/foundation-elects-board.md (100%) rename {locale => pages}/en/blog/announcements/foundation-express-news.md (100%) rename {locale => pages}/en/blog/announcements/foundation-v4-announce.md (100%) rename {locale => pages}/en/blog/announcements/index.md (100%) rename {locale => pages}/en/blog/announcements/interactive-2015-keynotes.md (100%) rename {locale => pages}/en/blog/announcements/interactive-2015-programming.md (100%) rename {locale => pages}/en/blog/announcements/interactive-2015.md (100%) rename {locale => pages}/en/blog/announcements/interactive-2016-ams.md (100%) rename {locale => pages}/en/blog/announcements/interactive-2016-north-america-schedule.md (100%) rename {locale => pages}/en/blog/announcements/nodejs-certified-developer-program.md (100%) rename {locale => pages}/en/blog/announcements/nodejs-foundation-momentum-release.md (100%) rename {locale => pages}/en/blog/announcements/nodejs-foundation-survey.md (100%) rename {locale => pages}/en/blog/announcements/nodejs-security-project.md (100%) rename {locale => pages}/en/blog/announcements/nodejs-trademarks-transferred-to-openjs-foundation.md (100%) rename {locale => pages}/en/blog/announcements/nodejs16-eol.md (100%) rename {locale => pages}/en/blog/announcements/retiring-the-node-js-community-committee.md (100%) rename {locale => pages}/en/blog/announcements/v18-release-announce.md (100%) rename {locale => pages}/en/blog/announcements/v19-release-announce.md (100%) rename {locale => pages}/en/blog/announcements/v6-release.md (100%) rename {locale => pages}/en/blog/announcements/welcome-google.md (100%) rename {locale => pages}/en/blog/announcements/welcome-redhat.md (100%) rename {locale => pages}/en/blog/community/2017-election.md (100%) rename {locale => pages}/en/blog/community/building-nodejs-together.md (100%) rename {locale => pages}/en/blog/community/foundation-benefits-all.md (100%) rename {locale => pages}/en/blog/community/index.md (100%) rename {locale => pages}/en/blog/community/individual-membership.md (100%) rename {locale => pages}/en/blog/community/next-chapter.md (100%) rename {locale => pages}/en/blog/community/node-leaders-building-open-neutral-foundation.md (100%) rename {locale => pages}/en/blog/community/node-v5.md (100%) rename {locale => pages}/en/blog/community/quality-with-speed.md (100%) rename {locale => pages}/en/blog/community/transitions.md (100%) rename {locale => pages}/en/blog/community/update-v8-5.4.md (100%) rename {locale => pages}/en/blog/community/v5-to-v7.md (100%) rename {locale => pages}/en/blog/feature/index.md (100%) rename {locale => pages}/en/blog/feature/streams2.md (100%) rename {locale => pages}/en/blog/index.md (100%) rename {locale => pages}/en/blog/module/index.md (100%) rename {locale => pages}/en/blog/module/multi-server-continuous-deployment-with-fleet.md (100%) rename {locale => pages}/en/blog/module/service-logging-in-json-with-bunyan.md (100%) rename {locale => pages}/en/blog/nodejs-road-ahead.md (100%) rename {locale => pages}/en/blog/npm/2013-outage-postmortem.md (100%) rename {locale => pages}/en/blog/npm/index.md (100%) rename {locale => pages}/en/blog/npm/managing-node-js-dependencies-with-shrinkwrap.md (100%) rename {locale => pages}/en/blog/npm/npm-1-0-global-vs-local-installation.md (100%) rename {locale => pages}/en/blog/npm/npm-1-0-link.md (100%) rename {locale => pages}/en/blog/npm/npm-1-0-released.md (100%) rename {locale => pages}/en/blog/npm/npm-1-0-the-new-ls.md (100%) rename locale/en/blog/npm/peer-dependencies.md => pages/en/blog/npm/peer-dependencies.mdx (88%) rename {locale => pages}/en/blog/release/index.md (100%) rename {locale => pages}/en/blog/release/v0.10.0.md (100%) rename {locale => pages}/en/blog/release/v0.10.1.md (100%) rename {locale => pages}/en/blog/release/v0.10.10.md (100%) rename {locale => pages}/en/blog/release/v0.10.11.md (100%) rename {locale => pages}/en/blog/release/v0.10.12.md (100%) rename {locale => pages}/en/blog/release/v0.10.13.md (100%) rename {locale => pages}/en/blog/release/v0.10.14.md (100%) rename {locale => pages}/en/blog/release/v0.10.15.md (100%) rename {locale => pages}/en/blog/release/v0.10.16.md (100%) rename {locale => pages}/en/blog/release/v0.10.17.md (100%) rename {locale => pages}/en/blog/release/v0.10.18.md (100%) rename {locale => pages}/en/blog/release/v0.10.19.md (100%) rename {locale => pages}/en/blog/release/v0.10.2.md (100%) rename {locale => pages}/en/blog/release/v0.10.20.md (100%) rename {locale => pages}/en/blog/release/v0.10.21.md (100%) rename {locale => pages}/en/blog/release/v0.10.22.md (100%) rename {locale => pages}/en/blog/release/v0.10.23.md (100%) rename {locale => pages}/en/blog/release/v0.10.24.md (100%) rename {locale => pages}/en/blog/release/v0.10.25.md (100%) rename {locale => pages}/en/blog/release/v0.10.26.md (100%) rename {locale => pages}/en/blog/release/v0.10.27.md (100%) rename {locale => pages}/en/blog/release/v0.10.28.md (100%) rename {locale => pages}/en/blog/release/v0.10.29.md (100%) rename {locale => pages}/en/blog/release/v0.10.3.md (100%) rename {locale => pages}/en/blog/release/v0.10.30.md (100%) rename {locale => pages}/en/blog/release/v0.10.31.md (100%) rename {locale => pages}/en/blog/release/v0.10.32.md (100%) rename {locale => pages}/en/blog/release/v0.10.33.md (100%) rename {locale => pages}/en/blog/release/v0.10.34.md (100%) rename {locale => pages}/en/blog/release/v0.10.35.md (100%) rename {locale => pages}/en/blog/release/v0.10.36.md (100%) rename {locale => pages}/en/blog/release/v0.10.37.md (100%) rename {locale => pages}/en/blog/release/v0.10.38.md (100%) rename {locale => pages}/en/blog/release/v0.10.39.md (100%) rename {locale => pages}/en/blog/release/v0.10.4.md (100%) rename {locale => pages}/en/blog/release/v0.10.40.md (100%) rename {locale => pages}/en/blog/release/v0.10.41.md (100%) rename {locale => pages}/en/blog/release/v0.10.42.md (100%) rename {locale => pages}/en/blog/release/v0.10.43.md (100%) rename {locale => pages}/en/blog/release/v0.10.44.md (100%) rename {locale => pages}/en/blog/release/v0.10.45.md (100%) rename {locale => pages}/en/blog/release/v0.10.46.md (100%) rename {locale => pages}/en/blog/release/v0.10.47.md (100%) rename {locale => pages}/en/blog/release/v0.10.48.md (100%) rename {locale => pages}/en/blog/release/v0.10.5.md (100%) rename {locale => pages}/en/blog/release/v0.10.6.md (100%) rename {locale => pages}/en/blog/release/v0.10.7.md (100%) rename {locale => pages}/en/blog/release/v0.10.8.md (100%) rename {locale => pages}/en/blog/release/v0.10.9.md (100%) rename {locale => pages}/en/blog/release/v0.11.0.md (100%) rename {locale => pages}/en/blog/release/v0.11.1.md (100%) rename {locale => pages}/en/blog/release/v0.11.10.md (100%) rename {locale => pages}/en/blog/release/v0.11.11.md (100%) rename {locale => pages}/en/blog/release/v0.11.12.md (100%) rename {locale => pages}/en/blog/release/v0.11.14.md (100%) rename {locale => pages}/en/blog/release/v0.11.15.md (100%) rename {locale => pages}/en/blog/release/v0.11.16.md (100%) rename {locale => pages}/en/blog/release/v0.11.2.md (100%) rename {locale => pages}/en/blog/release/v0.11.3.md (100%) rename {locale => pages}/en/blog/release/v0.11.4.md (100%) rename {locale => pages}/en/blog/release/v0.11.5.md (100%) rename {locale => pages}/en/blog/release/v0.11.6.md (100%) rename {locale => pages}/en/blog/release/v0.11.7.md (100%) rename {locale => pages}/en/blog/release/v0.11.8.md (100%) rename {locale => pages}/en/blog/release/v0.11.9.md (100%) rename {locale => pages}/en/blog/release/v0.12.0.md (100%) rename {locale => pages}/en/blog/release/v0.12.1.md (100%) rename {locale => pages}/en/blog/release/v0.12.10.md (100%) rename {locale => pages}/en/blog/release/v0.12.11.md (100%) rename {locale => pages}/en/blog/release/v0.12.12.md (100%) rename {locale => pages}/en/blog/release/v0.12.13.md (100%) rename {locale => pages}/en/blog/release/v0.12.14.md (100%) rename {locale => pages}/en/blog/release/v0.12.15.md (100%) rename {locale => pages}/en/blog/release/v0.12.16.md (100%) rename {locale => pages}/en/blog/release/v0.12.17.md (100%) rename {locale => pages}/en/blog/release/v0.12.18.md (100%) rename {locale => pages}/en/blog/release/v0.12.2.md (100%) rename {locale => pages}/en/blog/release/v0.12.3.md (100%) rename {locale => pages}/en/blog/release/v0.12.4.md (100%) rename {locale => pages}/en/blog/release/v0.12.5.md (100%) rename {locale => pages}/en/blog/release/v0.12.6.md (100%) rename {locale => pages}/en/blog/release/v0.12.7.md (100%) rename {locale => pages}/en/blog/release/v0.12.8.md (100%) rename {locale => pages}/en/blog/release/v0.12.9.md (100%) rename {locale => pages}/en/blog/release/v0.4.10.md (100%) rename {locale => pages}/en/blog/release/v0.4.11.md (100%) rename {locale => pages}/en/blog/release/v0.4.12.md (100%) rename {locale => pages}/en/blog/release/v0.4.3.md (100%) rename {locale => pages}/en/blog/release/v0.4.4.md (100%) rename {locale => pages}/en/blog/release/v0.4.5.md (100%) rename {locale => pages}/en/blog/release/v0.4.6.md (100%) rename {locale => pages}/en/blog/release/v0.4.7.md (100%) rename {locale => pages}/en/blog/release/v0.4.8.md (100%) rename {locale => pages}/en/blog/release/v0.4.9.md (100%) rename {locale => pages}/en/blog/release/v0.5.0.md (100%) rename {locale => pages}/en/blog/release/v0.5.1.md (100%) rename {locale => pages}/en/blog/release/v0.5.10.md (100%) rename {locale => pages}/en/blog/release/v0.5.2.md (100%) rename {locale => pages}/en/blog/release/v0.5.3.md (100%) rename {locale => pages}/en/blog/release/v0.5.4.md (100%) rename {locale => pages}/en/blog/release/v0.5.5.md (100%) rename {locale => pages}/en/blog/release/v0.5.6.md (100%) rename {locale => pages}/en/blog/release/v0.5.7.md (100%) rename {locale => pages}/en/blog/release/v0.5.8.md (100%) rename {locale => pages}/en/blog/release/v0.5.9.md (100%) rename {locale => pages}/en/blog/release/v0.6.0.md (100%) rename {locale => pages}/en/blog/release/v0.6.1.md (100%) rename {locale => pages}/en/blog/release/v0.6.10.md (100%) rename {locale => pages}/en/blog/release/v0.6.11.md (100%) rename {locale => pages}/en/blog/release/v0.6.12.md (100%) rename {locale => pages}/en/blog/release/v0.6.13.md (100%) rename {locale => pages}/en/blog/release/v0.6.14.md (100%) rename {locale => pages}/en/blog/release/v0.6.15.md (100%) rename {locale => pages}/en/blog/release/v0.6.16.md (100%) rename {locale => pages}/en/blog/release/v0.6.17.md (100%) rename {locale => pages}/en/blog/release/v0.6.18.md (100%) rename {locale => pages}/en/blog/release/v0.6.19.md (100%) rename {locale => pages}/en/blog/release/v0.6.2.md (100%) rename {locale => pages}/en/blog/release/v0.6.20.md (100%) rename {locale => pages}/en/blog/release/v0.6.21.md (100%) rename {locale => pages}/en/blog/release/v0.6.3.md (100%) rename {locale => pages}/en/blog/release/v0.6.4.md (100%) rename {locale => pages}/en/blog/release/v0.6.5.md (100%) rename {locale => pages}/en/blog/release/v0.6.6.md (100%) rename {locale => pages}/en/blog/release/v0.6.7.md (100%) rename {locale => pages}/en/blog/release/v0.6.8.md (100%) rename {locale => pages}/en/blog/release/v0.6.9.md (100%) rename {locale => pages}/en/blog/release/v0.7.0.md (100%) rename {locale => pages}/en/blog/release/v0.7.1.md (100%) rename {locale => pages}/en/blog/release/v0.7.10.md (100%) rename {locale => pages}/en/blog/release/v0.7.11.md (100%) rename {locale => pages}/en/blog/release/v0.7.12.md (100%) rename {locale => pages}/en/blog/release/v0.7.2.md (100%) rename {locale => pages}/en/blog/release/v0.7.3.md (100%) rename {locale => pages}/en/blog/release/v0.7.4.md (100%) rename {locale => pages}/en/blog/release/v0.7.5.md (100%) rename {locale => pages}/en/blog/release/v0.7.6.md (100%) rename {locale => pages}/en/blog/release/v0.7.7.md (100%) rename {locale => pages}/en/blog/release/v0.7.8.md (100%) rename {locale => pages}/en/blog/release/v0.7.9.md (100%) rename {locale => pages}/en/blog/release/v0.8.0.md (100%) rename {locale => pages}/en/blog/release/v0.8.1.md (100%) rename {locale => pages}/en/blog/release/v0.8.10.md (100%) rename {locale => pages}/en/blog/release/v0.8.11.md (100%) rename {locale => pages}/en/blog/release/v0.8.12.md (100%) rename {locale => pages}/en/blog/release/v0.8.13.md (100%) rename {locale => pages}/en/blog/release/v0.8.14.md (100%) rename {locale => pages}/en/blog/release/v0.8.15.md (100%) rename {locale => pages}/en/blog/release/v0.8.16.md (100%) rename {locale => pages}/en/blog/release/v0.8.17.md (100%) rename {locale => pages}/en/blog/release/v0.8.18.md (100%) rename {locale => pages}/en/blog/release/v0.8.19.md (100%) rename {locale => pages}/en/blog/release/v0.8.2.md (100%) rename {locale => pages}/en/blog/release/v0.8.20.md (100%) rename {locale => pages}/en/blog/release/v0.8.21.md (100%) rename {locale => pages}/en/blog/release/v0.8.22.md (100%) rename {locale => pages}/en/blog/release/v0.8.23.md (100%) rename {locale => pages}/en/blog/release/v0.8.24.md (100%) rename {locale => pages}/en/blog/release/v0.8.25.md (100%) rename {locale => pages}/en/blog/release/v0.8.26.md (100%) rename {locale => pages}/en/blog/release/v0.8.27.md (100%) rename {locale => pages}/en/blog/release/v0.8.28.md (100%) rename {locale => pages}/en/blog/release/v0.8.3.md (100%) rename {locale => pages}/en/blog/release/v0.8.4.md (100%) rename {locale => pages}/en/blog/release/v0.8.5.md (100%) rename {locale => pages}/en/blog/release/v0.8.6.md (100%) rename {locale => pages}/en/blog/release/v0.8.7.md (100%) rename {locale => pages}/en/blog/release/v0.8.8.md (100%) rename {locale => pages}/en/blog/release/v0.8.9.md (100%) rename {locale => pages}/en/blog/release/v0.9.0.md (100%) rename {locale => pages}/en/blog/release/v0.9.1.md (100%) rename {locale => pages}/en/blog/release/v0.9.10.md (100%) rename {locale => pages}/en/blog/release/v0.9.11.md (100%) rename {locale => pages}/en/blog/release/v0.9.12.md (100%) rename {locale => pages}/en/blog/release/v0.9.2.md (100%) rename {locale => pages}/en/blog/release/v0.9.3.md (100%) rename {locale => pages}/en/blog/release/v0.9.4.md (100%) rename {locale => pages}/en/blog/release/v0.9.5.md (100%) rename {locale => pages}/en/blog/release/v0.9.6.md (100%) rename {locale => pages}/en/blog/release/v0.9.7.md (100%) rename {locale => pages}/en/blog/release/v0.9.8.md (100%) rename {locale => pages}/en/blog/release/v10.0.0.md (100%) rename {locale => pages}/en/blog/release/v10.1.0.md (100%) rename {locale => pages}/en/blog/release/v10.10.0.md (100%) rename {locale => pages}/en/blog/release/v10.11.0.md (100%) rename {locale => pages}/en/blog/release/v10.12.0.md (100%) rename {locale => pages}/en/blog/release/v10.13.0.md (100%) rename {locale => pages}/en/blog/release/v10.14.0.md (100%) rename {locale => pages}/en/blog/release/v10.14.1.md (100%) rename {locale => pages}/en/blog/release/v10.14.2.md (100%) rename {locale => pages}/en/blog/release/v10.15.0.md (100%) rename {locale => pages}/en/blog/release/v10.15.1.md (100%) rename {locale => pages}/en/blog/release/v10.15.2.md (100%) rename {locale => pages}/en/blog/release/v10.15.3.md (100%) rename {locale => pages}/en/blog/release/v10.16.0.md (100%) rename {locale => pages}/en/blog/release/v10.16.1.md (100%) rename {locale => pages}/en/blog/release/v10.16.2.md (100%) rename {locale => pages}/en/blog/release/v10.16.3.md (100%) rename {locale => pages}/en/blog/release/v10.17.0.md (100%) rename {locale => pages}/en/blog/release/v10.18.0.md (100%) rename {locale => pages}/en/blog/release/v10.18.1.md (100%) rename {locale => pages}/en/blog/release/v10.19.0.md (100%) rename {locale => pages}/en/blog/release/v10.2.0.md (100%) rename {locale => pages}/en/blog/release/v10.2.1.md (100%) rename {locale => pages}/en/blog/release/v10.20.0.md (100%) rename {locale => pages}/en/blog/release/v10.20.1.md (100%) rename {locale => pages}/en/blog/release/v10.21.0.md (100%) rename {locale => pages}/en/blog/release/v10.22.0.md (100%) rename {locale => pages}/en/blog/release/v10.22.1.md (100%) rename {locale => pages}/en/blog/release/v10.23.0.md (100%) rename {locale => pages}/en/blog/release/v10.23.1.md (100%) rename {locale => pages}/en/blog/release/v10.23.2.md (100%) rename {locale => pages}/en/blog/release/v10.23.3.md (100%) rename {locale => pages}/en/blog/release/v10.24.0.md (100%) rename {locale => pages}/en/blog/release/v10.24.1.md (100%) rename {locale => pages}/en/blog/release/v10.3.0.md (100%) rename {locale => pages}/en/blog/release/v10.4.0.md (100%) rename {locale => pages}/en/blog/release/v10.4.1.md (100%) rename {locale => pages}/en/blog/release/v10.5.0.md (100%) rename {locale => pages}/en/blog/release/v10.6.0.md (100%) rename {locale => pages}/en/blog/release/v10.7.0.md (100%) rename {locale => pages}/en/blog/release/v10.8.0.md (100%) rename {locale => pages}/en/blog/release/v10.9.0.md (100%) rename {locale => pages}/en/blog/release/v11.0.0.md (100%) rename {locale => pages}/en/blog/release/v11.1.0.md (100%) rename {locale => pages}/en/blog/release/v11.10.0.md (100%) rename {locale => pages}/en/blog/release/v11.10.1.md (100%) rename {locale => pages}/en/blog/release/v11.11.0.md (100%) rename {locale => pages}/en/blog/release/v11.12.0.md (100%) rename {locale => pages}/en/blog/release/v11.13.0.md (100%) rename {locale => pages}/en/blog/release/v11.14.0.md (100%) rename {locale => pages}/en/blog/release/v11.15.0.md (100%) rename {locale => pages}/en/blog/release/v11.2.0.md (100%) rename {locale => pages}/en/blog/release/v11.3.0.md (100%) rename {locale => pages}/en/blog/release/v11.4.0.md (100%) rename {locale => pages}/en/blog/release/v11.5.0.md (100%) rename {locale => pages}/en/blog/release/v11.6.0.md (100%) rename {locale => pages}/en/blog/release/v11.7.0.md (100%) rename {locale => pages}/en/blog/release/v11.8.0.md (100%) rename {locale => pages}/en/blog/release/v11.9.0.md (100%) rename {locale => pages}/en/blog/release/v12.0.0.md (100%) rename {locale => pages}/en/blog/release/v12.1.0.md (100%) rename {locale => pages}/en/blog/release/v12.10.0.md (100%) rename {locale => pages}/en/blog/release/v12.11.0.md (100%) rename {locale => pages}/en/blog/release/v12.11.1.md (100%) rename {locale => pages}/en/blog/release/v12.12.0.md (100%) rename {locale => pages}/en/blog/release/v12.13.0.md (100%) rename {locale => pages}/en/blog/release/v12.13.1.md (100%) rename {locale => pages}/en/blog/release/v12.14.0.md (100%) rename {locale => pages}/en/blog/release/v12.14.1.md (100%) rename {locale => pages}/en/blog/release/v12.15.0.md (100%) rename {locale => pages}/en/blog/release/v12.16.0.md (100%) rename {locale => pages}/en/blog/release/v12.16.1.md (100%) rename {locale => pages}/en/blog/release/v12.16.2.md (100%) rename {locale => pages}/en/blog/release/v12.16.3.md (100%) rename {locale => pages}/en/blog/release/v12.17.0.md (100%) rename {locale => pages}/en/blog/release/v12.18.0.md (100%) rename {locale => pages}/en/blog/release/v12.18.1.md (100%) rename {locale => pages}/en/blog/release/v12.18.2.md (100%) rename {locale => pages}/en/blog/release/v12.18.3.md (100%) rename {locale => pages}/en/blog/release/v12.18.4.md (100%) rename {locale => pages}/en/blog/release/v12.19.0.md (100%) rename {locale => pages}/en/blog/release/v12.19.1.md (100%) rename {locale => pages}/en/blog/release/v12.2.0.md (100%) rename {locale => pages}/en/blog/release/v12.20.0.md (100%) rename {locale => pages}/en/blog/release/v12.20.1.md (100%) rename {locale => pages}/en/blog/release/v12.20.2.md (100%) rename {locale => pages}/en/blog/release/v12.21.0.md (100%) rename {locale => pages}/en/blog/release/v12.22.0.md (100%) rename {locale => pages}/en/blog/release/v12.22.1.md (100%) rename {locale => pages}/en/blog/release/v12.22.10.md (100%) rename {locale => pages}/en/blog/release/v12.22.11.md (100%) rename {locale => pages}/en/blog/release/v12.22.12.md (100%) rename {locale => pages}/en/blog/release/v12.22.2.md (100%) rename {locale => pages}/en/blog/release/v12.22.3.md (100%) rename {locale => pages}/en/blog/release/v12.22.4.md (100%) rename {locale => pages}/en/blog/release/v12.22.5.md (100%) rename {locale => pages}/en/blog/release/v12.22.6.md (100%) rename {locale => pages}/en/blog/release/v12.22.7.md (100%) rename {locale => pages}/en/blog/release/v12.22.8.md (100%) rename {locale => pages}/en/blog/release/v12.22.9.md (100%) rename {locale => pages}/en/blog/release/v12.3.0.md (100%) rename {locale => pages}/en/blog/release/v12.3.1.md (100%) rename {locale => pages}/en/blog/release/v12.4.0.md (100%) rename {locale => pages}/en/blog/release/v12.5.0.md (100%) rename {locale => pages}/en/blog/release/v12.6.0.md (100%) rename {locale => pages}/en/blog/release/v12.7.0.md (100%) rename {locale => pages}/en/blog/release/v12.8.0.md (100%) rename {locale => pages}/en/blog/release/v12.8.1.md (100%) rename {locale => pages}/en/blog/release/v12.9.0.md (100%) rename {locale => pages}/en/blog/release/v12.9.1.md (100%) rename {locale => pages}/en/blog/release/v13.0.0.md (100%) rename {locale => pages}/en/blog/release/v13.0.1.md (100%) rename {locale => pages}/en/blog/release/v13.1.0.md (100%) rename {locale => pages}/en/blog/release/v13.10.0.md (100%) rename {locale => pages}/en/blog/release/v13.10.1.md (100%) rename {locale => pages}/en/blog/release/v13.11.0.md (100%) rename {locale => pages}/en/blog/release/v13.12.0.md (100%) rename {locale => pages}/en/blog/release/v13.13.0.md (100%) rename {locale => pages}/en/blog/release/v13.14.0.md (100%) rename {locale => pages}/en/blog/release/v13.2.0.md (100%) rename {locale => pages}/en/blog/release/v13.3.0.md (100%) rename {locale => pages}/en/blog/release/v13.4.0.md (100%) rename {locale => pages}/en/blog/release/v13.5.0.md (100%) rename {locale => pages}/en/blog/release/v13.6.0.md (100%) rename {locale => pages}/en/blog/release/v13.7.0.md (100%) rename {locale => pages}/en/blog/release/v13.8.0.md (100%) rename {locale => pages}/en/blog/release/v13.9.0.md (100%) rename {locale => pages}/en/blog/release/v14.0.0.md (100%) rename {locale => pages}/en/blog/release/v14.1.0.md (70%) rename {locale => pages}/en/blog/release/v14.10.0.md (100%) rename {locale => pages}/en/blog/release/v14.10.1.md (100%) rename {locale => pages}/en/blog/release/v14.11.0.md (100%) rename {locale => pages}/en/blog/release/v14.12.0.md (100%) rename {locale => pages}/en/blog/release/v14.13.0.md (100%) rename {locale => pages}/en/blog/release/v14.13.1.md (100%) rename {locale => pages}/en/blog/release/v14.14.0.md (100%) rename {locale => pages}/en/blog/release/v14.15.0.md (100%) rename {locale => pages}/en/blog/release/v14.15.1.md (100%) rename {locale => pages}/en/blog/release/v14.15.2.md (100%) rename {locale => pages}/en/blog/release/v14.15.3.md (100%) rename {locale => pages}/en/blog/release/v14.15.4.md (100%) rename {locale => pages}/en/blog/release/v14.15.5.md (100%) rename {locale => pages}/en/blog/release/v14.16.0.md (100%) rename {locale => pages}/en/blog/release/v14.16.1.md (100%) rename {locale => pages}/en/blog/release/v14.17.0.md (100%) rename {locale => pages}/en/blog/release/v14.17.1.md (100%) rename {locale => pages}/en/blog/release/v14.17.2.md (100%) rename {locale => pages}/en/blog/release/v14.17.3.md (100%) rename {locale => pages}/en/blog/release/v14.17.4.md (100%) rename {locale => pages}/en/blog/release/v14.17.5.md (100%) rename {locale => pages}/en/blog/release/v14.17.6.md (100%) rename {locale => pages}/en/blog/release/v14.18.0.md (100%) rename {locale => pages}/en/blog/release/v14.18.1.md (100%) rename {locale => pages}/en/blog/release/v14.18.2.md (100%) rename {locale => pages}/en/blog/release/v14.18.3.md (100%) rename {locale => pages}/en/blog/release/v14.19.0.md (100%) rename {locale => pages}/en/blog/release/v14.19.1.md (100%) rename {locale => pages}/en/blog/release/v14.19.2.md (100%) rename {locale => pages}/en/blog/release/v14.19.3.md (100%) rename {locale => pages}/en/blog/release/v14.2.0.md (100%) rename {locale => pages}/en/blog/release/v14.20.0.md (100%) rename {locale => pages}/en/blog/release/v14.20.1.md (100%) rename {locale => pages}/en/blog/release/v14.21.0.md (100%) rename {locale => pages}/en/blog/release/v14.21.1.md (100%) rename {locale => pages}/en/blog/release/v14.21.2.md (100%) rename {locale => pages}/en/blog/release/v14.21.3.md (100%) rename {locale => pages}/en/blog/release/v14.3.0.md (100%) rename {locale => pages}/en/blog/release/v14.4.0.md (100%) rename {locale => pages}/en/blog/release/v14.5.0.md (100%) rename {locale => pages}/en/blog/release/v14.6.0.md (100%) rename {locale => pages}/en/blog/release/v14.7.0.md (100%) rename {locale => pages}/en/blog/release/v14.8.0.md (100%) rename {locale => pages}/en/blog/release/v14.9.0.md (100%) rename {locale => pages}/en/blog/release/v15.0.0.md (100%) rename {locale => pages}/en/blog/release/v15.0.1.md (100%) rename {locale => pages}/en/blog/release/v15.1.0.md (100%) rename {locale => pages}/en/blog/release/v15.10.0.md (100%) rename {locale => pages}/en/blog/release/v15.11.0.md (100%) rename {locale => pages}/en/blog/release/v15.12.0.md (100%) rename {locale => pages}/en/blog/release/v15.13.0.md (100%) rename {locale => pages}/en/blog/release/v15.14.0.md (100%) rename {locale => pages}/en/blog/release/v15.2.0.md (100%) rename {locale => pages}/en/blog/release/v15.2.1.md (100%) rename {locale => pages}/en/blog/release/v15.3.0.md (100%) rename {locale => pages}/en/blog/release/v15.4.0.md (100%) rename {locale => pages}/en/blog/release/v15.5.0.md (100%) rename {locale => pages}/en/blog/release/v15.5.1.md (100%) rename {locale => pages}/en/blog/release/v15.6.0.md (100%) rename {locale => pages}/en/blog/release/v15.7.0.md (100%) rename {locale => pages}/en/blog/release/v15.8.0.md (100%) rename {locale => pages}/en/blog/release/v15.9.0.md (100%) rename {locale => pages}/en/blog/release/v16.0.0.md (100%) rename {locale => pages}/en/blog/release/v16.1.0.md (100%) rename {locale => pages}/en/blog/release/v16.10.0.md (100%) rename {locale => pages}/en/blog/release/v16.11.0.md (100%) rename {locale => pages}/en/blog/release/v16.11.1.md (100%) rename {locale => pages}/en/blog/release/v16.12.0.md (100%) rename {locale => pages}/en/blog/release/v16.13.0.md (100%) rename {locale => pages}/en/blog/release/v16.13.1.md (100%) rename {locale => pages}/en/blog/release/v16.13.2.md (100%) rename {locale => pages}/en/blog/release/v16.14.0.md (100%) rename {locale => pages}/en/blog/release/v16.14.1.md (100%) rename {locale => pages}/en/blog/release/v16.14.2.md (100%) rename {locale => pages}/en/blog/release/v16.15.0.md (100%) rename {locale => pages}/en/blog/release/v16.15.1.md (100%) rename {locale => pages}/en/blog/release/v16.16.0.md (100%) rename {locale => pages}/en/blog/release/v16.17.0.md (100%) rename {locale => pages}/en/blog/release/v16.17.1.md (100%) rename {locale => pages}/en/blog/release/v16.18.0.md (100%) rename {locale => pages}/en/blog/release/v16.18.1.md (100%) rename {locale => pages}/en/blog/release/v16.19.0.md (100%) rename {locale => pages}/en/blog/release/v16.19.1.md (100%) rename {locale => pages}/en/blog/release/v16.2.0.md (100%) rename {locale => pages}/en/blog/release/v16.3.0.md (100%) rename {locale => pages}/en/blog/release/v16.4.0.md (100%) rename {locale => pages}/en/blog/release/v16.4.1.md (100%) rename {locale => pages}/en/blog/release/v16.4.2.md (100%) rename {locale => pages}/en/blog/release/v16.5.0.md (100%) rename {locale => pages}/en/blog/release/v16.6.0.md (100%) rename {locale => pages}/en/blog/release/v16.6.1.md (100%) rename {locale => pages}/en/blog/release/v16.6.2.md (100%) rename {locale => pages}/en/blog/release/v16.7.0.md (100%) rename {locale => pages}/en/blog/release/v16.8.0.md (100%) rename {locale => pages}/en/blog/release/v16.9.0.md (100%) rename {locale => pages}/en/blog/release/v16.9.1.md (100%) rename {locale => pages}/en/blog/release/v17.0.0.md (100%) rename {locale => pages}/en/blog/release/v17.0.1.md (100%) rename {locale => pages}/en/blog/release/v17.1.0.md (100%) rename {locale => pages}/en/blog/release/v17.2.0.md (100%) rename {locale => pages}/en/blog/release/v17.3.0.md (100%) rename {locale => pages}/en/blog/release/v17.3.1.md (100%) rename {locale => pages}/en/blog/release/v17.4.0.md (100%) rename {locale => pages}/en/blog/release/v17.5.0.md (100%) rename {locale => pages}/en/blog/release/v17.6.0.md (100%) rename {locale => pages}/en/blog/release/v17.7.0.md (100%) rename {locale => pages}/en/blog/release/v17.7.1.md (100%) rename {locale => pages}/en/blog/release/v17.7.2.md (100%) rename {locale => pages}/en/blog/release/v17.8.0.md (100%) rename {locale => pages}/en/blog/release/v17.9.0.md (100%) rename {locale => pages}/en/blog/release/v17.9.1.md (100%) rename {locale => pages}/en/blog/release/v18.0.0.md (100%) rename {locale => pages}/en/blog/release/v18.1.0.md (100%) rename {locale => pages}/en/blog/release/v18.10.0.md (100%) rename {locale => pages}/en/blog/release/v18.11.0.md (100%) rename {locale => pages}/en/blog/release/v18.12.0.md (100%) rename {locale => pages}/en/blog/release/v18.12.1.md (100%) rename {locale => pages}/en/blog/release/v18.13.0.md (100%) rename {locale => pages}/en/blog/release/v18.14.0.md (100%) rename {locale => pages}/en/blog/release/v18.14.1.md (100%) rename {locale => pages}/en/blog/release/v18.14.2.md (100%) rename {locale => pages}/en/blog/release/v18.15.0.md (100%) rename {locale => pages}/en/blog/release/v18.2.0.md (100%) rename {locale => pages}/en/blog/release/v18.3.0.md (100%) rename {locale => pages}/en/blog/release/v18.4.0.md (100%) rename {locale => pages}/en/blog/release/v18.5.0.md (100%) rename {locale => pages}/en/blog/release/v18.6.0.md (100%) rename {locale => pages}/en/blog/release/v18.7.0.md (100%) rename {locale => pages}/en/blog/release/v18.8.0.md (100%) rename {locale => pages}/en/blog/release/v18.9.0.md (100%) rename {locale => pages}/en/blog/release/v18.9.1.md (100%) rename {locale => pages}/en/blog/release/v19.0.0.md (100%) rename {locale => pages}/en/blog/release/v19.0.1.md (100%) rename {locale => pages}/en/blog/release/v19.1.0.md (100%) rename {locale => pages}/en/blog/release/v19.2.0.md (100%) rename {locale => pages}/en/blog/release/v19.3.0.md (100%) rename {locale => pages}/en/blog/release/v19.4.0.md (100%) rename {locale => pages}/en/blog/release/v19.5.0.md (100%) rename {locale => pages}/en/blog/release/v19.6.0.md (100%) rename {locale => pages}/en/blog/release/v19.6.1.md (100%) rename {locale => pages}/en/blog/release/v19.7.0.md (100%) rename {locale => pages}/en/blog/release/v4.0.0.md (100%) rename {locale => pages}/en/blog/release/v4.1.0.md (100%) rename {locale => pages}/en/blog/release/v4.1.1.md (100%) rename {locale => pages}/en/blog/release/v4.1.2.md (100%) rename {locale => pages}/en/blog/release/v4.2.0.md (100%) rename {locale => pages}/en/blog/release/v4.2.1.md (100%) rename {locale => pages}/en/blog/release/v4.2.2.md (100%) rename {locale => pages}/en/blog/release/v4.2.3.md (100%) rename {locale => pages}/en/blog/release/v4.2.4.md (100%) rename {locale => pages}/en/blog/release/v4.2.5.md (100%) rename {locale => pages}/en/blog/release/v4.2.6.md (100%) rename {locale => pages}/en/blog/release/v4.3.0.md (100%) rename {locale => pages}/en/blog/release/v4.3.1.md (100%) rename {locale => pages}/en/blog/release/v4.3.2.md (100%) rename {locale => pages}/en/blog/release/v4.4.0.md (100%) rename {locale => pages}/en/blog/release/v4.4.1.md (100%) rename {locale => pages}/en/blog/release/v4.4.2.md (100%) rename {locale => pages}/en/blog/release/v4.4.3.md (100%) rename {locale => pages}/en/blog/release/v4.4.4.md (100%) rename {locale => pages}/en/blog/release/v4.4.5.md (100%) rename {locale => pages}/en/blog/release/v4.4.6.md (100%) rename {locale => pages}/en/blog/release/v4.4.7.md (100%) rename {locale => pages}/en/blog/release/v4.5.0.md (100%) rename {locale => pages}/en/blog/release/v4.6.0.md (100%) rename {locale => pages}/en/blog/release/v4.6.1.md (100%) rename {locale => pages}/en/blog/release/v4.6.2.md (100%) rename {locale => pages}/en/blog/release/v4.7.0.md (100%) rename {locale => pages}/en/blog/release/v4.7.1.md (100%) rename {locale => pages}/en/blog/release/v4.7.2.md (100%) rename {locale => pages}/en/blog/release/v4.7.3.md (100%) rename {locale => pages}/en/blog/release/v4.8.0.md (100%) rename {locale => pages}/en/blog/release/v4.8.1.md (100%) rename {locale => pages}/en/blog/release/v4.8.2.md (100%) rename {locale => pages}/en/blog/release/v4.8.3.md (100%) rename {locale => pages}/en/blog/release/v4.8.4.md (100%) rename {locale => pages}/en/blog/release/v4.8.5.md (100%) rename {locale => pages}/en/blog/release/v4.8.6.md (100%) rename {locale => pages}/en/blog/release/v4.8.7.md (100%) rename {locale => pages}/en/blog/release/v4.9.0.md (100%) rename {locale => pages}/en/blog/release/v4.9.1.md (100%) rename {locale => pages}/en/blog/release/v5.0.0.md (100%) rename {locale => pages}/en/blog/release/v5.1.0.md (100%) rename {locale => pages}/en/blog/release/v5.1.1.md (100%) rename {locale => pages}/en/blog/release/v5.10.0.md (100%) rename {locale => pages}/en/blog/release/v5.10.1.md (100%) rename {locale => pages}/en/blog/release/v5.11.0.md (100%) rename {locale => pages}/en/blog/release/v5.11.1.md (100%) rename {locale => pages}/en/blog/release/v5.12.0.md (100%) rename {locale => pages}/en/blog/release/v5.2.0.md (100%) rename {locale => pages}/en/blog/release/v5.3.0.md (100%) rename {locale => pages}/en/blog/release/v5.4.0.md (100%) rename {locale => pages}/en/blog/release/v5.4.1.md (100%) rename {locale => pages}/en/blog/release/v5.5.0.md (100%) rename {locale => pages}/en/blog/release/v5.6.0.md (100%) rename {locale => pages}/en/blog/release/v5.7.0.md (100%) rename {locale => pages}/en/blog/release/v5.7.1.md (100%) rename {locale => pages}/en/blog/release/v5.8.0.md (100%) rename {locale => pages}/en/blog/release/v5.9.0.md (100%) rename {locale => pages}/en/blog/release/v5.9.1.md (100%) rename {locale => pages}/en/blog/release/v6.0.0.md (100%) rename {locale => pages}/en/blog/release/v6.1.0.md (100%) rename {locale => pages}/en/blog/release/v6.10.0.md (100%) rename {locale => pages}/en/blog/release/v6.10.1.md (100%) rename {locale => pages}/en/blog/release/v6.10.2.md (100%) rename {locale => pages}/en/blog/release/v6.10.3.md (100%) rename {locale => pages}/en/blog/release/v6.11.0.md (100%) rename {locale => pages}/en/blog/release/v6.11.1.md (100%) rename {locale => pages}/en/blog/release/v6.11.2.md (100%) rename {locale => pages}/en/blog/release/v6.11.3.md (100%) rename {locale => pages}/en/blog/release/v6.11.4.md (100%) rename {locale => pages}/en/blog/release/v6.11.5.md (100%) rename {locale => pages}/en/blog/release/v6.12.0.md (100%) rename {locale => pages}/en/blog/release/v6.12.1.md (100%) rename {locale => pages}/en/blog/release/v6.12.2.md (100%) rename {locale => pages}/en/blog/release/v6.12.3.md (100%) rename {locale => pages}/en/blog/release/v6.13.0.md (100%) rename {locale => pages}/en/blog/release/v6.13.1.md (100%) rename {locale => pages}/en/blog/release/v6.14.0.md (100%) rename {locale => pages}/en/blog/release/v6.14.1.md (100%) rename {locale => pages}/en/blog/release/v6.14.2.md (100%) rename {locale => pages}/en/blog/release/v6.14.3.md (100%) rename {locale => pages}/en/blog/release/v6.14.4.md (100%) rename {locale => pages}/en/blog/release/v6.15.0.md (100%) rename {locale => pages}/en/blog/release/v6.15.1.md (100%) rename {locale => pages}/en/blog/release/v6.16.0.md (100%) rename {locale => pages}/en/blog/release/v6.17.0.md (100%) rename {locale => pages}/en/blog/release/v6.17.1.md (100%) rename {locale => pages}/en/blog/release/v6.2.0.md (100%) rename {locale => pages}/en/blog/release/v6.2.1.md (100%) rename {locale => pages}/en/blog/release/v6.2.2.md (100%) rename {locale => pages}/en/blog/release/v6.3.0.md (100%) rename {locale => pages}/en/blog/release/v6.3.1.md (100%) rename {locale => pages}/en/blog/release/v6.4.0.md (100%) rename {locale => pages}/en/blog/release/v6.5.0.md (100%) rename {locale => pages}/en/blog/release/v6.6.0.md (100%) rename {locale => pages}/en/blog/release/v6.7.0.md (100%) rename {locale => pages}/en/blog/release/v6.8.0.md (100%) rename {locale => pages}/en/blog/release/v6.8.1.md (100%) rename {locale => pages}/en/blog/release/v6.9.0.md (100%) rename {locale => pages}/en/blog/release/v6.9.1.md (100%) rename {locale => pages}/en/blog/release/v6.9.2.md (100%) rename {locale => pages}/en/blog/release/v6.9.3.md (100%) rename {locale => pages}/en/blog/release/v6.9.4.md (100%) rename {locale => pages}/en/blog/release/v6.9.5.md (100%) rename {locale => pages}/en/blog/release/v7.0.0.md (100%) rename {locale => pages}/en/blog/release/v7.1.0.md (100%) rename {locale => pages}/en/blog/release/v7.10.0.md (100%) rename {locale => pages}/en/blog/release/v7.10.1.md (100%) rename {locale => pages}/en/blog/release/v7.2.0.md (100%) rename {locale => pages}/en/blog/release/v7.2.1.md (100%) rename {locale => pages}/en/blog/release/v7.3.0.md (100%) rename {locale => pages}/en/blog/release/v7.4.0.md (100%) rename {locale => pages}/en/blog/release/v7.5.0.md (100%) rename {locale => pages}/en/blog/release/v7.6.0.md (100%) rename {locale => pages}/en/blog/release/v7.7.0.md (100%) rename {locale => pages}/en/blog/release/v7.7.1.md (100%) rename {locale => pages}/en/blog/release/v7.7.2.md (100%) rename {locale => pages}/en/blog/release/v7.7.3.md (100%) rename {locale => pages}/en/blog/release/v7.7.4.md (100%) rename {locale => pages}/en/blog/release/v7.8.0.md (100%) rename {locale => pages}/en/blog/release/v7.9.0.md (100%) rename {locale => pages}/en/blog/release/v8.0.0.md (100%) rename {locale => pages}/en/blog/release/v8.1.0.md (100%) rename {locale => pages}/en/blog/release/v8.1.1.md (100%) rename {locale => pages}/en/blog/release/v8.1.2.md (100%) rename {locale => pages}/en/blog/release/v8.1.3.md (100%) rename {locale => pages}/en/blog/release/v8.1.4.md (100%) rename {locale => pages}/en/blog/release/v8.10.0.md (100%) rename {locale => pages}/en/blog/release/v8.11.0.md (100%) rename {locale => pages}/en/blog/release/v8.11.1.md (100%) rename {locale => pages}/en/blog/release/v8.11.2.md (100%) rename {locale => pages}/en/blog/release/v8.11.3.md (100%) rename {locale => pages}/en/blog/release/v8.11.4.md (100%) rename {locale => pages}/en/blog/release/v8.12.0.md (100%) rename {locale => pages}/en/blog/release/v8.13.0.md (100%) rename {locale => pages}/en/blog/release/v8.14.0.md (100%) rename {locale => pages}/en/blog/release/v8.14.1.md (100%) rename {locale => pages}/en/blog/release/v8.15.0.md (100%) rename {locale => pages}/en/blog/release/v8.15.1.md (100%) rename {locale => pages}/en/blog/release/v8.16.0.md (100%) rename {locale => pages}/en/blog/release/v8.16.1.md (100%) rename {locale => pages}/en/blog/release/v8.16.2.md (100%) rename {locale => pages}/en/blog/release/v8.17.0.md (100%) rename {locale => pages}/en/blog/release/v8.2.0.md (100%) rename {locale => pages}/en/blog/release/v8.2.1.md (100%) rename {locale => pages}/en/blog/release/v8.3.0.md (100%) rename {locale => pages}/en/blog/release/v8.4.0.md (100%) rename {locale => pages}/en/blog/release/v8.5.0.md (100%) rename {locale => pages}/en/blog/release/v8.6.0.md (100%) rename {locale => pages}/en/blog/release/v8.7.0.md (100%) rename {locale => pages}/en/blog/release/v8.8.0.md (100%) rename {locale => pages}/en/blog/release/v8.8.1.md (100%) rename {locale => pages}/en/blog/release/v8.9.0.md (100%) rename {locale => pages}/en/blog/release/v8.9.1.md (100%) rename {locale => pages}/en/blog/release/v8.9.2.md (100%) rename {locale => pages}/en/blog/release/v8.9.3.md (100%) rename {locale => pages}/en/blog/release/v8.9.4.md (100%) rename {locale => pages}/en/blog/release/v9.0.0.md (100%) rename {locale => pages}/en/blog/release/v9.1.0.md (100%) rename {locale => pages}/en/blog/release/v9.10.0.md (100%) rename {locale => pages}/en/blog/release/v9.10.1.md (100%) rename {locale => pages}/en/blog/release/v9.11.0.md (100%) rename {locale => pages}/en/blog/release/v9.11.1.md (100%) rename {locale => pages}/en/blog/release/v9.11.2.md (100%) rename {locale => pages}/en/blog/release/v9.2.0.md (100%) rename {locale => pages}/en/blog/release/v9.2.1.md (100%) rename {locale => pages}/en/blog/release/v9.3.0.md (100%) rename {locale => pages}/en/blog/release/v9.4.0.md (100%) rename {locale => pages}/en/blog/release/v9.5.0.md (100%) rename {locale => pages}/en/blog/release/v9.6.0.md (100%) rename {locale => pages}/en/blog/release/v9.6.1.md (100%) rename {locale => pages}/en/blog/release/v9.7.0.md (100%) rename {locale => pages}/en/blog/release/v9.7.1.md (100%) rename {locale => pages}/en/blog/release/v9.8.0.md (100%) rename {locale => pages}/en/blog/release/v9.9.0.md (100%) rename {locale => pages}/en/blog/uncategorized/10-lts-to-12-lts.md (100%) rename {locale => pages}/en/blog/uncategorized/an-easy-way-to-build-scalable-network-programs.md (100%) rename {locale => pages}/en/blog/uncategorized/bnoordhuis-departure.md (100%) rename {locale => pages}/en/blog/uncategorized/development-environment.md (100%) rename {locale => pages}/en/blog/uncategorized/evolving-the-node-js-brand.md (100%) rename {locale => pages}/en/blog/uncategorized/growing-up.md (100%) rename {locale => pages}/en/blog/uncategorized/index.md (100%) rename {locale => pages}/en/blog/uncategorized/jobs-nodejs-org.md (100%) rename {locale => pages}/en/blog/uncategorized/ldapjs-a-reprise-of-ldap.md (100%) rename {locale => pages}/en/blog/uncategorized/libuv-status-report.md (100%) rename {locale => pages}/en/blog/uncategorized/node-interactive-convince-boss.md (100%) rename {locale => pages}/en/blog/uncategorized/node-meetup-this-thursday.md (100%) rename {locale => pages}/en/blog/uncategorized/node-office-hours-cut-short.md (100%) rename {locale => pages}/en/blog/uncategorized/notes-from-the-road.md (100%) rename {locale => pages}/en/blog/uncategorized/office-hours.md (100%) rename {locale => pages}/en/blog/uncategorized/porting-node-to-windows-with-microsofts-help.md (100%) rename {locale => pages}/en/blog/uncategorized/profiling-node-js.md (100%) rename {locale => pages}/en/blog/uncategorized/some-new-node-projects.md (100%) rename {locale => pages}/en/blog/uncategorized/the-videos-from-node-meetup.md (100%) rename {locale => pages}/en/blog/uncategorized/tj-fontaine-new-node-lead.md (100%) rename {locale => pages}/en/blog/uncategorized/trademark.md (100%) rename {locale => pages}/en/blog/uncategorized/version-0-6.md (100%) rename {locale => pages}/en/blog/video/bert-belder-libuv-lxjs-2012.md (100%) rename {locale => pages}/en/blog/video/bryan-cantrill-instrumenting-the-real-time-web.md (100%) rename {locale => pages}/en/blog/video/index.md (100%) rename {locale => pages}/en/blog/video/welcome-to-the-node-blog.md (100%) rename {locale => pages}/en/blog/vulnerability/april-2020-openssl-updates.md (100%) rename {locale => pages}/en/blog/vulnerability/april-2021-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/aug-2019-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/aug-2021-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/aug-2021-security-releases2.md (100%) rename {locale => pages}/en/blog/vulnerability/august-2018-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/cve-2015-8027_cve-2015-6764.md (100%) rename {locale => pages}/en/blog/vulnerability/december-2015-security-release-update.md (100%) rename {locale => pages}/en/blog/vulnerability/december-2015-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/december-2017-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/december-2019-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/february-2016-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/february-2019-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/february-2020-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/february-2021-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/february-2023-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/http-server-pipeline-flood-dos.md (100%) rename {locale => pages}/en/blog/vulnerability/http-server-security-vulnerability-please-upgrade-to-0-6-17.md (100%) rename {locale => pages}/en/blog/vulnerability/index.md (100%) rename {locale => pages}/en/blog/vulnerability/jan-2018-spectre-meltdown.md (100%) rename {locale => pages}/en/blog/vulnerability/jan-2022-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/january-2021-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/july-2017-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/july-2021-security-releases-2.md (100%) rename {locale => pages}/en/blog/vulnerability/july-2021-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/july-2022-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/june-2016-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/june-2018-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/june-2020-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/mar-2022-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/march-2018-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/november-2018-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/november-2020-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/november-2022-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/npm-tokens-leak-march-2016.md (100%) rename {locale => pages}/en/blog/vulnerability/oct-2017-dos.md (100%) rename {locale => pages}/en/blog/vulnerability/oct-2021-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/october-2016-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/openssl-and-low-severity-fixes-jan-2016.md (100%) rename {locale => pages}/en/blog/vulnerability/openssl-and-utf8.md (100%) rename {locale => pages}/en/blog/vulnerability/openssl-and-zlib-vulnerability-assessment.md (100%) rename {locale => pages}/en/blog/vulnerability/openssl-fixes-in-regular-releases-dec2022.md (100%) rename {locale => pages}/en/blog/vulnerability/openssl-fixes-in-regular-releases-jun2022.md (100%) rename {locale => pages}/en/blog/vulnerability/openssl-fixes-in-regular-releases-may2022.md (100%) rename {locale => pages}/en/blog/vulnerability/openssl-january-2017.md (100%) rename {locale => pages}/en/blog/vulnerability/openssl-march-2016.md (100%) rename {locale => pages}/en/blog/vulnerability/openssl-may-2016.md (100%) rename {locale => pages}/en/blog/vulnerability/openssl-november-2017.md (100%) rename {locale => pages}/en/blog/vulnerability/openssl-november-2022.md (100%) rename {locale => pages}/en/blog/vulnerability/september-2016-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/september-2017-path-validation.md (100%) rename {locale => pages}/en/blog/vulnerability/september-2019-openssl-no-updates.md (100%) rename {locale => pages}/en/blog/vulnerability/september-2019-openssl-updates.md (100%) rename {locale => pages}/en/blog/vulnerability/september-2020-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/september-2022-security-releases.md (100%) rename {locale => pages}/en/blog/vulnerability/v8-memory-corruption-stack-overflow.md (100%) rename {locale => pages}/en/blog/weekly-updates/index.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-02-06.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-02-13.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-02-20.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-02-27.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-03-06.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-03-13.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-03-20.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-03-27.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-04-03.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-04-10.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-04-17.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-04-24.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-05-01.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-05-08.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-05-15.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-05-22.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-05-29.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-06-05.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-06-12.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-06-19.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-06-26.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-07-03.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-07-10.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-07-17.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-07-24.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-07-31.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-08-07.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-08-14.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-08-21.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-08-28.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-09-04.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-09-11.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-09-18.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-10-02.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-10-09.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-10-16.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-10-23.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-10-30.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-11-06.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-11-13.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-11-20.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-11-27.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-12-04.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2015-12-11.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-01-01.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-01-11.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-01-18.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-01-22.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-01-29.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-02-08.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-02-15.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-02-22.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-03-01.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-03-07.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-03-14.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-04-17.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-04-23.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-04-29.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-05-30.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-06-16.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-06-26.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-07-08.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-07-16.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-07-22.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-08-15.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-10-28.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-11-04.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-11-11.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-11-24.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-12-02.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2016-12-25.md (100%) rename {locale => pages}/en/blog/weekly-updates/weekly-update.2017-02-10.md (100%) rename {locale => pages}/en/blog/wg/diag-wg-update-2017-02.md (100%) rename {locale => pages}/en/docs/es6.md (100%) rename {locale => pages}/en/docs/guides/abi-stability.md (100%) rename {locale => pages}/en/docs/guides/anatomy-of-an-http-transaction.md (100%) rename {locale => pages}/en/docs/guides/backpressuring-in-streams.md (100%) rename {locale => pages}/en/docs/guides/blocking-vs-non-blocking.md (100%) rename {locale => pages}/en/docs/guides/buffer-constructor-deprecation.md (82%) rename {locale => pages}/en/docs/guides/debugging-getting-started.md (100%) rename {locale => pages}/en/docs/guides/diagnostics-flamegraph.md (100%) rename {locale => pages}/en/docs/guides/diagnostics/index.md (100%) rename {locale => pages}/en/docs/guides/diagnostics/live-debugging/index.md (100%) rename {locale => pages}/en/docs/guides/diagnostics/live-debugging/using-inspector.md (100%) rename {locale => pages}/en/docs/guides/diagnostics/memory/index.md (100%) rename {locale => pages}/en/docs/guides/diagnostics/memory/using-gc-traces.md (100%) rename {locale => pages}/en/docs/guides/diagnostics/memory/using-heap-profiler.md (100%) rename {locale => pages}/en/docs/guides/diagnostics/memory/using-heap-snapshot.md (100%) rename {locale => pages}/en/docs/guides/diagnostics/poor-performance/index.md (100%) rename {locale => pages}/en/docs/guides/diagnostics/poor-performance/using-linux-perf.md (100%) rename {locale => pages}/en/docs/guides/domain-postmortem.md (100%) rename {locale => pages}/en/docs/guides/dont-block-the-event-loop.md (100%) rename {locale => pages}/en/docs/guides/event-loop-timers-and-nexttick.md (100%) rename {locale => pages}/en/docs/guides/getting-started-guide.md (100%) rename {locale => pages}/en/docs/guides/index.md (100%) rename {locale => pages}/en/docs/guides/nodejs-docker-webapp.md (100%) rename {locale => pages}/en/docs/guides/publishing-napi-modules.md (100%) rename {locale => pages}/en/docs/guides/security/index.md (100%) rename {locale => pages}/en/docs/guides/simple-profiling.md (100%) rename {locale => pages}/en/docs/guides/timers-in-node.md (100%) rename {locale => pages}/en/docs/guides/working-with-different-filesystems.md (100%) rename locale/en/docs/index.md => pages/en/docs/index.mdx (88%) rename {locale => pages}/en/docs/meta/topics/dependencies.md (100%) rename {locale => pages}/en/download/current.md (100%) rename {locale => pages}/en/download/index.md (100%) rename {locale => pages}/en/download/package-manager.md (100%) rename {locale => pages}/en/download/releases.md (100%) rename {locale => pages}/en/get-involved/collab-summit.md (100%) rename {locale => pages}/en/get-involved/contribute.md (100%) rename {locale => pages}/en/get-involved/index.md (100%) rename {locale => pages}/en/index.md (100%) rename {locale => pages}/es/404.md (100%) rename {locale => pages}/es/about/governance.md (100%) rename {locale => pages}/es/about/index.md (100%) rename {locale => pages}/es/docs/es6.md (100%) rename locale/es/docs/index.md => pages/es/docs/index.mdx (87%) rename {locale => pages}/es/docs/meta/topics/dependencies.md (100%) rename {locale => pages}/es/download/current.md (100%) rename {locale => pages}/es/download/index.md (100%) rename {locale => pages}/es/download/package-manager.md (100%) rename {locale => pages}/es/download/releases.md (100%) rename {locale => pages}/es/get-involved/collab-summit.md (100%) rename {locale => pages}/es/get-involved/contribute.md (100%) rename {locale => pages}/es/get-involved/index.md (100%) rename {locale => pages}/es/index.md (100%) rename {locale => pages}/fa/404.md (100%) rename {locale => pages}/fa/about/index.md (100%) rename {locale => pages}/fa/index.md (100%) rename {locale => pages}/fr/404.md (100%) rename {locale => pages}/fr/about/governance.md (100%) rename {locale => pages}/fr/about/index.md (100%) rename locale/fr/docs/index.md => pages/fr/docs/index.mdx (88%) rename {locale => pages}/fr/download/current.md (100%) rename {locale => pages}/fr/download/index.md (100%) rename {locale => pages}/fr/download/package-manager.md (100%) rename {locale => pages}/fr/download/releases.md (100%) rename {locale => pages}/fr/get-involved/collab-summit.md (100%) rename {locale => pages}/fr/get-involved/contribute.md (100%) rename {locale => pages}/fr/get-involved/index.md (100%) rename {locale => pages}/fr/index.md (100%) rename {locale => pages}/gl/404.md (100%) rename {locale => pages}/gl/index.md (100%) rename {locale => pages}/it/404.md (100%) rename {locale => pages}/it/about/index.md (100%) rename {locale => pages}/it/get-involved/collab-summit.md (100%) rename {locale => pages}/it/get-involved/index.md (100%) rename {locale => pages}/it/index.md (100%) rename {locale => pages}/ja/404.md (100%) rename {locale => pages}/ja/about/index.md (100%) rename {locale => pages}/ja/docs/es6.md (100%) rename {locale => pages}/ja/docs/guides/blocking-vs-non-blocking.md (100%) rename {locale => pages}/ja/docs/guides/buffer-constructor-deprecation.md (85%) rename {locale => pages}/ja/docs/guides/debugging-getting-started.md (99%) rename {locale => pages}/ja/docs/guides/diagnostics-flamegraph.md (100%) rename {locale => pages}/ja/docs/guides/getting-started-guide.md (100%) rename {locale => pages}/ja/docs/guides/index.md (100%) rename {locale => pages}/ja/docs/guides/nodejs-docker-webapp.md (100%) rename {locale => pages}/ja/docs/guides/simple-profiling.md (100%) rename {locale => pages}/ja/docs/guides/timers-in-node.md (100%) create mode 100644 pages/ja/docs/index.mdx rename {locale => pages}/ja/docs/meta/topics/dependencies.md (100%) rename {locale => pages}/ja/download/current.md (100%) rename {locale => pages}/ja/download/index.md (100%) rename {locale => pages}/ja/download/package-manager.md (100%) rename {locale => pages}/ja/download/releases.md (100%) rename {locale => pages}/ja/get-involved/collab-summit.md (100%) rename {locale => pages}/ja/get-involved/contribute.md (100%) rename {locale => pages}/ja/get-involved/index.md (100%) rename {locale => pages}/ja/index.md (100%) rename {locale => pages}/ka/404.md (100%) rename {locale => pages}/ka/about/governance.md (100%) rename {locale => pages}/ka/about/index.md (100%) rename {locale => pages}/ka/docs/es6.md (100%) rename {locale => pages}/ka/docs/guides/debugging-getting-started.md (100%) rename {locale => pages}/ka/docs/guides/getting-started-guide.md (100%) rename {locale => pages}/ka/docs/guides/index.md (100%) rename locale/ka/docs/index.md => pages/ka/docs/index.mdx (91%) rename {locale => pages}/ka/download/index.md (100%) rename {locale => pages}/ka/get-involved/index.md (100%) rename {locale => pages}/ka/index.md (100%) rename {locale => pages}/ko/404.md (100%) rename {locale => pages}/ko/about/governance.md (100%) rename {locale => pages}/ko/about/index.md (100%) rename {locale => pages}/ko/docs/es6.md (100%) rename {locale => pages}/ko/docs/guides/anatomy-of-an-http-transaction.md (100%) rename {locale => pages}/ko/docs/guides/blocking-vs-non-blocking.md (100%) rename {locale => pages}/ko/docs/guides/debugging-getting-started.md (100%) rename {locale => pages}/ko/docs/guides/domain-postmortem.md (100%) rename {locale => pages}/ko/docs/guides/dont-block-the-event-loop.md (100%) rename {locale => pages}/ko/docs/guides/event-loop-timers-and-nexttick.md (100%) rename {locale => pages}/ko/docs/guides/getting-started-guide.md (100%) rename {locale => pages}/ko/docs/guides/index.md (100%) rename {locale => pages}/ko/docs/guides/nodejs-docker-webapp.md (100%) rename {locale => pages}/ko/docs/guides/simple-profiling.md (100%) rename {locale => pages}/ko/docs/guides/timers-in-node.md (100%) rename {locale => pages}/ko/docs/guides/working-with-different-filesystems.md (100%) create mode 100644 pages/ko/docs/index.mdx rename {locale => pages}/ko/docs/meta/topics/dependencies.md (100%) rename {locale => pages}/ko/download/current.md (100%) rename {locale => pages}/ko/download/index.md (100%) rename {locale => pages}/ko/download/package-manager.md (100%) rename {locale => pages}/ko/download/releases.md (100%) rename {locale => pages}/ko/get-involved/index.md (100%) rename {locale => pages}/ko/index.md (100%) rename {locale => pages}/nl/404.md (100%) rename {locale => pages}/nl/about/governance.md (100%) rename {locale => pages}/nl/about/index.md (100%) rename locale/nl/docs/index.md => pages/nl/docs/index.mdx (87%) rename {locale => pages}/nl/download/current.md (100%) rename {locale => pages}/nl/download/index.md (100%) rename {locale => pages}/nl/download/package-manager.md (100%) rename {locale => pages}/nl/download/releases.md (100%) rename {locale => pages}/nl/index.md (100%) rename {locale => pages}/pt-br/404.md (100%) rename {locale => pages}/pt-br/about/governance.md (100%) rename {locale => pages}/pt-br/about/index.md (100%) rename {locale => pages}/pt-br/docs/es6.md (100%) rename {locale => pages}/pt-br/docs/guides/abi-stability.md (100%) rename {locale => pages}/pt-br/docs/guides/blocking-vs-non-blocking.md (100%) rename {locale => pages}/pt-br/docs/guides/debugging-getting-started.md (100%) rename {locale => pages}/pt-br/docs/guides/diagnostics-flamegraph.md (100%) rename {locale => pages}/pt-br/docs/guides/dont-block-the-event-loop.md (100%) rename locale/pt-br/docs/index.md => pages/pt-br/docs/index.mdx (88%) rename {locale => pages}/pt-br/docs/meta/topics/dependencies.md (100%) rename {locale => pages}/pt-br/download/current.md (100%) rename {locale => pages}/pt-br/download/index.md (100%) rename {locale => pages}/pt-br/download/package-manager.md (100%) rename {locale => pages}/pt-br/download/releases.md (100%) rename {locale => pages}/pt-br/get-involved/collab-summit.md (100%) rename {locale => pages}/pt-br/get-involved/contribute.md (100%) rename {locale => pages}/pt-br/get-involved/index.md (100%) rename {locale => pages}/pt-br/index.md (100%) rename {locale => pages}/ro/404.md (100%) rename {locale => pages}/ro/about/governance.md (100%) rename {locale => pages}/ro/about/index.md (100%) rename locale/ro/docs/index.md => pages/ro/docs/index.mdx (88%) rename {locale => pages}/ro/download/current.md (100%) rename {locale => pages}/ro/download/index.md (100%) rename {locale => pages}/ro/download/package-manager.md (100%) rename {locale => pages}/ro/download/releases.md (100%) rename {locale => pages}/ro/get-involved/collab-summit.md (100%) rename {locale => pages}/ro/get-involved/contribute.md (100%) rename {locale => pages}/ro/get-involved/index.md (100%) rename {locale => pages}/ro/index.md (100%) rename {locale => pages}/ru/404.md (100%) rename {locale => pages}/ru/about/governance.md (100%) rename {locale => pages}/ru/about/index.md (100%) rename {locale => pages}/ru/docs/es6.md (100%) rename {locale => pages}/ru/docs/guides/blocking-vs-non-blocking.md (100%) rename {locale => pages}/ru/docs/guides/debugging-getting-started.md (100%) rename {locale => pages}/ru/docs/guides/diagnostics-flamegraph.md (100%) rename {locale => pages}/ru/docs/guides/getting-started-guide.md (100%) rename {locale => pages}/ru/docs/guides/index.md (100%) rename {locale => pages}/ru/docs/guides/nodejs-docker-webapp.md (100%) rename {locale => pages}/ru/docs/guides/simple-profiling.md (100%) rename {locale => pages}/ru/docs/guides/timers-in-node.md (100%) rename locale/ru/docs/index.md => pages/ru/docs/index.mdx (89%) rename {locale => pages}/ru/docs/meta/topics/dependencies.md (100%) rename {locale => pages}/ru/download/current.md (100%) rename {locale => pages}/ru/download/index.md (100%) rename {locale => pages}/ru/download/package-manager.md (100%) rename {locale => pages}/ru/download/releases.md (100%) rename {locale => pages}/ru/get-involved/collab-summit.md (100%) rename {locale => pages}/ru/get-involved/contribute.md (100%) rename {locale => pages}/ru/get-involved/index.md (100%) rename {locale => pages}/ru/index.md (100%) rename {locale => pages}/tr/404.md (100%) rename {locale => pages}/tr/about/index.md (100%) rename {locale => pages}/tr/docs/es6.md (100%) rename locale/tr/docs/index.md => pages/tr/docs/index.mdx (88%) rename {locale => pages}/tr/download/current.md (100%) rename {locale => pages}/tr/download/index.md (100%) rename {locale => pages}/tr/index.md (100%) rename {locale => pages}/uk/404.md (100%) rename {locale => pages}/uk/about/governance.md (100%) rename {locale => pages}/uk/about/index.md (100%) rename {locale => pages}/uk/docs/es6.md (100%) rename locale/uk/docs/index.md => pages/uk/docs/index.mdx (89%) rename {locale => pages}/uk/docs/meta/topics/dependencies.md (100%) rename {locale => pages}/uk/download/current.md (100%) rename {locale => pages}/uk/download/index.md (100%) rename {locale => pages}/uk/download/releases.md (100%) rename {locale => pages}/uk/get-involved/contribute.md (100%) rename {locale => pages}/uk/get-involved/index.md (100%) rename {locale => pages}/uk/index.md (100%) rename {locale => pages}/zh-cn/404.md (100%) rename {locale => pages}/zh-cn/about/governance.md (100%) rename {locale => pages}/zh-cn/about/index.md (100%) rename {locale => pages}/zh-cn/docs/es6.md (100%) rename {locale => pages}/zh-cn/docs/guides/abi-stability.md (100%) rename {locale => pages}/zh-cn/docs/guides/anatomy-of-an-http-transaction.md (100%) rename {locale => pages}/zh-cn/docs/guides/backpressuring-in-streams.md (100%) rename {locale => pages}/zh-cn/docs/guides/blocking-vs-non-blocking.md (100%) rename {locale => pages}/zh-cn/docs/guides/buffer-constructor-deprecation.md (83%) rename {locale => pages}/zh-cn/docs/guides/debugging-getting-started.md (100%) rename {locale => pages}/zh-cn/docs/guides/diagnostics-flamegraph.md (100%) rename {locale => pages}/zh-cn/docs/guides/diagnostics/index.md (100%) rename {locale => pages}/zh-cn/docs/guides/diagnostics/live-debugging/index.md (100%) rename {locale => pages}/zh-cn/docs/guides/diagnostics/live-debugging/using-inspector.md (100%) rename {locale => pages}/zh-cn/docs/guides/diagnostics/memory/index.md (100%) rename {locale => pages}/zh-cn/docs/guides/diagnostics/memory/using-gc-traces.md (100%) rename {locale => pages}/zh-cn/docs/guides/diagnostics/memory/using-heap-profiler.md (100%) rename {locale => pages}/zh-cn/docs/guides/diagnostics/memory/using-heap-snapshot.md (100%) rename {locale => pages}/zh-cn/docs/guides/diagnostics/poor-performance/index.md (100%) rename {locale => pages}/zh-cn/docs/guides/diagnostics/poor-performance/using-linux-perf.md (100%) rename {locale => pages}/zh-cn/docs/guides/domain-postmortem.md (100%) rename {locale => pages}/zh-cn/docs/guides/dont-block-the-event-loop.md (100%) rename {locale => pages}/zh-cn/docs/guides/event-loop-timers-and-nexttick.md (100%) rename {locale => pages}/zh-cn/docs/guides/getting-started-guide.md (100%) rename {locale => pages}/zh-cn/docs/guides/index.md (100%) rename {locale => pages}/zh-cn/docs/guides/nodejs-docker-webapp.md (100%) rename {locale => pages}/zh-cn/docs/guides/publishing-napi-modules.md (100%) rename {locale => pages}/zh-cn/docs/guides/security/index.md (100%) rename {locale => pages}/zh-cn/docs/guides/simple-profiling.md (100%) rename {locale => pages}/zh-cn/docs/guides/timers-in-node.md (100%) rename {locale => pages}/zh-cn/docs/guides/working-with-different-filesystems.md (100%) rename locale/zh-cn/docs/index.md => pages/zh-cn/docs/index.mdx (87%) rename {locale => pages}/zh-cn/docs/meta/topics/dependencies.md (100%) rename {locale => pages}/zh-cn/download/current.md (100%) rename {locale => pages}/zh-cn/download/index.md (100%) rename {locale => pages}/zh-cn/download/package-manager.md (100%) rename {locale => pages}/zh-cn/download/releases.md (100%) rename {locale => pages}/zh-cn/get-involved/collab-summit.md (100%) rename {locale => pages}/zh-cn/get-involved/contribute.md (100%) rename {locale => pages}/zh-cn/get-involved/index.md (100%) rename {locale => pages}/zh-cn/index.md (100%) rename {locale => pages}/zh-tw/404.md (100%) rename {locale => pages}/zh-tw/about/governance.md (100%) rename {locale => pages}/zh-tw/about/index.md (100%) rename locale/zh-tw/docs/index.md => pages/zh-tw/docs/index.mdx (86%) rename {locale => pages}/zh-tw/download/current.md (100%) rename {locale => pages}/zh-tw/download/index.md (100%) rename {locale => pages}/zh-tw/download/package-manager.md (100%) rename {locale => pages}/zh-tw/download/releases.md (100%) rename {locale => pages}/zh-tw/get-involved/collab-summit.md (100%) rename {locale => pages}/zh-tw/get-involved/contribute.md (100%) rename {locale => pages}/zh-tw/get-involved/index.md (100%) rename {locale => pages}/zh-tw/index.md (100%) create mode 100644 providers/layoutProvider.tsx create mode 100644 providers/localeProvider.tsx create mode 100644 providers/nodeDataProvider.tsx create mode 100644 providers/siteProvider.tsx create mode 100644 public/en/feed/.gitkeep rename {external/survey-2018 => public/en/user-survey-report}/2018-nodejs-user-survey-raw-data.xlsx (100%) rename {external/survey-2018 => public/en/user-survey-report}/2018-nodejs-user-survey-report.pdf (100%) rename {external/survey-2018 => public/en/user-survey-report}/bootstrap.min.css (100%) rename {external/survey-2018 => public/en/user-survey-report}/bootstrap.min.js (100%) rename {external/survey-2018 => public/en/user-survey-report}/d3.v3.min.js (100%) rename {external/survey-2018 => public/en/user-survey-report}/data.js (100%) rename {external/survey-2018 => public/en/user-survey-report}/data.min.js (100%) rename {external/survey-2018 => public/en/user-survey-report}/full.js (100%) rename {external/survey-2018 => public/en/user-survey-report}/full.min.js (100%) rename {external/survey-2018 => public/en/user-survey-report}/graph.html (100%) rename {external/survey-2018 => public/en/user-survey-report}/graph.js (100%) rename {external/survey-2018 => public/en/user-survey-report}/graph.min.js (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture11.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture12.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture14.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture15.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture18.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture1_1.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture1_2.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture2.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture20.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture21.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture22.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture23.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture24.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture25.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture26.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture27.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture28.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture29.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture3.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture30.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture31.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture32.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture33.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture34.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture35.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture36.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture38.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture39.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture40.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture41.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture42.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture43.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture45.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture46.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture47.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture5.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture6.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/charts/capture8.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/footer.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/header.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/logo_footer.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/logo_header.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/picture2.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/picture3.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/picture4.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/picture5.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/picture6.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart1.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart10.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart11.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart12.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart13.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart14.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart15.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart16.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart17.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart18.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart19.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart2.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart20.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart21.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart22.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart23.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart24.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart25.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart26.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart27.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart28.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart29.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart3.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart30.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart31.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart32.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart33.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart34.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart35.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart36.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart37.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart38.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart39.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart4.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart40.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart41.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart42.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart43.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart44.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart45.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart5.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart6.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart7.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart8.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/images/twitter/chart9.png (100%) rename {external/survey-2018 => public/en/user-survey-report}/index.html (100%) rename {external/survey-2018 => public/en/user-survey-report}/jquery.min.js (100%) rename {external/survey-2018 => public/en/user-survey-report}/linksBE.csv (100%) rename {external/survey-2018 => public/en/user-survey-report}/linksFE.csv (100%) rename {external/survey-2018 => public/en/user-survey-report}/linksFS.csv (100%) rename {external/survey-2018 => public/en/user-survey-report}/nodes.csv (100%) rename {external/survey-2018 => public/en/user-survey-report}/style.css (100%) rename {static/images/favicons => public}/manifest.json (100%) create mode 100644 public/robots.txt rename {static => public}/security.txt (100%) rename {static => public/static}/documents/2016-survey-infographic.png (100%) rename {static => public/static}/documents/2016-survey-report.pdf (100%) rename {static => public/static}/documents/foundation-visual-guidelines.pdf (100%) rename {static => public/static}/documents/nodeconf.pdf (100%) rename {static => public/static}/documents/trademark-policy.pdf (100%) rename {static => public/static}/images/blog/201609_lts_schedule_summary.gif (100%) rename {static => public/static}/images/blog/module/bunyan.png (100%) rename {static => public/static}/images/blog/npm/2013-outage-postmortem/XwrpFNICJ2-3000x3000.png (100%) rename {static => public/static}/images/blog/npm/2013-outage-postmortem/bapm3fk8Ve-3000x3000.png (100%) rename {static => public/static}/images/blog/npm/2013-outage-postmortem/xu1faVCq8p-3000x3000.png (100%) rename {static => public/static}/images/blog/npm/managing-node-js-dependencies-with-shrinkwrap/web-300x300.jpg (100%) rename {static => public/static}/images/blog/release/lts.png (100%) rename {static => public/static}/images/blog/uncategorized/evolving-the-node-js-brand/grid.png (100%) rename {static => public/static}/images/blog/uncategorized/evolving-the-node-js-brand/network.png (100%) rename {static => public/static}/images/blog/uncategorized/evolving-the-node-js-brand/node.png (100%) rename {static => public/static}/images/blog/uncategorized/evolving-the-node-js-brand/nodejs.png (100%) rename {static => public/static}/images/blog/uncategorized/evolving-the-node-js-brand/tri-color-node.png (100%) rename {static => public/static}/images/blog/uncategorized/ldapjs-a-reprise-of-ldap/uR16U.png (100%) rename {static => public/static}/images/blog/weekly-update/d7c62f3e-d94c-11e5-8ff8-f32c74b13cc3.png (100%) rename {static => public/static}/images/community-icons.png (100%) rename {static => public/static}/images/dark-mode.svg (100%) rename {static => public/static}/images/docs/guides/diagnostics/_cursor.png (100%) rename {static => public/static}/images/docs/guides/diagnostics/compare.png (100%) rename {static => public/static}/images/docs/guides/diagnostics/heap-profiler-tutorial-1.png (100%) rename {static => public/static}/images/docs/guides/diagnostics/heap-profiler-tutorial-2.png (100%) rename {static => public/static}/images/docs/guides/diagnostics/heap-profiler-tutorial-3.png (100%) rename {static => public/static}/images/docs/guides/diagnostics/heap-profiler-tutorial-4.png (100%) rename {static => public/static}/images/docs/guides/diagnostics/heap-profiler-tutorial-5.png (100%) rename {static => public/static}/images/docs/guides/diagnostics/load-snapshot.png (100%) rename {static => public/static}/images/docs/guides/diagnostics/snapshot.png (100%) rename {static => public/static}/images/docs/guides/diagnostics/tools.png (100%) rename {static => public/static}/images/favicons/android-chrome-192x192.png (100%) rename {static => public/static}/images/favicons/android-chrome-512x512.png (100%) create mode 100644 public/static/images/favicons/favicon.png rename {static => public/static}/images/ghc-banner.png (100%) create mode 100644 public/static/images/language-picker.svg rename {static => public/static}/images/light-mode.svg (100%) rename {static => public/static}/images/logo-hexagon-card.png (100%) rename {static => public/static}/images/logo-hexagon.png (100%) rename {static => public/static}/images/logo-hexagon.svg (100%) rename {static => public/static}/images/logo-light.png (100%) rename {static => public/static}/images/logo-light.svg (100%) rename {static => public/static}/images/logo.png (100%) rename {static => public/static}/images/logo.svg (100%) rename {static => public/static}/images/logos/js-black.eps (100%) rename {static => public/static}/images/logos/js-black.svg (100%) rename {static => public/static}/images/logos/js-green.svg (100%) rename {static => public/static}/images/logos/node-favicon.png (100%) rename {static => public/static}/images/logos/nodejs-black.eps (100%) rename {static => public/static}/images/logos/nodejs-black.png (100%) rename {static => public/static}/images/logos/nodejs-dark.eps (100%) rename {static => public/static}/images/logos/nodejs-dark.png (100%) rename {static => public/static}/images/logos/nodejs-green.eps (100%) rename {static => public/static}/images/logos/nodejs-green.png (100%) rename {static => public/static}/images/logos/nodejs-light.eps (100%) rename {static => public/static}/images/logos/nodejs-new-black.svg (100%) rename {static => public/static}/images/logos/nodejs-new-pantone-black.svg (100%) rename {static => public/static}/images/logos/nodejs-new-pantone-white.svg (100%) rename {static => public/static}/images/logos/nodejs-new-white.svg (100%) rename {static => public/static}/images/logos/nodejs.png (100%) rename {static => public/static}/images/node-cert-logo.png (100%) rename {static => public/static}/images/nodejs-training.png (100%) rename {static => public/static}/images/openjs_foundation-logo.svg (100%) create mode 100644 public/static/js/legacyMain.js rename {static => public/static}/legacy/README.md (62%) rename {static => public/static}/legacy/images/anchor.png (100%) rename {static => public/static}/legacy/images/apple-touch-icon.png (100%) rename {static => public/static}/legacy/images/close-downloads.png (100%) rename {static => public/static}/legacy/images/community-icons.png (100%) rename {static => public/static}/legacy/images/download-logo.png (100%) rename {static => public/static}/legacy/images/ebay-logo.png (100%) rename {static => public/static}/legacy/images/favicon.ico (100%) rename {static => public/static}/legacy/images/footer-logo-alt.png (100%) rename {static => public/static}/legacy/images/footer-logo.png (100%) rename {static => public/static}/legacy/images/forkme.png (100%) rename {static => public/static}/legacy/images/home-icons.png (100%) rename {static => public/static}/legacy/images/icons-interior.png (100%) rename {static => public/static}/legacy/images/icons.png (100%) rename {static => public/static}/legacy/images/joyent-logo_orange_nodeorg-01.png (100%) rename {static => public/static}/legacy/images/linkedin-logo.png (100%) rename {static => public/static}/legacy/images/logo-header.png (100%) rename {static => public/static}/legacy/images/logo-light.png (100%) rename {static => public/static}/legacy/images/logo-light.svg (100%) rename {static => public/static}/legacy/images/logo.png (100%) rename {static => public/static}/legacy/images/logo.svg (100%) rename {static => public/static}/legacy/images/microsoft-logo.png (100%) rename {static => public/static}/legacy/images/not-invented-here.png (100%) rename {static => public/static}/legacy/images/ryan-speaker.jpg (100%) rename {static => public/static}/legacy/images/sponsored.png (100%) rename {static => public/static}/legacy/images/stripe.png (100%) rename {static => public/static}/legacy/images/twitter-bird.png (100%) rename {static => public/static}/legacy/images/walmart-thumb.jpg (100%) rename {static => public/static}/legacy/images/yahoo-logo.png (100%) rename {static => public/static}/legacy/lfcollab.css (100%) rename {static => public/static}/legacy/pipe.css (100%) rename {static => public/static}/legacy/sh_javascript.min.js (100%) rename {static => public/static}/legacy/sh_main.js (100%) rename {static => public/static}/legacy/sh_vim-dark.css (100%) delete mode 100644 scripts/helpers/apidocslink.js delete mode 100644 scripts/helpers/betweenDate.js delete mode 100644 scripts/helpers/changeloglink.js delete mode 100644 scripts/helpers/equals.js delete mode 100644 scripts/helpers/json.js delete mode 100644 scripts/helpers/latestversion.js delete mode 100644 scripts/helpers/majorapidocslink.js delete mode 100644 scripts/helpers/release-schedule.js delete mode 100644 scripts/helpers/startswith.js delete mode 100644 scripts/helpers/strftime.js delete mode 100644 scripts/helpers/stripv.js delete mode 100755 scripts/load-versions.js create mode 100644 scripts/next-data/_helpers.mjs create mode 100644 scripts/next-data/generatePreBuildFiles.mjs create mode 100644 scripts/next-data/getBlogData.mjs create mode 100644 scripts/next-data/getLocalisationData.mjs create mode 100644 scripts/next-data/getNodeVersionData.mjs delete mode 100644 scripts/plugins/anchor-markdown-headings.js delete mode 100644 scripts/plugins/debug.js delete mode 100644 scripts/plugins/githubLinks.js delete mode 100644 scripts/plugins/hbsReg.js delete mode 100644 scripts/plugins/navigation.js delete mode 100644 scripts/plugins/scriptReg.js delete mode 100644 scripts/plugins/withPreserveLocale.js rename scripts/{helpers/downloads.js => release-post/downloadsTable.mjs} (77%) rename scripts/{release-post.js => release-post/index.mjs} (64%) mode change 100755 => 100644 rename scripts/{release.hbs => release-post/template.hbs} (67%) delete mode 100644 scripts/vnu-jar.js delete mode 100644 server.js create mode 100644 site.json delete mode 100644 source/nodejsVersions.md delete mode 100644 source/schedule.json delete mode 100644 source/versions.json delete mode 100644 static/images/favicons/apple-touch-icon.png delete mode 100644 static/images/favicons/favicon-16x16.png delete mode 100644 static/images/favicons/favicon-32x32.png delete mode 100644 static/images/favicons/favicon.ico delete mode 100644 static/images/favicons/safari-pinned-tab.svg delete mode 100644 static/js/main.js delete mode 100644 static/js/previousVersion.js delete mode 100644 static/js/themeSwitcher.js delete mode 100644 static/robots.txt rename {layouts/css => styles}/_base.scss (81%) rename {layouts/css => styles}/_utils.scss (95%) rename {layouts/css => styles}/_variables.scss (96%) rename {layouts/css => styles}/layout/_dark-theme.scss (96%) rename {layouts/css => styles}/layout/_grid.scss (100%) rename {layouts/css => styles}/layout/_lists.scss (86%) rename {layouts/css => styles}/layout/_main.scss (100%) rename {layouts/css => styles}/layout/_sticky-footer.scss (92%) rename {layouts/css => styles}/page-modules/_anchorLinks.scss (82%) rename {layouts/css => styles}/page-modules/_blog-index.scss (91%) rename {layouts/css => styles}/page-modules/_blog-post.scss (83%) rename {layouts/css => styles}/page-modules/_download.scss (97%) rename {layouts/css => styles}/page-modules/_footer.scss (100%) rename {layouts/css => styles}/page-modules/_header.scss (86%) rename {layouts/css => styles}/page-modules/_home.scss (72%) rename {layouts/css => styles}/page-modules/_jsfoundation.scss (100%) rename {layouts/css => styles}/page-modules/_prev-next-navigation.scss (79%) rename {layouts/css => styles}/page-modules/_scrollToTop.scss (92%) rename {layouts/css => styles}/styles.scss (68%) rename {layouts/css => styles}/vendor/prism-tomorrow.css (100%) delete mode 100644 tests/scripts/CHANGELOG.fixture.legacy.md delete mode 100644 tests/scripts/CHANGELOG.fixture.md delete mode 100644 tests/scripts/CHANGELOG.fixture.withconsole.md delete mode 100644 tests/scripts/anchor-mardown-headings.test.js delete mode 100644 tests/scripts/latestversion.test.js delete mode 100644 tests/scripts/release-post.test.js create mode 100644 theme.tsx create mode 100644 tsconfig.json create mode 100644 types/blog.ts create mode 100644 types/config.ts create mode 100644 types/features.ts create mode 100644 types/frontmatter.ts create mode 100644 types/i18n.ts create mode 100644 types/index.ts create mode 100644 types/layouts.ts create mode 100644 types/navigation.ts create mode 100644 types/nodeVersions.ts create mode 100644 util/dateIsBetween.ts create mode 100644 util/formatTime.ts create mode 100644 util/getNodeApiLink.ts create mode 100644 util/getNodeJsChangelog.ts create mode 100644 util/getTimeComponent.tsx create mode 100644 util/linkWithLocale.ts create mode 100644 util/sourceSansPro.ts diff --git a/.editorconfig b/.editorconfig index e85c3fc5982fe..c6c8b3621938a 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,13 +1,9 @@ -# https://editorconfig.org/ - root = true [*] indent_style = space indent_size = 2 end_of_line = lf -insert_final_newline = true +charset = utf-8 trim_trailing_whitespace = true - -[*.svg] -insert_final_newline = false +insert_final_newline = true diff --git a/.eslintignore b/.eslintignore index 0a78c7ae867ad..23d7ce3c80d86 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,4 +1,17 @@ -**/*.min.js -static/legacy/ -external/ -build/ +build +.next +external +styles +node_modules +public/en/user-survey-report +public/static/documents +public/static/legacy + +# These should be fixed in the future as the +# tests and scripts will be updated in this PR +tests + +# MDX Plugin enforces Prettier formatting which should +# be done in the future as we don't want to update the Markdown file +# contents right now +pages/**/*.md diff --git a/.eslintrc b/.eslintrc index a7d672df29d7a..1314b286eeaff 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,51 +1,72 @@ { - "extends": [ - "eslint:recommended", - "standard", - "prettier" - ], - "plugins": [ - "prettier" - ], - "rules": { - "prettier/prettier": "error" - }, + "extends": ["eslint:recommended", "next"], "overrides": [ { - "files": [ - "**/*.md" - ], - "plugins": [ - "markdown" - ], - "processor": "markdown/markdown" + "files": ["**/*.{mjs,js,jsx,ts,tsx}"], + "extends": ["plugin:prettier/recommended"], + "env": { "node": true, "es6": true } + }, + { + "files": ["**/*.{ts,tsx}"], + "globals": { "globalThis": false } + }, + { + "files": ["**/*.tsx"], + "rules": { + "react/no-unused-prop-types": "off", + "react/require-default-props": "off", + "react/jsx-props-no-spreading": "off", + "react-hooks/rules-of-hooks": "error", + "react-hooks/exhaustive-deps": "warn", + "consistent-return": "off", + "react/function-component-definition": [ + "error", + { + "namedComponents": "arrow-function", + "unnamedComponents": "arrow-function" + } + ], + "react/jsx-filename-extension": [ + 2, + { "extensions": [".js", ".jsx", ".ts", ".tsx"] } + ] + } + }, + { + "files": ["**/*.{md,mdx}"], + "extends": ["plugin:mdx/recommended"], + "settings": { "mdx/code-blocks": false }, + "rules": { "react/jsx-no-undef": "off", "no-useless-escape": "off" } }, { "files": [ - "**/*.md/*.js" + "pages/*/about/*.{md,mdx}", + "pages/*/download/*.{md,mdx}", + "pages/*/get-involved/*.{md,mdx}", + "pages/*/docs/*.{md,mdx}", + "pages/*/*.{md,mdx}" ], - "parserOptions": { - "ecmaVersion": "latest" - }, + "settings": { "mdx/code-blocks": true } + }, + { + "files": ["pages/**/*.{md,mdx}/*.{js,jsx,cjs,mjs,ts,tsx}"], "rules": { - "eqeqeq": "off", - "n/no-deprecated-api": "off", - "n/handle-callback-err": "off", - "no-const-assign": "off", + "camelcase": "off", + "@typescript-eslint/no-unused-vars": "off", + "consistent-return": "off", + "func-names": "off", + "import/extensions": "off", + "import/no-extraneous-dependencies": "off", + "import/no-unresolved": "off", + "no-console": "off", + "no-empty": "off", + "no-restricted-globals": "off", + "no-restricted-syntax": "off", "no-undef": "off", + "no-underscore-dangle": "off", "no-unused-expressions": "off", "no-unused-vars": "off", - "node/handle-callback-err": "off", - "node/no-deprecated-api": "off", - "prefer-const": "off", - "prettier/prettier": [ - "error", - { - "singleQuote": true, - "trailingComma": "none" - } - ], - "semi": ["error", "always"] + "prefer-promise-reject-errors": "off" } } ] diff --git a/.github/ISSUE_TEMPLATE/01-bug-report.yml b/.github/ISSUE_TEMPLATE/01-bug-report.yml index 4296d9ab9c8cd..d370614ef1c6e 100644 --- a/.github/ISSUE_TEMPLATE/01-bug-report.yml +++ b/.github/ISSUE_TEMPLATE/01-bug-report.yml @@ -11,37 +11,36 @@ body: for us to fix it when you attach a screenshot as well. - type: input attributes: - label: "URL:" + label: 'URL:' description: The URL of the page you are reporting an issue on. placeholder: https://nodejs.org/en/ validations: required: true - type: input attributes: - label: "Browser Name:" - description: What kind of browser are you using? + label: 'Browser Name:' + description: What kind of browser are you using? placeholder: Chrome validations: required: true - type: input attributes: - label: "Browser Version:" + label: 'Browser Version:' description: What version of browser are you using? - placeholder: "103.0.5060.134" + placeholder: '103.0.5060.134' validations: required: true - type: input attributes: - label: "Operation System:" - description: - What kind of operation system are you using + label: 'Operation System:' + description: What kind of operation system are you using (Write it in full, with version number)? - placeholder: "Windows 10, 21H2, 19044.1826" + placeholder: 'Windows 10, 21H2, 19044.1826' validations: required: true - type: textarea attributes: - label: "How to reproduce the issue:" + label: 'How to reproduce the issue:' placeholder: | 1. What I did. 2. What I expected to happen. diff --git a/.github/ISSUE_TEMPLATE/02-feature-request.yml b/.github/ISSUE_TEMPLATE/02-feature-request.yml index 4ba32b7ac8354..24dbbaf44bcd9 100644 --- a/.github/ISSUE_TEMPLATE/02-feature-request.yml +++ b/.github/ISSUE_TEMPLATE/02-feature-request.yml @@ -12,7 +12,7 @@ body: so it might be a good idea to check out our plans there as well: https://github.com/nodejs/nodejs.dev/issues/. - type: textarea attributes: - label: "Enter your suggestions in details:" + label: 'Enter your suggestions in details:' placeholder: | 1. What I expected to happen. 2. Your reason (if possible, images or videos are welcome). diff --git a/.github/ISSUE_TEMPLATE/03-i18n.yml b/.github/ISSUE_TEMPLATE/03-i18n.yml index 6ad3d9daf672c..e533f17507796 100644 --- a/.github/ISSUE_TEMPLATE/03-i18n.yml +++ b/.github/ISSUE_TEMPLATE/03-i18n.yml @@ -10,7 +10,7 @@ body: to create a new localization team. - type: textarea attributes: - label: "Enter your issue on localizations here:" + label: 'Enter your issue on localizations here:' placeholder: | 1. The name of the team (e.g: nodejs/node-cn). 2. Any problems to report or you want to create it? diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 774051b2278c7..c828ff0df135e 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,12 +1,12 @@ version: 2 updates: - package-ecosystem: github-actions - directory: "/" + directory: '/' schedule: interval: weekly open-pull-requests-limit: 10 - package-ecosystem: npm - directory: "/" + directory: '/' schedule: interval: weekly open-pull-requests-limit: 10 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5dada5c8f742c..a9a1d9441b936 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,7 +22,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v3 with: - node-version: "lts/*" + node-version-file: '.nvmrc' cache: npm - name: Install npm dependencies @@ -31,9 +31,9 @@ jobs: - name: Lint run: | echo "::add-matcher::.github/workflows/remark-lint-problem-matcher.json" - npm run test:lint + npm run lint - test: + build: name: Node on ${{ matrix.os }} runs-on: ${{ matrix.os }} @@ -49,28 +49,47 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v3 with: - node-version: "lts/*" + node-version-file: '.nvmrc' cache: npm - - run: java -version - - - name: Install npm dependencies + - name: Install NPM dependencies run: npm ci - - name: Build - run: npm run build - - - name: Run unit tests - run: npm run test:unit + - name: Restore Next.js cache + uses: actions/cache/restore@v3 + with: + path: | + ${{ github.workspace }}/.next/cache + key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}- - - name: Run HTML validator - run: npm run test:html + - name: Build Next.js + run: npm run build + env: + NODE_OPTIONS: '--max_old_space_size=4096' - - name: Run linkinator - uses: JustinBeckwith/linkinator-action@v1 + - name: Save Next.js cache + uses: actions/cache/save@v3 with: - linksToSkip: "^(?!http://localhost)" - paths: en - recurse: true - serverRoot: build - verbosity: error + path: | + ${{ github.workspace }}/.next/cache + key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('.next/cache/eslint') }} + + - name: Export Next.js + run: npm run export + + # We don't generate non-translated pages. So if a certain page on /en/ exists + # but not on /de/ or any other language, it will 404. This is handled on nginx level + # Prior to this migration Metalsmith would copy the English version of a page to all + # the non-translated pages. "Fooling" the 404 by basically adding i18n context with + # an untranslated page. This would be very exhaustive with Next.js on SCG mode + # but it's something we want to do once we decide upon using Next.js on SSR mode or + # if we decide upon using Vercel's infrastructure as generating a copy of every English page + # on the file system is very resource exhaustive. + # - name: Run linkinator + # uses: JustinBeckwith/linkinator-action@v1 + # with: + # linksToSkip: '^(?!http://localhost)' + # paths: en + # recurse: true + # serverRoot: build + # verbosity: error diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 93e877256c86b..bbc767c9a9e40 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -1,4 +1,4 @@ -name: "CodeQL" +name: 'CodeQL' on: push: @@ -8,7 +8,7 @@ on: branches: - main schedule: - - cron: "0 0 * * 0" + - cron: '0 0 * * 0' workflow_dispatch: jobs: @@ -27,7 +27,7 @@ jobs: - name: Initialize CodeQL uses: github/codeql-action/init@v2 with: - languages: "javascript" + languages: 'javascript' - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v2 diff --git a/.gitignore b/.gitignore index c648057343c34..873453a7e4270 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,3 @@ -# Generated HTML and other static files -build/ # Commonly ignored Node.js files node_modules/ npm-debug.log @@ -10,7 +8,13 @@ npm-debug.log .AppleDouble .LSOverride -# Netlify -.netlify +# Next.js files +.next +build +public/sitemap.xml +public/en/feed/*.xml +pages/en/blog/year-[0-9][0-9][0-9][0-9].md -.cache/ +# ESLint Cache Files +.eslintjscache +.eslintmdcache diff --git a/.mailmap b/.mailmap deleted file mode 100644 index ce9ed4e2b3ee1..0000000000000 --- a/.mailmap +++ /dev/null @@ -1 +0,0 @@ -Mary Marchini diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000000000..a77793ecc5200 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +lts/hydrogen diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000000000..23d7ce3c80d86 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,17 @@ +build +.next +external +styles +node_modules +public/en/user-survey-report +public/static/documents +public/static/legacy + +# These should be fixed in the future as the +# tests and scripts will be updated in this PR +tests + +# MDX Plugin enforces Prettier formatting which should +# be done in the future as we don't want to update the Markdown file +# contents right now +pages/**/*.md diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000000000..867a6097eeb5d --- /dev/null +++ b/.prettierrc @@ -0,0 +1,12 @@ +{ + "printWidth": 80, + "tabWidth": 2, + "useTabs": false, + "semi": true, + "singleQuote": true, + "jsxSingleQuote": false, + "trailingComma": "es5", + "bracketSpacing": true, + "bracketSameLine": false, + "arrowParens": "avoid" +} diff --git a/.prettierrc.json b/.prettierrc.json deleted file mode 100644 index 0fbddb05993d9..0000000000000 --- a/.prettierrc.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "overrides": [ - { - "files":[ - "**/*.js" - ], - "options": { - "singleQuote": true, - "trailingComma": "none" - } - } - ] -} diff --git a/.remarkignore b/.remarkignore deleted file mode 100644 index 2b569d27b58d7..0000000000000 --- a/.remarkignore +++ /dev/null @@ -1,4 +0,0 @@ -# We don't need to check all the md files under 'test/scripts' -# Because they are for test ONLY - -tests/scripts/ diff --git a/.remarkrc b/.remarkrc index 89bb6a54f34e8..c7ef88977fc9e 100644 --- a/.remarkrc +++ b/.remarkrc @@ -1,14 +1,38 @@ { "plugins": [ - "remark-frontmatter", "remark-preset-lint-node", - ["remark-lint-fenced-code-flag", false], - ["remark-lint-first-heading-level", false], - ["remark-lint-maximum-line-length", false], - ["remark-lint-no-file-name-articles", false], - ["remark-lint-no-literal-urls", false], - ["remark-lint-no-undefined-references", false], - ["remark-lint-prohibited-strings", false], - ["remark-preset-lint-node/remark-lint-nodejs-links.js", false] + "preset-prettier", + [ + "remark-lint-fenced-code-flag", + false + ], + [ + "remark-lint-first-heading-level", + false + ], + [ + "remark-lint-maximum-line-length", + false + ], + [ + "remark-lint-no-file-name-articles", + false + ], + [ + "remark-lint-no-literal-urls", + false + ], + [ + "remark-lint-no-undefined-references", + false + ], + [ + "remark-lint-prohibited-strings", + false + ], + [ + "remark-preset-lint-node/remark-lint-nodejs-links.js", + false + ] ] } diff --git a/.stylelintignore b/.stylelintignore index 5021b0283305d..988c07b6516f9 100644 --- a/.stylelintignore +++ b/.stylelintignore @@ -1,2 +1,2 @@ -/build/ -**/vendor/ +build +public diff --git a/.stylelintrc b/.stylelintrc index 7d578a7d42f52..a582d6bed2b5c 100644 --- a/.stylelintrc +++ b/.stylelintrc @@ -1,12 +1,13 @@ { - "extends": [ - "stylelint-config-twbs-bootstrap" - ], + "extends": ["stylelint-config-recommended-scss"], + "plugins": ["stylelint-order", "stylelint-selector-bem-pattern"], "rules": { - "declaration-no-important": null, - "order/properties-order": null, - "selector-max-id": 1, - "selector-max-type": null, - "selector-no-qualifying-type": null + "order/properties-alphabetical-order": true, + "no-descending-specificity": null, + "scss/at-extend-no-missing-placeholder": null, + "selector-pseudo-class-no-unknown": [ + true, + { "ignorePseudoClasses": ["global"] } + ] } } diff --git a/CODEOWNERS b/CODEOWNERS index 4463b482983fd..6bb1b99a25338 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1,18 +1,19 @@ # Localization teams -/locale/ar/ @nodejs/nodejs-ar -/locale/ca/ # No Catalan team -/locale/de/ @nodejs/nodejs-de -/locale/es/ @nodejs/nodejs-es -/locale/fa/ @nodejs/nodejs-fa -/locale/fr/ @nodejs/nodejs-fr -/locale/gl/ # No Galacian team -/locale/it/ @nodejs/nodejs-it -/locale/ja/ @nodejs/nodejs-ja -/locale/ko/ @nodejs/nodejs-ko -/locale/pt-br/ @nodejs/nodejs-pt -/locale/ro/ @nodejs/nodejs-ro -/locale/ru/ @nodejs/nodejs-ru -/locale/tr/ @nodejs/nodejs-tr -/locale/uk/ @nodejs/nodejs-uk -/locale/zh-cn/ @nodejs/nodejs-cn -/locale/zh-tw/ @nodejs/nodejs-tw + +/pages/ar/ @nodejs/nodejs-ar +/pages/ca/ # No Catalan team +/pages/de/ @nodejs/nodejs-de +/pages/es/ @nodejs/nodejs-es +/pages/fa/ @nodejs/nodejs-fa +/pages/fr/ @nodejs/nodejs-fr +/pages/gl/ # No Galacian team +/pages/it/ @nodejs/nodejs-it +/pages/ja/ @nodejs/nodejs-ja +/pages/ko/ @nodejs/nodejs-ko +/pages/pt-br/ @nodejs/nodejs-pt +/pages/ro/ @nodejs/nodejs-ro +/pages/ru/ @nodejs/nodejs-ru +/pages/tr/ @nodejs/nodejs-tr +/pages/uk/ @nodejs/nodejs-uk +/pages/zh-cn/ @nodejs/nodejs-cn +/pages/zh-tw/ @nodejs/nodejs-tw diff --git a/COLLABORATOR_GUIDE.md b/COLLABORATOR_GUIDE.md index a88b692b9c26c..602566ee507d5 100644 --- a/COLLABORATOR_GUIDE.md +++ b/COLLABORATOR_GUIDE.md @@ -1,16 +1,14 @@ # Node.js Collaborator Guide -* [Issues and Pull Requests](#issues-and-pull-requests) -* [Accepting Modifications](#accepting-modifications) - * [Involving the Website Group](#involving-the-website-group) -* [Developer's Certificate of Origin 1.1](#developers-certificate-of-origin-11) -* [Code of Conduct](#code-of-conduct) -* [Code editing](#code-editing) - * [Adding new pages](#adding-new-pages) - * [Create the page content](#create-the-page-content) - * [Update locale site.json to add link attributes](#update-locale-sitejson-to-add-link-attributes) - * [Update the layout to add a link](#update-the-layout-to-add-a-link) - * [Translating pages](#translating-pages) +- [Issues and Pull Requests](#issues-and-pull-requests) +- [Accepting Modifications](#accepting-modifications) + - [Involving the Website Group](#involving-the-website-group) +- [Developer's Certificate of Origin 1.1](#developers-certificate-of-origin-11) +- [Code of Conduct](#code-of-conduct) +- [Code editing](#code-editing) + - [Adding new pages](#adding-new-pages) + - [Create the page content](#create-the-page-content) + - [Translating pages](#translating-pages) This document contains information for Collaborators of the Node.js website project regarding maintaining the code, documentation and issues. @@ -70,7 +68,7 @@ lack of consensus may indicate the need to elevate discussion to the Website Group for resolution (see below). All bugfixes require a test case which demonstrates the defect. The -test should *fail* before the change, and *pass* after the change. +test should _fail_ before the change, and _pass_ after the change. All pull requests that modify executable code should be subjected to continuous integration tests on the @@ -82,9 +80,9 @@ Collaborators may opt to elevate pull requests or issues to the group for discussion by mentioning `@nodejs/website`. This should be done where a pull request: -* has a significant impact on the codebase, -* is inherently controversial; or -* has failed to reach consensus amongst the Collaborators who are +- has a significant impact on the codebase, +- is inherently controversial; or +- has failed to reach consensus amongst the Collaborators who are actively participating in the discussion. The Website group should serve as the final arbiter where required. @@ -93,11 +91,11 @@ The Website group should serve as the final arbiter where required. By making a contribution to this project, I certify that: -* (a) The contribution was created in whole or in part by me and I +- (a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or -* (b) The contribution is based upon previous work that, to the best +- (b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part @@ -105,11 +103,11 @@ By making a contribution to this project, I certify that: permitted to submit under a different license), as indicated in the file; or -* (c) The contribution was provided directly to me by some other +- (c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it. -* (d) I understand and agree that this project and the contribution +- (d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with @@ -120,35 +118,35 @@ By making a contribution to this project, I certify that: This Code of Conduct is adapted from [Rust's wonderful CoC](https://github.com/rust-lang/rust/wiki/Note-development-policy#conduct). -* We are committed to providing a friendly, safe and welcoming +- We are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, sexual orientation, disability, ethnicity, religion, or similar personal characteristic. -* Please avoid using overtly sexual nicknames or other nicknames that +- Please avoid using overtly sexual nicknames or other nicknames that might detract from a friendly, safe and welcoming environment for all. -* Please be kind and courteous. There's no need to be mean or rude. -* Respect that people have differences of opinion and that every +- Please be kind and courteous. There's no need to be mean or rude. +- Respect that people have differences of opinion and that every design or implementation choice carries a trade-off and numerous costs. There is seldom a right answer. -* Please keep unstructured critique to a minimum. If you have solid +- Please keep unstructured critique to a minimum. If you have solid ideas you want to experiment with, make a fork and see how it works. -* We will exclude you from interaction if you insult, demean or harass +- We will exclude you from interaction if you insult, demean or harass anyone. That is not welcome behavior. We interpret the term "harassment" as including the definition in the [Citizen Code of Conduct](http://citizencodeofconduct.org/); if you have any lack of clarity about what might be included in that concept, please read their definition. In particular, we don't tolerate behavior that excludes people in socially marginalized groups. -* Private harassment is also unacceptable. No matter who you are, if +- Private harassment is also unacceptable. No matter who you are, if you feel you have been or are being harassed or made uncomfortable by a community member, please contact one of the channel ops or any of the TC members immediately with a capture (log, photo, email) of the harassment if possible. Whether you're a regular contributor or a newcomer, we care about making this community a safe place for you and we've got your back. -* Likewise any spamming, trolling, flaming, baiting or other +- Likewise any spamming, trolling, flaming, baiting or other attention-stealing behavior is not welcome. -* Avoid the use of personal pronouns in code comments or +- Avoid the use of personal pronouns in code comments or documentation. There is no need to address persons when explaining code (e.g. "When the developer") @@ -157,12 +155,11 @@ CoC](https://github.com/rust-lang/rust/wiki/Note-development-policy#conduct). ### Adding new pages 1. Create new page content including the layout, title and copy. -2. Update `/locale/en/site.json` to provide page link attributes. -3. Update the relevant `/layout` to add a link to the new page. +2. Update the relevant `/layout` to add a link to the new page. #### Create the page content -Create a new markdown file in `/local/en`. As specified in the +Create a new markdown file in `/pages/en`. As specified in the [README.md](./README.md#layout), initial development happens in English. At the top of the markdown file, set a page the title and layout. @@ -176,27 +173,6 @@ layout: contribute.hbs [Event copy goes here] ``` -#### Update locale site.json to add link attributes - -Open `local/en/site.json` and find the appropriate page structure. -Add a new object defining the link attributes. - -```json -"event": { - "link": "get-involved/events", - "text": "Events" -} -``` - -#### Update the layout to add a link - -Using the example layout, open `/layouts/contribute.hbs` and add your new -link to the markup. It's essential to update the handlebars paths to site.json. - -```handlebars -{{site.locale}}/{{site.getinvolved.events.link}} -``` - ### Translating pages See [TRANSLATION.md](./TRANSLATION.md) for the website translation policy. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6c1fa597134e0..6c6e346416384 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,8 +8,8 @@ expectations the Node Foundation requires of its contributors. ## Vocabulary -* A **Contributor** is any individual creating or commenting on an issue or pull request. -* A **Collaborator** is a subset of contributors who have been given write access to the repository. +- A **Contributor** is any individual creating or commenting on an issue or pull request. +- A **Collaborator** is a subset of contributors who have been given write access to the repository. ## Logging Issues diff --git a/README.md b/README.md index de55448c67f50..cb91dbaa24021 100644 --- a/README.md +++ b/README.md @@ -23,13 +23,13 @@ In both cases the workflow is different, please check how it is done in each cas Please contribute! There are plenty of [good first issues](https://github.com/nodejs/nodejs.org/labels/good%20first%20issue) to work on. To get started, you have to [fork](https://github.com/nodejs/nodejs.org/fork) this repo to your own GitHub account first. Then open up a terminal on your machine and enter the following commands: ```bash -git clone https://github.com//nodejs.org.git +git clone https://github.com/{your username}/nodejs.org cd nodejs.org -npm install -npm start +npm ci +npm run serve ``` -This will start the development server on `http://localhost:8080/en/`. This page should reload automatically when you make changes to the code, but no code is perfect, so sometimes you may need to restart it. :) +This will start the development server on `http://localhost:3000/en/`. This page should reload automatically when you make changes to the code, but no code is perfect, so sometimes you may need to restart it. :) If you want to submit a new feature or a bugfix, the best way is to create the changes in a separate branch, e.g.: `git checkout -b feature/mycoolfeature`. This will make it easier for you to submit a pull request and get your feature merged. @@ -45,40 +45,35 @@ To help with localization, please read the [TRANSLATION](TRANSLATION.md) guide. ## Layout -* Page templates are in `/layouts` -* Global styles are in `/layouts/css` -* Global static files are in `/static` -* All content is in `/locale` - * Initial development usually happens in English: `/locale/en` - * `/locale/{{locale}}/site.json` is where global localization information lives. - * All content is in Markdown and is per locale. - * The top of each Markdown file is a block of YAML for page specific localization information that is passed to various templates. - * The bulk of the Markdown content for each page is referenced as `{{{content}}}` in the corresponding template. +- Page templates are in `/layouts` +- Global styles are in `/layouts/css` +- Global static files are in `/static` +- All content is in `/pages` + - Initial development usually happens in English: `/pages/en` + - `/i18n/locales/{{locale}}.json` is where global localization information lives. + - All content is in Markdown and is per locale. + - The top of each Markdown file is a block of YAML for page specific localization information that is passed to various templates. + - The bulk of the Markdown content for each page is referenced as `{{{content}}}` in the corresponding template. ## Serve/Build Options -* `DEFAULT_LOCALE={{locale}} node build.js` builds all the translated files present in the locale folder (will display 404 status code if file is not present), the static/css folder for all the Sass files, as well as copy the rest of the static assets to their subfolder in the build directory. -* `DEFAULT_LOCALE={{locale}} node build.js --preserveLocale` the same as `node build.js` but it will add the pages present in the English locale that are missing instead of throwing 404 status code. -* `DEFAULT_LOCALE={{locale}} npm run serve` builds only the files present in the specified locale folder (will display 404 status code if file is not present), then start the default website (`http://localhost:${port}/${mainLocale}`). Here `{port}` is 8080, `{mainLocale}` is `en` or the first specified language. -* `DEFAULT_LOCALE={{locale}} npm run serve -- --preserveLocale` the same as `npm run serve ` but it will add the pages present in the English locale that are missing. -* `npm run serve` builds all the current languages and returns 404 when a file is not present in the current locale, then start the default website (`http://localhost:${port}/${mainLocale}`). Here `{port}` is 8080, `{mainLocale}` is `en` in default. -* `npm run serve -- --preserveLocale` the same as `npm run serve` but it will add the pages present in the English locale that are missing instead of throwing 404 status code. +- `npm run serve` runs Next.js's Local Development Server, listening by default on `http://localhost:3000/`. +- `npm run build` builds the Application on Production mode. The output is by default within `.next` folder. +- `npm run export` exports the website from the `.next` into a fully static website. The output is by default within `build` folder. + - This is what it's used to deploy the website on our current Node.js servers. +- `npm run start` starts a web server running serving the built content from `npm run build` -## Test Options +## Other CLI options -Before submitting, you must pass all the unit tests and syntax checks by running the two commands below: +We also offer other commands that offer you assistance during your local development -* `npm-run-all test:lint test:unit` run all the unit test cases in `tests` folder, as well as check syntax with eslint. -* `npm-run-all --parallel test:lint:*` run all the syntax checks for `js`, `md` and other related files. - -There're also two syntax check commands for you: -* `npm run test:lint:js -- --fix` try to automatically fix some formations for all the js files. -* `npm run test:lint:stylelint -- --fix` try to automatically fix some formations for all the css/scss files. - -## Notice - -* Multiple locales can be built by using comma-separated values in the `DEFAULT_LOCALE` variable: `DEFAULT_LOCALE=en,es,it`. -* For other options, see `package.json`. +- `npm run lint` runs the linter for all the js files. + - `npm run lint:fix` attempts to fix any linting errors +- `npm run prettier` runs the prettier for all the js files. + - `npm run prettier:fix` attempts to fix any style errors +- `npm run format` formats and fixes the whole codebase +- `npm run scripts:release-post` generates a release post for the current release + - **Usage:** `npm run scripts:release-post -- --version=vXX.X.X --force` ## Deployment @@ -91,5 +86,5 @@ The Website Working Group is primarily concerned with the code and overall struc The content of the website comes from a variety of working groups (Evangelism, Core, i18n, etc). The Website WG defers to these WGs on matters of content and routinely adds collaborators from these working groups as they add and improve content on the website. In other words, the Website WG is not -an *editorial* Working Group except when no other Working Group has taken responsibility for a +an _editorial_ Working Group except when no other Working Group has taken responsibility for a content area. diff --git a/TRANSLATION.md b/TRANSLATION.md index 7007778270e08..1cdbc9b5a7224 100644 --- a/TRANSLATION.md +++ b/TRANSLATION.md @@ -25,40 +25,40 @@ An existing localization group is not required to start translation. You can con Contact your appropriate localization group, and discuss with them the best possible way to contribute. A list of the localization groups can be found below. -* [`nodejs-ar`](https://github.com/nodejs/nodejs-ar) Arabic Community -* [`nodejs-bg`](https://github.com/nodejs/nodejs-bg) Bulgarian Community -* [`nodejs-bn`](https://github.com/nodejs/nodejs-bn) Bengali Community -* [`nodejs-zh-CN`](https://github.com/nodejs/nodejs-zh-CN) Chinese Community -* [`nodejs-cs`](https://github.com/nodejs/nodejs-cs) Czech Community -* [`nodejs-da`](https://github.com/nodejs/nodejs-da) Danish Community -* [`nodejs-de`](https://github.com/nodejs/nodejs-de) German Community -* [`nodejs-el`](https://github.com/nodejs/nodejs-el) Greek Community -* [`nodejs-es`](https://github.com/nodejs/nodejs-es) Spanish Community -* [`nodejs-fa`](https://github.com/nodejs/nodejs-fa) Persian Community -* [`nodejs-fi`](https://github.com/nodejs/nodejs-fi) Finnish Community -* [`nodejs-fr`](https://github.com/nodejs/nodejs-fr) French Community -* [`nodejs-he`](https://github.com/nodejs/nodejs-he) Hebrew Community -* [`nodejs-hi`](https://github.com/nodejs/nodejs-hi) Hindi Community -* [`nodejs-hu`](https://github.com/nodejs/nodejs-hu) Hungarian Community -* [`nodejs-id`](https://github.com/nodejs/nodejs-id) Indonesian Community -* [`nodejs-it`](https://github.com/nodejs/nodejs-it) Italian Community -* [`nodejs-ja`](https://github.com/nodejs/nodejs-ja) Japanese Community -* [`nodejs-ka`](https://github.com/nodejs/nodejs-ka) Georgian Community -* [`nodejs-ko`](https://github.com/nodejs/nodejs-ko) Korean Community -* [`nodejs-mk`](https://github.com/nodejs/nodejs-mk) Macedonian Community -* [`nodejs-ms`](https://github.com/nodejs/nodejs-ms) Malaysian Community -* [`nodejs-nl`](https://github.com/nodejs/nodejs-nl) Dutch Community -* [`nodejs-no`](https://github.com/nodejs/nodejs-no) Norwegian Community -* [`nodejs-pl`](https://github.com/nodejs/nodejs-pl) Polish Community -* [`nodejs-pt`](https://github.com/nodejs/nodejs-pt) Portuguese Community -* [`nodejs-ro`](https://github.com/nodejs/nodejs-ro) Romanian Community -* [`nodejs-ru`](https://github.com/nodejs/nodejs-ru) Russian Community -* [`nodejs-sv`](https://github.com/nodejs/nodejs-sv) Swedish Community -* [`nodejs-ta`](https://github.com/nodejs/nodejs-ta) Tamil Community -* [`nodejs-tr`](https://github.com/nodejs/nodejs-tr) Turkish Community -* [`nodejs-zh-TW`](https://github.com/nodejs/nodejs-zh-TW) Taiwanese Community -* [`nodejs-uk`](https://github.com/nodejs/nodejs-uk) Ukrainian Community -* [`nodejs-vi`](https://github.com/nodejs/nodejs-vi) Vietnamese Community +- [`nodejs-ar`](https://github.com/nodejs/nodejs-ar) Arabic Community +- [`nodejs-bg`](https://github.com/nodejs/nodejs-bg) Bulgarian Community +- [`nodejs-bn`](https://github.com/nodejs/nodejs-bn) Bengali Community +- [`nodejs-zh-CN`](https://github.com/nodejs/nodejs-zh-CN) Chinese Community +- [`nodejs-cs`](https://github.com/nodejs/nodejs-cs) Czech Community +- [`nodejs-da`](https://github.com/nodejs/nodejs-da) Danish Community +- [`nodejs-de`](https://github.com/nodejs/nodejs-de) German Community +- [`nodejs-el`](https://github.com/nodejs/nodejs-el) Greek Community +- [`nodejs-es`](https://github.com/nodejs/nodejs-es) Spanish Community +- [`nodejs-fa`](https://github.com/nodejs/nodejs-fa) Persian Community +- [`nodejs-fi`](https://github.com/nodejs/nodejs-fi) Finnish Community +- [`nodejs-fr`](https://github.com/nodejs/nodejs-fr) French Community +- [`nodejs-he`](https://github.com/nodejs/nodejs-he) Hebrew Community +- [`nodejs-hi`](https://github.com/nodejs/nodejs-hi) Hindi Community +- [`nodejs-hu`](https://github.com/nodejs/nodejs-hu) Hungarian Community +- [`nodejs-id`](https://github.com/nodejs/nodejs-id) Indonesian Community +- [`nodejs-it`](https://github.com/nodejs/nodejs-it) Italian Community +- [`nodejs-ja`](https://github.com/nodejs/nodejs-ja) Japanese Community +- [`nodejs-ka`](https://github.com/nodejs/nodejs-ka) Georgian Community +- [`nodejs-ko`](https://github.com/nodejs/nodejs-ko) Korean Community +- [`nodejs-mk`](https://github.com/nodejs/nodejs-mk) Macedonian Community +- [`nodejs-ms`](https://github.com/nodejs/nodejs-ms) Malaysian Community +- [`nodejs-nl`](https://github.com/nodejs/nodejs-nl) Dutch Community +- [`nodejs-no`](https://github.com/nodejs/nodejs-no) Norwegian Community +- [`nodejs-pl`](https://github.com/nodejs/nodejs-pl) Polish Community +- [`nodejs-pt`](https://github.com/nodejs/nodejs-pt) Portuguese Community +- [`nodejs-ro`](https://github.com/nodejs/nodejs-ro) Romanian Community +- [`nodejs-ru`](https://github.com/nodejs/nodejs-ru) Russian Community +- [`nodejs-sv`](https://github.com/nodejs/nodejs-sv) Swedish Community +- [`nodejs-ta`](https://github.com/nodejs/nodejs-ta) Tamil Community +- [`nodejs-tr`](https://github.com/nodejs/nodejs-tr) Turkish Community +- [`nodejs-zh-TW`](https://github.com/nodejs/nodejs-zh-TW) Taiwanese Community +- [`nodejs-uk`](https://github.com/nodejs/nodejs-uk) Ukrainian Community +- [`nodejs-vi`](https://github.com/nodejs/nodejs-vi) Vietnamese Community ### Group for my locale does not exist @@ -73,4 +73,4 @@ If you can't find group for your locale: If you find the group for your locale is archived: 1. Try to contact members of the group by creating a [new issue](https://github.com/nodejs/nodejs.org/issues/new?template=03-i18n.md) in this repo. Include a mention of the group so members get notified of the issue. -2. If there is no response from members in 7 days and if you have already done 1000 strings or more on Crowdin for your locale, open an issue in https://github.com/nodejs/admin requesting the repository be unarchived. +2. If there is no response from members in 7 days and if you have already done 1000 strings or more on Crowdin for your locale, open an issue in requesting the repository be unarchived. diff --git a/build.js b/build.js deleted file mode 100755 index eba639e7beb69..0000000000000 --- a/build.js +++ /dev/null @@ -1,350 +0,0 @@ -#! /usr/bin/env node - -'use strict'; - -// BUILD.JS: This file is responsible for building static HTML pages - -const fs = require('fs'); -const gracefulFs = require('graceful-fs'); - -// This is needed at least on Windows to prevent the `EMFILE: too many open files` error -// https://github.com/isaacs/node-graceful-fs#global-patching -gracefulFs.gracefulify(fs); - -const path = require('path'); -const Metalsmith = require('metalsmith'); -const collections = require('metalsmith-collections'); -const feed = require('metalsmith-feed'); -const layouts = require('metalsmith-layouts'); -const markdown = require('@metalsmith/markdown'); -const permalinks = require('@metalsmith/permalinks'); -const pagination = require('metalsmith-yearly-pagination'); -const defaultsDeep = require('lodash.defaultsdeep'); -const autoprefixer = require('autoprefixer'); -const { marked } = require('marked'); -const postcss = require('postcss'); -const sass = require('sass'); -const junk = require('junk'); -const semver = require('semver'); -const replace = require('metalsmith-one-replace'); -const fsExtra = require('fs-extra'); - -const githubLinks = require('./scripts/plugins/githubLinks'); -const navigation = require('./scripts/plugins/navigation'); -const anchorMarkdownHeadings = require('./scripts/plugins/anchor-markdown-headings'); -const loadVersions = require('./scripts/load-versions'); -const latestVersion = require('./scripts/helpers/latestversion'); -const withPreserveLocale = require('./scripts/plugins/withPreserveLocale'); -const scriptReg = require('./scripts/plugins/scriptReg'); -const hbsReg = require('./scripts/plugins/hbsReg'); - -// Set the default language, also functions as a fallback for properties which -// are not defined in the given language. -const DEFAULT_LANG = 'en'; - -// The history links of nodejs versions at doc/index.md -const nodejsVersionsContent = fs - .readFileSync('./source/nodejsVersions.md') - .toString(); - -// Set up the Markdown renderer that we'll use for our Metalsmith build process. -const renderer = new marked.Renderer(); -renderer.heading = anchorMarkdownHeadings; -const markedOptions = { - renderer -}; - -// We are setting the output from `latestVersion` module here for future use. -// available props `latestVersionInfo` are `current` and `lts` -let latestVersionInfo = {}; - -// This function imports a given language file and uses the default language set -// in DEFAULT_LANG as a fallback to prevent any strings that aren't filled out -// from appearing as blank. -function i18nJSON(lang) { - const defaultJSON = require(`./locale/${DEFAULT_LANG}/site.json`); - const templateJSON = require(`./locale/${lang}/site.json`); - - return defaultsDeep({}, templateJSON, defaultJSON); -} - -// This function imports language file for each given locale in array 'localesList' -// and based on it generating locales data, which includes full language name, english language name, locale and link -function generateLocalesData(localesList) { - return localesList.map((localeEl) => { - const { - language, - languageEnglishVersion, - locale, - url - } = require(`./locale/${localeEl}/site.json`); - return { language, locale, url, languageEnglishVersion }; - }); -} - -// This is the function where the actual magic happens. This contains the main -// Metalsmith build cycle used for building a locale subsite, such as the -// english one. -function buildLocale(source, locale, opts) { - console.log(`[metalsmith] build/${locale} started`); - const labelForBuild = `[metalsmith] build/${locale} finished`; - console.time(labelForBuild); - const metalsmith = Metalsmith(__dirname); - metalsmith - // Sets global metadata imported from the locale's respective site.json. - .metadata({ - site: i18nJSON(locale), - project: source.project, - locales: opts.localesData - }) - // Sets the build source as the locale folder. - .source(path.join(__dirname, 'locale', locale)) - // site.json files aren't needed in the output dir - .ignore('site.json') - .use(withPreserveLocale(opts && opts.preserveLocale)) - // Extracts the main menu and sub-menu links form locale's site.json and - // adds them to the metadata. This data is used in the navigation template - .use(navigation(source.project.latestVersions)) - // Defines the blog post/guide collections used to internally group them for - // easier future handling and feed generation. - .use( - collections({ - blog: { - pattern: 'blog/**/*.md', - sortBy: 'date', - reverse: true, - refer: false - }, - blogReleases: { - pattern: 'blog/release/*.md', - sortBy: 'date', - reverse: true, - refer: false - }, - blogVulnerability: { - pattern: 'blog/vulnerability/*.md', - sortBy: 'date', - reverse: true, - refer: false - }, - knowledgeBase: { - pattern: 'knowledge/**/*.md', - refer: false - }, - guides: { - pattern: 'docs/guides/!(index).md' - } - }) - ) - .use( - pagination({ - path: 'blog/year', - iteratee: (post, idx) => ({ - post - }) - }) - ) - .use( - replace({ - actions: [ - { - type: 'var', - varValues: { - currentVersion: `latest-${latestVersionInfo.lts.nodeMajor}`, - nodeVersionLinks: nodejsVersionsContent - } - } - ] - }) - ) - .use(markdown(markedOptions)) - // Set pretty permalinks, we don't want .html suffixes everywhere. - .use( - permalinks({ - relative: false - }) - ) - // Generates the feed XML files from their respective collections which were - // defined earlier on. - .use( - feed({ - collection: 'blog', - destination: 'feed/blog.xml', - title: 'Node.js Blog' - }) - ) - .use( - feed({ - collection: 'blogReleases', - destination: 'feed/releases.xml', - title: 'Node.js Blog: Releases' - }) - ) - .use( - feed({ - collection: 'blogVulnerability', - destination: 'feed/vulnerability.xml', - title: 'Node.js Blog: Vulnerability Reports' - }) - ) - // Finally, this compiles the rest of the layouts present in ./layouts. - // They're language-agnostic, but have to be regenerated for every locale - // anyways. - .use(hbsReg()) - .use(scriptReg()) - .use(layouts()) - .use(githubLinks({ locale, site: i18nJSON(locale) })) - // Pipes the generated files into their respective subdirectory in the build - // directory. - .destination(path.join(__dirname, 'build', locale)) - // This actually executes the build and stops the internal timer after - // completion. - .build((err) => { - if (err) { - throw err; - } - console.timeEnd(labelForBuild); - }); -} - -// This function builds the static/css folder for all the Sass files. -async function buildCSS() { - console.log('[sass] static/css started'); - const labelForBuild = '[sass] static/css finished'; - console.time(labelForBuild); - - const src = path.join(__dirname, 'layouts/css/styles.scss'); - const sassOpts = { - outputStyle: - process.env.NODE_ENV !== 'development' ? 'compressed' : 'expanded' - }; - - const resultPromise = sass.compileAsync(src, sassOpts); - - const dest = path.join(__dirname, 'build/static/css/styles.css'); - - await fsExtra.promises.mkdir(path.join(__dirname, 'build/static/css'), { - recursive: true - }); - - const result = await resultPromise; - - postcss([autoprefixer]) - .process(result.css, { from: src }) - .then(async (res) => { - res.warnings().forEach((warn) => { - console.warn(warn.toString()); - }); - - await fsExtra.writeFile(dest, res.css); - console.timeEnd(labelForBuild); - }); -} - -// This function copies the rest of the static assets to their subfolder in the -// build directory. -async function copyStatic() { - console.log('[fsExtra] copy/static started'); - const labelForBuild = '[fsExtra] copy/static finished'; - console.time(labelForBuild); - - await fsExtra.promises.mkdir(path.join(__dirname, 'build/static/js'), { - recursive: true - }); - - await Promise.all([ - fsExtra.copy( - path.join(__dirname, 'static'), - path.join(__dirname, 'build/static'), - { overwrite: true, recursive: true } - ), - - fsExtra.copy( - path.join( - __dirname, - 'node_modules/jquery.fancytable/dist/fancyTable.min.js' - ), - path.join(__dirname, 'build/static/js/fancyTable.min.js'), - { overwrite: true } - ), - - fsExtra.copy( - path.join(__dirname, 'node_modules/jquery/dist/jquery.min.js'), - path.join(__dirname, 'build/static/js/jquery.min.js'), - { overwrite: true } - ) - ]); - - console.timeEnd(labelForBuild); -} - -function getSource(callback) { - // Loads all node/io.js versions. - loadVersions((err, versions) => { - latestVersionInfo = { - current: latestVersion.current(versions), - lts: latestVersion.lts(versions) - }; - const source = { - project: { - versions, - latestVersions: latestVersionInfo - } - }; - if ( - semver.gt( - source.project.latestVersions.lts.node, - source.project.latestVersions.current.node - ) - ) { - // If LTS is higher than Current hide it from the main page - source.project.latestVersions.hideCurrent = true; - } - - callback(err, source); - }); -} - -// This is where the build is orchestrated from, as indicated by the function -// name. It brings together all build steps and dependencies and executes them. -async function fullBuild(opts) { - const { selectedLocales, preserveLocale } = opts; - getSource(async (err, source) => { - if (err) { - throw err; - } - const locales = await fsExtra.promises.readdir( - path.join(__dirname, 'locale') - ); - - const filteredLocales = locales.filter( - (file) => - junk.not(file) && - (selectedLocales ? selectedLocales.includes(file) : true) - ); - const localesData = generateLocalesData(filteredLocales); - filteredLocales.forEach((locale) => { - buildLocale(source, locale, { preserveLocale, localesData }); - }); - }); -} - -// Starts the build if the file was executed from the command line -if (require.main === module) { - const preserveLocale = process.argv.includes('--preserveLocale'); - const selectedLocales = process.env.DEFAULT_LOCALE - ? process.env.DEFAULT_LOCALE.toLowerCase().split(',') - : process.env.DEFAULT_LOCALE; - // Copy static files - copyStatic(); - // Build CSS - buildCSS(); - fullBuild({ selectedLocales, preserveLocale }); -} - -exports.getSource = getSource; -exports.fullBuild = fullBuild; -exports.buildCSS = buildCSS; -exports.buildLocale = buildLocale; -exports.copyStatic = copyStatic; -exports.generateLocalesData = generateLocalesData; diff --git a/components/AnchoredHeading.tsx b/components/AnchoredHeading.tsx new file mode 100644 index 0000000000000..1eef61371920f --- /dev/null +++ b/components/AnchoredHeading.tsx @@ -0,0 +1,29 @@ +import type { PropsWithChildren } from 'react'; + +type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6; + +type AnchorHeadingProps = PropsWithChildren<{ + level: HeadingLevel; + id?: string; +}>; + +const AnchoredHeading = ({ children, level, id }: AnchorHeadingProps) => { + const HeadingLevelTag = `h${level}` as any; + + // This regex replacement is used for comments within the heading + const sanitizedId = id?.replace(/---(.+)---(.*)/, (_, f) => f); + + return ( + + {children} + + + ); +}; + +export default AnchoredHeading; diff --git a/components/Docs/NodeApiVersionLinks.tsx b/components/Docs/NodeApiVersionLinks.tsx new file mode 100644 index 0000000000000..af61b66803a07 --- /dev/null +++ b/components/Docs/NodeApiVersionLinks.tsx @@ -0,0 +1,64 @@ +import Link from 'next/link'; + +// Note.: This is a temporary Component used only until the transition to `nodejs/nodejs.dev` content is done +const NodeApiVersionLinks = () => ( +
    +
  • + Node.js 18.x +
  • +
  • + Node.js 17.x +
  • +
  • + Node.js 16.x +
  • +
  • + Node.js 15.x +
  • +
  • + Node.js 14.x +
  • +
  • + Node.js 13.x +
  • +
  • + Node.js 12.x +
  • +
  • + Node.js 11.x +
  • +
  • + Node.js 10.x +
  • +
  • + Node.js 9.x +
  • +
  • + Node.js 8.x +
  • +
  • + Node.js 7.x +
  • +
  • + Node.js 6.x +
  • +
  • + Node.js 5.x +
  • +
  • + Node.js 4.x +
  • +
  • + + Node.js 0.12.x + +
  • +
  • + + Node.js 0.10.x + +
  • +
+); + +export default NodeApiVersionLinks; diff --git a/components/Downloads/DownloadList.tsx b/components/Downloads/DownloadList.tsx new file mode 100644 index 0000000000000..abaedbaab34af --- /dev/null +++ b/components/Downloads/DownloadList.tsx @@ -0,0 +1,37 @@ +import { FormattedMessage } from 'react-intl'; +import Link from 'next/link'; + +import LocalisedLink from '../LocalisedLink'; +import { useNavigation } from '../../hooks/useNavigation'; + +import type { NodeVersionData } from '../../types'; + +type DownloadListProps = Pick; + +const DownloadList = (props: DownloadListProps) => { + const { getSideNavigation } = useNavigation(); + + const [, ...downloadNavigation] = getSideNavigation('download', { + shaSums: { nodeVersion: props.node }, + allDownloads: { nodeVersion: props.node }, + }); + + return ( +
+
    + {downloadNavigation.map((item, key) => ( +
  • + {item.text} + {item.key === 'shaSums' && ( + + + + )} +
  • + ))} +
+
+ ); +}; + +export default DownloadList; diff --git a/components/Downloads/DownloadReleasesTable.tsx b/components/Downloads/DownloadReleasesTable.tsx new file mode 100644 index 0000000000000..79a8505c6bb95 --- /dev/null +++ b/components/Downloads/DownloadReleasesTable.tsx @@ -0,0 +1,55 @@ +import { FormattedMessage } from 'react-intl'; +import Link from 'next/link'; + +import { getNodejsChangelog } from '../../util/getNodeJsChangelog'; +import { getNodeApiLink } from '../../util/getNodeApiLink'; + +import type { ExtendedNodeVersionData } from '../../types'; + +type DownloadReleasesTableProps = { releases: ExtendedNodeVersionData[] }; + +const DownloadReleasesTable = ({ releases }: DownloadReleasesTableProps) => ( + + + + + + + + + + + + + + {releases.map((release, key) => ( + + + + + + + + + + ))} + +
VersionLTSDateV8npm + NODE_MODULE_VERSION[1] + +
Node.js {release.nodeNumeric}{release.ltsName} + + {release.v8}{release.npm}{release.modules} + + + + + + + + + +
+); + +export default DownloadReleasesTable; diff --git a/components/Downloads/PrimaryDownloadMatrix.tsx b/components/Downloads/PrimaryDownloadMatrix.tsx new file mode 100644 index 0000000000000..bc79c1b22614a --- /dev/null +++ b/components/Downloads/PrimaryDownloadMatrix.tsx @@ -0,0 +1,222 @@ +import Link from 'next/link'; +import classNames from 'classnames'; + +import LocalisedLink from '../LocalisedLink'; +import { useNextraContext } from '../../hooks/useNextraContext'; + +import type { NodeVersionData, LegacyDownloadsFrontMatter } from '../../types'; + +type PrimaryDownloadMatrixProps = Pick< + NodeVersionData, + 'isLts' | 'node' | 'nodeNumeric' | 'npm' +>; + +// @TODO: Instead of using a static list it should be created dynamically. This is done on `nodejs.dev` +// since this is a temporary solution and going to be fixed in the future. +const PrimaryDownloadMatrix = (props: PrimaryDownloadMatrixProps) => { + const nextraContext = useNextraContext(); + + const { downloads } = nextraContext.frontMatter as LegacyDownloadsFrontMatter; + + const getIsVersionClassName = (isCurrent: boolean) => + classNames({ 'is-version': isCurrent }); + + return ( +
+

+ {downloads.currentVersion}: {props.nodeNumeric} ( + {downloads.includes || 'includes'} npm {props.npm}) +

+

{downloads.intro}

+ +
+
    +
  • + +
    {downloads.lts}
    +
    {downloads['tagline-lts']}
    +
    +
  • +
  • + +
    {downloads.current}
    +
    {downloads['tagline-current']}
    +
    +
  • +
+
    +
  • + + + + + {downloads.WindowsInstaller} +

    node-{props.node}-x86.msi

    + +
  • +
  • + + + + + {downloads.MacOSInstaller} +

    node-{props.node}.pkg

    + +
  • +
  • + + + + + {downloads.SourceCode} +

    node-{props.node}.tar.gz

    + +
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{downloads.WindowsInstaller} (.msi) + + 32-bit + + + + 64-bit + +
{downloads.WindowsBinary} (.zip) + + 32-bit + + + + 64-bit + +
{downloads.MacOSInstaller} (.pkg) + + 64-bit / ARM64 + +
{downloads.MacOSBinary} (.tar.gz) + + 64-bit + + + + ARM64 + +
{downloads.LinuxBinaries} (x64) + + 64-bit + +
{downloads.LinuxBinaries} (ARM) + + ARMv7 + + + + ARMv8 + +
{downloads.SourceCode} + + node-{props.node}.tar.gz + +
+
+ ); +}; + +export default PrimaryDownloadMatrix; diff --git a/components/Downloads/SecondaryDownloadMatrix.tsx b/components/Downloads/SecondaryDownloadMatrix.tsx new file mode 100644 index 0000000000000..19e4facba91dd --- /dev/null +++ b/components/Downloads/SecondaryDownloadMatrix.tsx @@ -0,0 +1,71 @@ +import Link from 'next/link'; + +import DownloadList from './DownloadList'; +import { useNextraContext } from '../../hooks/useNextraContext'; + +import type { NodeVersionData, LegacyDownloadsFrontMatter } from '../../types'; + +type SecondaryDownloadMatrixProps = Pick; + +// @TODO: Instead of using a static list it should be created dynamically. This is done on `nodejs.dev` +// since this is a temporary solution and going to be fixed in the future. +const SecondaryDownloadMatrix = (props: SecondaryDownloadMatrixProps) => { + const nextraContext = useNextraContext(); + + const { additional } = + nextraContext.frontMatter as LegacyDownloadsFrontMatter; + + return ( +
+

{additional.headline}

+ + + + + + + + + + + + + + + + + + + + + +
{additional.DockerImage} + + {additional.officialDockerImage} + +
{additional.LinuxPowerSystems} + + 64-bit + +
{additional.LinuxSystemZ} + + 64-bit + +
{additional.AIXPowerSystems} + + 64-bit + +
+ + +
+ ); +}; + +export default SecondaryDownloadMatrix; diff --git a/components/Footer.tsx b/components/Footer.tsx new file mode 100644 index 0000000000000..8a5cf25adeb46 --- /dev/null +++ b/components/Footer.tsx @@ -0,0 +1,72 @@ +import { FormattedMessage } from 'react-intl'; +import Link from 'next/link'; + +type FooterProps = { className?: string }; + +// Note.: We don't expect to translate these items as we're going to replace with `nodejs/nodejs.dev` footer +const Footer = ({ className }: FooterProps) => ( + <> +
+ + ↑ + + +
+
+
+

+ Copyright OpenJS Foundation{' '} + and Node.js contributors. All rights reserved. The{' '} + OpenJS Foundation has + registered trademarks and uses trademarks. For a list of trademarks + of the OpenJS Foundation, + please see our{' '} + + Trademark Policy + {' '} + and{' '} + + Trademark List + + . Trademarks and logos not indicated on the{' '} + + list of OpenJS Foundation trademarks + {' '} + are trademarks™ or registered® trademarks of their + respective holders. Use of them does not imply any affiliation with + or endorsement by them. +

+

+ The OpenJS Foundation +  |  + Terms of Use +  |  + + Privacy Policy + +  |  + Bylaws |  + + Code of Conduct + +  |  + + Trademark Policy + +  |  + + Trademark List + +  |  + + Cookie Policy + +

+
+
+
+
+ +); + +export default Footer; diff --git a/components/Header.tsx b/components/Header.tsx new file mode 100644 index 0000000000000..6b7d6a0117cdf --- /dev/null +++ b/components/Header.tsx @@ -0,0 +1,89 @@ +import { useIntl } from 'react-intl'; +import Image from 'next/image'; +import classNames from 'classnames'; + +import LocalisedLink from './LocalisedLink'; +import { useLocale } from '../hooks/useLocale'; +import { useNavigation } from '../hooks/useNavigation'; +import { useRouter } from 'next/router'; + +const Header = () => { + const { availableLocales, isCurrentLocaleRoute } = useLocale(); + const { navigationItems } = useNavigation(); + const { formatMessage } = useIntl(); + const { asPath } = useRouter(); + + const getLinkClassName = (href: string) => + classNames({ active: isCurrentLocaleRoute(href, href !== '/') }); + + const toggleLanguage = formatMessage({ + id: 'componets.header.buttons.toggleLanguage', + }); + + const toggleDarkMode = formatMessage({ + id: 'components.header.buttons.toggleDarkMode', + }); + + const currentRouteLocalized = (locale: string) => + asPath.replace(/^\/[a-zA-Z-]+/, `/${locale}`); + + return ( +
+
+ + Node.js + + + + +
+
+ + +
+
+ ); +}; + +export default Header; diff --git a/components/Home/Banner.tsx b/components/Home/Banner.tsx new file mode 100644 index 0000000000000..12cfeeef68352 --- /dev/null +++ b/components/Home/Banner.tsx @@ -0,0 +1,39 @@ +import Link from 'next/link'; + +import { useSiteConfig } from '../../hooks/useSiteConfig'; +import { dateIsBetween } from '../../util/dateIsBetween'; + +const Banner = () => { + const siteConfig = useSiteConfig(); + + // Note.: This is hardcoded and going to be replaced by the `nodejs/nodejs.dev` codebase + if (siteConfig.websiteBanners && siteConfig.websiteBanners['index']) { + const indexBanner = siteConfig.websiteBanners['index']; + + const showBanner = dateIsBetween( + indexBanner.startDate, + indexBanner.endDate + ); + + if (showBanner && indexBanner.text) { + return ( +

+ {indexBanner.text} +

+ ); + } + + if (showBanner && indexBanner.html) { + return ( + + ); + } + } + + return null; +}; + +export default Banner; diff --git a/components/Home/HomeDownloadButton.tsx b/components/Home/HomeDownloadButton.tsx new file mode 100644 index 0000000000000..707a4a4456c3e --- /dev/null +++ b/components/Home/HomeDownloadButton.tsx @@ -0,0 +1,57 @@ +import Link from 'next/link'; + +import LocalisedLink from '../LocalisedLink'; +import { useNextraContext } from '../../hooks/useNextraContext'; +import { getNodejsChangelog } from '../../util/getNodeJsChangelog'; + +import type { NodeVersionData } from '../../types'; + +type HomeDownloadButtonProps = Pick< + NodeVersionData, + 'isLts' | 'node' | 'nodeMajor' | 'nodeNumeric' +>; + +const HomeDownloadButton = (props: HomeDownloadButtonProps) => { + const { + frontMatter: { labels }, + } = useNextraContext(); + + const nodeDownloadLink = `https://nodejs.org/dist/${props.node}/`; + const nodeApiLink = `https://nodejs.org/dist/latest-${props.nodeMajor}/docs/api/`; + + const nodeDownloadTitle = + `${labels.download} ${props.nodeNumeric}` + + ` ${labels[props.isLts ? 'lts' : 'current']}`; + + return ( +
+ + {props.nodeNumeric} {labels[props.isLts ? 'lts' : 'current']} + {labels[`tagline-${props.isLts ? 'lts' : 'current'}`]} + + +
    +
  • + + {labels['other-downloads']} + +
  • +
  • + + {labels.changelog} + +
  • +
  • + {labels.api} +
  • +
+
+ ); +}; + +export default HomeDownloadButton; diff --git a/components/HtmlHead.tsx b/components/HtmlHead.tsx new file mode 100644 index 0000000000000..124565c724b2c --- /dev/null +++ b/components/HtmlHead.tsx @@ -0,0 +1,60 @@ +import { useRouter } from 'next/router'; +import Head from 'next/head'; + +import { useSiteConfig } from '../hooks/useSiteConfig'; +import { useLocale } from '../hooks/useLocale'; + +import type { LegacyFrontMatter } from '../types'; + +type HeaderProps = { frontMatter: LegacyFrontMatter }; + +const HtmlHead = ({ frontMatter }: HeaderProps) => { + const siteConfig = useSiteConfig(); + const { currentLocale } = useLocale(); + const { route } = useRouter(); + + const pageTitle = frontMatter.title || siteConfig.title; + const canonicalLink = `https://nodejs.org/${currentLocale.code}${route}`; + + return ( + + {siteConfig.title} + + + + + + + + + + + + + + + + + + + + + + + + + + {siteConfig.rssFeeds.map(feed => ( + + ))} + + ); +}; + +export default HtmlHead; diff --git a/components/LocalisedLink.tsx b/components/LocalisedLink.tsx new file mode 100644 index 0000000000000..78e318574fa3a --- /dev/null +++ b/components/LocalisedLink.tsx @@ -0,0 +1,30 @@ +import { useMemo } from 'react'; +import Link from 'next/link'; +import type { ComponentProps } from 'react'; + +import { useLocale } from '../hooks/useLocale'; +import { linkWithLocale } from '../util/linkWithLocale'; + +const LocalisedLink = (props: ComponentProps) => { + const { href, children, ...extra } = props; + + const { currentLocale } = useLocale(); + + const localisedUrl = linkWithLocale(currentLocale.code); + + const finalHref = useMemo( + () => + /^https?:\/\//.test(href.toString()) + ? href.toString() + : localisedUrl(href), + [href, localisedUrl] + ); + + return ( + + {children} + + ); +}; + +export default LocalisedLink; diff --git a/components/Pagination.tsx b/components/Pagination.tsx new file mode 100644 index 0000000000000..3219d3249de35 --- /dev/null +++ b/components/Pagination.tsx @@ -0,0 +1,23 @@ +import { FormattedMessage } from 'react-intl'; + +import LocalisedLink from './LocalisedLink'; + +type PaginationProps = { prevSlug?: string; nextSlug?: string }; + +const Pagination = (props: PaginationProps) => ( + +); + +export default Pagination; diff --git a/components/SideNavigation.tsx b/components/SideNavigation.tsx new file mode 100644 index 0000000000000..4c3dbe35134ba --- /dev/null +++ b/components/SideNavigation.tsx @@ -0,0 +1,36 @@ +import classNames from 'classnames'; + +import LocalisedLink from './LocalisedLink'; +import { useLocale } from '../hooks/useLocale'; +import { useNavigation } from '../hooks/useNavigation'; + +import type { NavigationKeys } from '../types'; + +type SideNavigationProps = { + navigationKey: NavigationKeys; + context?: Record>; +}; + +const SideNavigation = ({ navigationKey, context }: SideNavigationProps) => { + const { getSideNavigation } = useNavigation(); + const { isCurrentLocaleRoute } = useLocale(); + + const sideNavigationItems = getSideNavigation(navigationKey, context); + + const getLinkClassName = (href: string) => + classNames({ active: isCurrentLocaleRoute(href) }); + + return ( + + ); +}; + +export default SideNavigation; diff --git a/crowdin.yml b/crowdin.yml index 70e9029bdb92a..852d84809eeec 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,20 +1,17 @@ files: - - source: /locale/en/**/*.md - translation: /locale/%two_letters_code%/**/%original_file_name% + - source: /pages/en/**/*.md + translation: /pages/%two_letters_code%/**/%original_file_name% content_segmentation: 0 ignore: - - /locale/en/blog/**/*.md - - /locale/en/knowledge/**/*.md + - /pages/en/blog/**/*.md languages_mapping: two_letters_code: pt-BR: pt-br zh-CN: zh-cn zh-TW: zh-tw es-ES: es - - source: /locale/en/**/*.json - translation: /locale/%two_letters_code%/**/%original_file_name% - ignore: - - /locale/en/blog/**/*.json + - source: /i18n/locales/en.json + translation: /i18n/locales/%two_letters_code%.json languages_mapping: two_letters_code: pt-BR: pt-br diff --git a/external/survey-2018/package-lock.json b/external/survey-2018/package-lock.json deleted file mode 100644 index a2d6d0c78d5e5..0000000000000 --- a/external/survey-2018/package-lock.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "survey-report-2018", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "uglify-js": { - "version": "3.3.28", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.28.tgz", - "integrity": "sha512-68Rc/aA6cswiaQ5SrE979UJcXX+ADA1z33/ZsPd+fbAiVdjZ16OXdbtGO+rJUUBgK6qdf3SOPhQf3K/ybF5Miw==", - "dev": true, - "requires": { - "commander": "2.15.1", - "source-map": "0.6.1" - } - } - } -} diff --git a/external/survey-2018/package.json b/external/survey-2018/package.json deleted file mode 100644 index f5c798625abc1..0000000000000 --- a/external/survey-2018/package.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "survey-report-2018", - "version": "1.0.0", - "scripts": { - "build": "uglifyjs -c -m -o data.min.js data.js && uglifyjs -c -m -o full.min.js full.js && uglifyjs -c -m -o graph.min.js graph.js" - }, - "devDependencies": { - "uglify-js": "^3.3.28" - } -} diff --git a/global.d.ts b/global.d.ts new file mode 100644 index 0000000000000..488111db6dc52 --- /dev/null +++ b/global.d.ts @@ -0,0 +1,12 @@ +declare global { + // @TODO: Update this to use the correct type + // eslint-disable-next-line no-unused-vars + var __nextra_pageContext__: Record; + + // eslint-disable-next-line no-unused-vars + interface Window { + startLegacyApp: Function; + } +} + +export default global; diff --git a/hooks/useLocale.ts b/hooks/useLocale.ts new file mode 100644 index 0000000000000..b9ff133282fd4 --- /dev/null +++ b/hooks/useLocale.ts @@ -0,0 +1,28 @@ +import { useContext } from 'react'; +import { useRouter } from 'next/router'; + +import { LocaleContext } from '../providers/localeProvider'; +import { linkWithLocale } from '../util/linkWithLocale'; + +export const useLocale = () => { + const { currentLocale, availableLocales } = useContext(LocaleContext); + const { asPath } = useRouter(); + + const localisedLink = linkWithLocale(currentLocale!.code); + + const localisedPath = (route: string) => + localisedLink(route).replace(/[#|?].*$/, ''); + + return { + availableLocales: availableLocales!, + currentLocale: currentLocale!, + isCurrentLocaleRoute: (route: string, allowSubPath?: boolean) => { + const localisedRoute = localisedPath(route); + const asPathJustPath = asPath.replace(/[#|?].*$/, ''); + + return allowSubPath + ? asPathJustPath.startsWith(localisedRoute) + : localisedRoute === asPathJustPath; + }, + }; +}; diff --git a/hooks/useNavigation.tsx b/hooks/useNavigation.tsx new file mode 100644 index 0000000000000..81ef863e9ade3 --- /dev/null +++ b/hooks/useNavigation.tsx @@ -0,0 +1,45 @@ +import { FormattedMessage } from 'react-intl'; + +import type { NavigationEntry, NavigationKeys } from '../types'; + +import navigation from '../navigation.json'; + +// Translation Context for FormattedMessage +type Context = Record>; + +// Provides Context replacement for variables within the Link. This is also something that is not going +// to happen in the future with `nodejs/nodejs.dev` codebase +const replaceLinkWithContext = (link: string, context: Record) => + Object.entries(context).reduce( + (finalLink, [find, replace]) => finalLink.replace(`{${find}}`, replace), + link + ); + +export const useNavigation = () => { + const mapNavigationEntries = ( + entries: Record, + context?: Context + ) => { + const getContext = (key: string) => (context && context[key]) || {}; + + const getFormattedMessage = (translationId: string, key: string) => ( + + ); + + return Object.entries(entries).map(([key, item]) => ({ + text: getFormattedMessage(item.translationId, key), + link: replaceLinkWithContext(item.link, getContext(key)), + key: key, + })); + }; + + return { + navigationItems: mapNavigationEntries(navigation), + getSideNavigation: (section: NavigationKeys, context?: Context) => + mapNavigationEntries( + // We need the parent and their items when making a side navigation + { [section]: navigation[section], ...navigation[section].items }, + context + ), + }; +}; diff --git a/hooks/useNextraContext.ts b/hooks/useNextraContext.ts new file mode 100644 index 0000000000000..19c9b5d7b3fe1 --- /dev/null +++ b/hooks/useNextraContext.ts @@ -0,0 +1,8 @@ +import { useContext } from 'react'; +import { LayoutContext } from '../providers/layoutProvider'; + +export const useNextraContext = () => { + const { pageOpts, pageProps } = useContext(LayoutContext); + + return { ...pageOpts, ...pageProps }; +}; diff --git a/hooks/useNodeData.ts b/hooks/useNodeData.ts new file mode 100644 index 0000000000000..70d7fc143c123 --- /dev/null +++ b/hooks/useNodeData.ts @@ -0,0 +1,17 @@ +import { useContext } from 'react'; +import { NodeDataContext } from '../providers/nodeDataProvider'; +import { NodeVersionData } from '../types'; + +type UseNodeDataReturnType = { + currentNodeVersion?: NodeVersionData; + currentLtsVersion?: NodeVersionData; +}; + +export const useNodeData = (): UseNodeDataReturnType => { + const [currentNodeVersion, currentLtsVersion] = useContext(NodeDataContext); + + return { + currentLtsVersion: currentLtsVersion || currentNodeVersion, + currentNodeVersion, + }; +}; diff --git a/hooks/useSiteConfig.ts b/hooks/useSiteConfig.ts new file mode 100644 index 0000000000000..8f18795dcca6f --- /dev/null +++ b/hooks/useSiteConfig.ts @@ -0,0 +1,8 @@ +import { useContext } from 'react'; +import { SiteContext } from '../providers/siteProvider'; + +export const useSiteConfig = () => { + const siteConfigContext = useContext(SiteContext); + + return siteConfigContext; +}; diff --git a/i18n/config.json b/i18n/config.json new file mode 100644 index 0000000000000..da0b8e8c64595 --- /dev/null +++ b/i18n/config.json @@ -0,0 +1,173 @@ +[ + { + "code": "ar", + "localName": "العربية", + "name": "Arabic", + "langDir": "rtl", + "dateFormat": "YYYY.MM.DD", + "hrefLang": "ar", + "enabled": true + }, + { + "code": "ca", + "localName": "Catalan", + "name": "Catalan", + "langDir": "ltr", + "dateFormat": "DD.MM.YYYY", + "hrefLang": "ca", + "enabled": true + }, + { + "code": "de", + "localName": "Deutsch", + "name": "German", + "langDir": "ltr", + "dateFormat": "DD.MM.YYYY", + "hrefLang": "de", + "enabled": true + }, + { + "code": "he", + "localName": "עברית", + "name": "Hebrew", + "langDir": "rtl", + "dateFormat": "DD.MM.YYYY", + "hrefLang": "he-IL", + "enabled": true + }, + { + "code": "en", + "localName": "English", + "name": "English", + "langDir": "ltr", + "dateFormat": "MM.DD.YYYY", + "hrefLang": "en-US", + "enabled": true + }, + { + "code": "es", + "localName": "Español", + "name": "Spanish", + "langDir": "ltr", + "dateFormat": "DD.MM.YYYY", + "hrefLang": "es-ES", + "enabled": true + }, + { + "code": "fa", + "localName": "زبان فارسی", + "name": "Persian", + "langDir": "rtl", + "dateFormat": "YYYY.MM.DD", + "hrefLang": "fa", + "enabled": true + }, + { + "code": "fr", + "localName": "Français", + "name": "French", + "langDir": "ltr", + "dateFormat": "DD.MM.YYYY", + "hrefLang": "fr", + "enabled": true + }, + { + "code": "it", + "localName": "Italiano", + "name": "Italian", + "langDir": "ltr", + "dateFormat": "DD.MM.YYYY", + "hrefLang": "it", + "enabled": true + }, + { + "code": "ja", + "localName": "日本語", + "name": "Japanese", + "langDir": "ltr", + "dateFormat": "YYYY.MM.DD", + "hrefLang": "ja", + "enabled": true + }, + { + "code": "ka", + "localName": "ქართული", + "name": "Georgian", + "langDir": "ltr", + "dateFormat": "DD.MM.YYYY", + "hrefLang": "ka", + "enabled": true + }, + { + "code": "ko", + "localName": "한국어", + "name": "Korean", + "langDir": "ltr", + "dateFormat": "YYYY.MM.DD", + "hrefLang": "ko", + "enabled": true + }, + { + "code": "pt-br", + "localName": "Português do Brasil", + "name": "Brazilian Portuguese", + "langDir": "ltr", + "dateFormat": "DD.MM.YYYY", + "hrefLang": "", + "enabled": true + }, + { + "code": "ro", + "localName": "limba română", + "name": "Romanian", + "langDir": "ltr", + "dateFormat": "DD.MM.YYYY", + "hrefLang": "ro", + "enabled": true + }, + { + "code": "ru", + "localName": "Русский", + "name": "Russian", + "langDir": "ltr", + "dateFormat": "DD.MM.YYYY", + "hrefLang": "ru", + "enabled": true + }, + { + "code": "tr", + "localName": "Türkçe", + "name": "Turkish", + "langDir": "rtl", + "dateFormat": "DD.MM.YYYY", + "hrefLang": "tr", + "enabled": true + }, + { + "code": "uk", + "localName": "Українська", + "name": "Ukrainian", + "langDir": "ltr", + "dateFormat": "DD.MM.YYYY", + "hrefLang": "uk", + "enabled": true + }, + { + "code": "zh-cn", + "localName": "简体中文", + "name": "Simplified Chinese", + "langDir": "ltr", + "dateFormat": "YYYY/MM/DD", + "hrefLang": "zh-Hans", + "enabled": true + }, + { + "code": "zh-tw", + "localName": "繁體中文", + "name": "Traditional Chinese", + "langDir": "ltr", + "dateFormat": "YYYY/MM/DD", + "hrefLang": "zh-Hant", + "enabled": true + } +] diff --git a/i18n/locales/ar.json b/i18n/locales/ar.json new file mode 100644 index 0000000000000..e83ce5b7e54c6 --- /dev/null +++ b/i18n/locales/ar.json @@ -0,0 +1,39 @@ +{ + "components.footer.scrollToTop.button": "إنتقل إلى الأعلى", + "components.header.links.home": "الرئيسية", + "components.header.links.about": "عن الموقع", + "components.header.links.download": "تنزيلات", + "components.header.links.docs": "التوثيق", + "components.header.links.getInvolved": "إنضم إلينا", + "components.header.links.security": "أمن", + "components.header.links.certification": "شهادة", + "components.header.links.blog": "المدونة", + "components.navigation.about.links.governance": "الحوكمة", + "components.navigation.docs.links.es6": "ES6 وما بعدها", + "components.navigation.docs.links.apiLts": "{fullLtsNodeVersion} API {spanLts}", + "components.navigation.docs.links.apiCurrent": "{fullCurrentNodeVersion} API", + "components.navigation.docs.links.guides": "إرشادات", + "components.navigation.docs.links.dependencies": "تبعيات", + "components.navigation.getInvolved.links.collabSummit": "القمة التعاونية", + "components.navigation.getInvolved.links.contribute": "مساهمة", + "components.navigation.getInvolved.links.codeOfConduct": "القواعد السلوكية", + "components.downloadList.links.previousReleases": "الاصدارات السابقة", + "components.downloadList.links.packageManager": "تحميل Node.js عن طريق نظام إدارة الحزم الافتراضي", + "components.downloadList.links.shaSums": "وثائق الاصدارات مختومة SHASUMS", + "components.downaloadList.links.shaSums.howToVerify": " (كيفية التحقق)", + "components.downloadList.links.allDownloads": "تحميل جميع النسخ", + "components.downloadList.links.nightlyReleases": "إصدارات ليلية", + "components.downloadList.links.unofficialBuilds": "بُنْيَات غير رسمية", + "components.downloadList.links.buildingFromSource": "Building Node.js from source on supported platforms", + "components.downloadList.links.installingOnLinux": "تثبيت Node.js باستعمال أرشيف ثنائي على لينكس", + "components.downloadList.links.installingOnWsl": "التثبيت على ويندوز في النظام الفرعي لينكس (WSL)", + "components.downloadReleasesTable.changelog": "سجل التغييرات", + "components.downloadReleasesTable.releases": "Releases", + "components.downloadReleasesTable.docs": "التوثيق", + "componets.header.buttons.toggleLanguage": "Toggle Language", + "components.header.buttons.toggleDarkMode": "Toggle dark/light mode", + "components.pagination.next": "التالي | ", + "components.pagination.previous": "السابق", + "layouts.blogPost.author.byLine": "{author, select, null {} other {By {author}, }}", + "layouts.blogIndex.currentYear": "News from {year}" +} diff --git a/i18n/locales/ca.json b/i18n/locales/ca.json new file mode 100644 index 0000000000000..9ea9edb032036 --- /dev/null +++ b/i18n/locales/ca.json @@ -0,0 +1,40 @@ +{ + "components.footer.scrollToTop.button": "Torna al començament", + "components.header.links.home": "Inici", + "components.header.links.about": "Quant a", + "components.header.links.download": "Descàrregues", + "components.header.links.docs": "Documentació", + "components.header.links.getInvolved": "Participa", + "components.header.links.security": "Seguretat", + "components.header.links.certification": "Certification", + "components.header.links.blog": "Notícies", + "components.navigation.about.links.governance": "Govern", + "components.navigation.docs.links.es6": "ES6 i més enllà", + "components.navigation.docs.links.apiLts": "{fullLtsNodeVersion} API {spanLts}", + "components.navigation.docs.links.apiCurrent": "{fullCurrentNodeVersion} API", + "components.navigation.docs.links.guides": "Guies", + "components.navigation.docs.links.dependencies": "Dependències", + "components.navigation.getInvolved.links.collabSummit": "Col·labora en el Summit", + "components.navigation.getInvolved.links.contribute": "Contribueix", + "components.navigation.getInvolved.links.codeOfConduct": "Codi de Conducta", + "components.downloadList.links.previousReleases": "Descarrègues", + "components.downloadList.links.packageManager": "Instal·lar Node.js mitjançant un gestor de paquets", + "components.downloadList.links.shaSums": "Signatures SHASUMS per arxius de versions", + "components.downaloadList.links.shaSums.howToVerify": " (Com verificar-ho)", + "components.downloadList.links.allDownloads": "Totes les opcions de descàrrega", + "components.downloadList.links.nightlyReleases": "Versions Nightly", + "components.downloadList.links.unofficialBuilds": "Unofficial builds", + "components.downloadList.links.buildingFromSource": "Building Node.js from source on supported platforms", + "components.downloadList.links.installingOnLinux": "Installing Node.js via binary archive", + "components.downloadList.links.installingOnWsl": "Install on Windows Subsystem for Linux (WSL)", + "components.downloadReleasesTable.changelog": "Registre de Canvis", + "components.downloadReleasesTable.releases": "Releases", + "components.downloadReleasesTable.docs": "Documentació", + "componets.header.buttons.toggleLanguage": "Toggle Language", + "components.header.buttons.toggleDarkMode": "Toggle dark/light mode", + "components.pagination.next": "Següent | ", + "components.pagination.previous": "Anterior", + "layouts.blogPost.author.byLine": "{author, select, null {} other {By {author}, }}", + "layouts.blogIndex.currentYear": "News from {year}" + } + \ No newline at end of file diff --git a/i18n/locales/de.json b/i18n/locales/de.json new file mode 100644 index 0000000000000..ce5356f3f0fb1 --- /dev/null +++ b/i18n/locales/de.json @@ -0,0 +1,39 @@ +{ + "components.footer.scrollToTop.button": "Zum Seitenanfang", + "components.header.links.home": "Startseite", + "components.header.links.about": "Über Node.js", + "components.header.links.download": "Downloads", + "components.header.links.docs": "Dokumentation", + "components.header.links.getInvolved": "Mitmachen", + "components.header.links.security": "Sicherheit", + "components.header.links.certification": "Certification", + "components.header.links.blog": "Neuigkeiten", + "components.navigation.about.links.governance": "Governance", + "components.navigation.docs.links.es6": "ES6 und darüber hinaus", + "components.navigation.docs.links.apiLts": "{fullLtsNodeVersion} API {spanLts}", + "components.navigation.docs.links.apiCurrent": "{fullCurrentNodeVersion} API", + "components.navigation.docs.links.guides": "Anleitungen", + "components.navigation.docs.links.dependencies": "Dependencies", + "components.navigation.getInvolved.links.collabSummit": "Collab Summit", + "components.navigation.getInvolved.links.contribute": "Mitwirken", + "components.navigation.getInvolved.links.codeOfConduct": "Verhaltenskodex", + "components.downloadList.links.previousReleases": "Alle Versionen", + "components.downloadList.links.packageManager": "Node.js mit Paketmanagern installieren", + "components.downloadList.links.shaSums": "Signierte SHASUMS für die Versionsdateien", + "components.downaloadList.links.shaSums.howToVerify": " (How to verify)", + "components.downloadList.links.allDownloads": "Alle Download-Optionen", + "components.downloadList.links.nightlyReleases": "Nightly builds", + "components.downloadList.links.unofficialBuilds": "Inoffizielle Builds", + "components.downloadList.links.buildingFromSource": "Building Node.js from source on supported platforms", + "components.downloadList.links.installingOnLinux": "Installing Node.js via binary archive", + "components.downloadList.links.installingOnWsl": "Install on Windows Subsystem for Linux (WSL)", + "components.downloadReleasesTable.changelog": "Änderungshistorie", + "components.downloadReleasesTable.releases": "Releases", + "components.downloadReleasesTable.docs": "Dokumentation", + "componets.header.buttons.toggleLanguage": "Toggle Language", + "components.header.buttons.toggleDarkMode": "Toggle dark/light mode", + "components.pagination.next": "Weiter | ", + "components.pagination.previous": "Zurück", + "layouts.blogPost.author.byLine": "{author, select, null {} other {By {author}, }}", + "layouts.blogIndex.currentYear": "News from {year}" +} diff --git a/i18n/locales/en.json b/i18n/locales/en.json new file mode 100644 index 0000000000000..9dbf6ec601e9f --- /dev/null +++ b/i18n/locales/en.json @@ -0,0 +1,39 @@ +{ + "components.footer.scrollToTop.button": "Scroll to top", + "components.header.links.home": "Home", + "components.header.links.about": "About", + "components.header.links.download": "Downloads", + "components.header.links.docs": "Docs", + "components.header.links.getInvolved": "Get Involved", + "components.header.links.security": "Security", + "components.header.links.certification": "Certification", + "components.header.links.blog": "News", + "components.navigation.about.links.governance": "Governance", + "components.navigation.docs.links.es6": "ES6 and beyond", + "components.navigation.docs.links.apiLts": "{fullLtsNodeVersion} API {spanLts}", + "components.navigation.docs.links.apiCurrent": "{fullCurrentNodeVersion} API", + "components.navigation.docs.links.guides": "Guides", + "components.navigation.docs.links.dependencies": "Dependencies", + "components.navigation.getInvolved.links.collabSummit": "Collab Summit", + "components.navigation.getInvolved.links.contribute": "Contribute", + "components.navigation.getInvolved.links.codeOfConduct": "Code of Conduct", + "components.downloadList.links.previousReleases": "Previous Releases", + "components.downloadList.links.packageManager": "Installing Node.js via package manager", + "components.downloadList.links.shaSums": "Signed SHASUMS for release files", + "components.downaloadList.links.shaSums.howToVerify": " (How to verify)", + "components.downloadList.links.allDownloads": "All download options", + "components.downloadList.links.nightlyReleases": "Nightly builds", + "components.downloadList.links.unofficialBuilds": "Unofficial builds", + "components.downloadList.links.buildingFromSource": "Building Node.js from source on supported platforms", + "components.downloadList.links.installingOnLinux": "Installing Node.js via binary archive", + "components.downloadList.links.installingOnWsl": "Install on Windows Subsystem for Linux (WSL)", + "components.downloadReleasesTable.changelog": "Changelog", + "components.downloadReleasesTable.releases": "Releases", + "components.downloadReleasesTable.docs": "Docs", + "componets.header.buttons.toggleLanguage": "Toggle Language", + "components.header.buttons.toggleDarkMode": "Toggle dark/light mode", + "components.pagination.next": "Newer | ", + "components.pagination.previous": "Older", + "layouts.blogPost.author.byLine": "{author, select, null {} other {By {author}, }}", + "layouts.blogIndex.currentYear": "News from {year}" +} diff --git a/i18n/locales/es.json b/i18n/locales/es.json new file mode 100644 index 0000000000000..6129daa8d9b86 --- /dev/null +++ b/i18n/locales/es.json @@ -0,0 +1,39 @@ +{ + "components.footer.scrollToTop.button": "Vuelve arriba", + "components.header.links.home": "Inicio", + "components.header.links.about": "Acerca", + "components.header.links.download": "Descargas", + "components.header.links.docs": "Documentación", + "components.header.links.getInvolved": "Participe", + "components.header.links.security": "Seguridad", + "components.header.links.certification": "Certification", + "components.header.links.blog": "Noticias", + "components.navigation.about.links.governance": "Dirección", + "components.navigation.docs.links.es6": "ES6 y más allá", + "components.navigation.docs.links.apiLts": "{fullLtsNodeVersion} API {spanLts}", + "components.navigation.docs.links.apiCurrent": "{fullCurrentNodeVersion} API", + "components.navigation.docs.links.guides": "Guías", + "components.navigation.docs.links.dependencies": "Dependencias", + "components.navigation.getInvolved.links.collabSummit": "Colabore en el Summit", + "components.navigation.getInvolved.links.contribute": "Contribuya", + "components.navigation.getInvolved.links.codeOfConduct": "Código de Conducta", + "components.downloadList.links.previousReleases": "Versiones anteriores", + "components.downloadList.links.packageManager": "Instale Node.js mediante un gestor de paquetes", + "components.downloadList.links.shaSums": "Firmas SHASUMS de los archivos de versiones", + "components.downaloadList.links.shaSums.howToVerify": " (Cómo verificarlo)", + "components.downloadList.links.allDownloads": "Todas las opciones de descarga", + "components.downloadList.links.nightlyReleases": "Versiones Nightly", + "components.downloadList.links.unofficialBuilds": "Construcciones no oficiales", + "components.downloadList.links.buildingFromSource": "Building Node.js from source on supported platforms", + "components.downloadList.links.installingOnLinux": "Instalación de Node.js a través del archivo binario", + "components.downloadList.links.installingOnWsl": "Install on Windows Subsystem for Linux (WSL)", + "components.downloadReleasesTable.changelog": "Registro de Cambios", + "components.downloadReleasesTable.releases": "Releases", + "components.downloadReleasesTable.docs": "Documentación", + "componets.header.buttons.toggleLanguage": "Toggle Language", + "components.header.buttons.toggleDarkMode": "Toggle dark/light mode", + "components.pagination.next": "Siguiente | ", + "components.pagination.previous": "Anterior", + "layouts.blogPost.author.byLine": "{author, select, null {} other {By {author}, }}", + "layouts.blogIndex.currentYear": "News from {year}" +} diff --git a/i18n/locales/fa.json b/i18n/locales/fa.json new file mode 100644 index 0000000000000..0a4351b69bc6c --- /dev/null +++ b/i18n/locales/fa.json @@ -0,0 +1,39 @@ +{ + "components.footer.scrollToTop.button": "رفتن به بالا", + "components.header.links.home": "خانه", + "components.header.links.about": "درباره", + "components.header.links.download": "دانلود‌ها", + "components.header.links.docs": "اسناد", + "components.header.links.getInvolved": "مشارکت جستن", + "components.header.links.security": "امنیت", + "components.header.links.certification": "Certification", + "components.header.links.blog": "بلاگ", + "components.navigation.about.links.governance": "مدیریت", + "components.navigation.docs.links.es6": "ES6 و فراتر", + "components.navigation.docs.links.apiLts": "{fullLtsNodeVersion} API {spanLts}", + "components.navigation.docs.links.apiCurrent": "{fullCurrentNodeVersion} API", + "components.navigation.docs.links.guides": "راهنمایی‌ها", + "components.navigation.docs.links.dependencies": "وابستگی‌ها", + "components.navigation.getInvolved.links.collabSummit": "نشت مشارکت کنندگان", + "components.navigation.getInvolved.links.contribute": "مشارکت", + "components.navigation.getInvolved.links.codeOfConduct": "شیوه تعامل برای مشارکت", + "components.downloadList.links.previousReleases": "انتشارهای پیشین", + "components.downloadList.links.packageManager": "نصب نودجی‌اس با package manager", + "components.downloadList.links.shaSums": "Signed SHASUMS for release files", + "components.downaloadList.links.shaSums.howToVerify": " (چگونه راستی‌آزمایی کنیم؟)", + "components.downloadList.links.allDownloads": "تمام گزینه‌ها برای دانلود", + "components.downloadList.links.nightlyReleases": "ساخت‌های شبانه", + "components.downloadList.links.unofficialBuilds": "Unofficial builds", + "components.downloadList.links.buildingFromSource": "Building Node.js from source on supported platforms", + "components.downloadList.links.installingOnLinux": "Installing Node.js via binary archive", + "components.downloadList.links.installingOnWsl": "Install on Windows Subsystem for Linux (WSL)", + "components.downloadReleasesTable.changelog": "تغییرات", + "components.downloadReleasesTable.releases": "Releases", + "components.downloadReleasesTable.docs": "اسناد", + "componets.header.buttons.toggleLanguage": "Toggle Language", + "components.header.buttons.toggleDarkMode": "Toggle dark/light mode", + "components.pagination.next": "بعدی | ", + "components.pagination.previous": "قبلی", + "layouts.blogPost.author.byLine": "{author, select, null {} other {By {author}, }}", + "layouts.blogIndex.currentYear": "News from {year}" +} diff --git a/i18n/locales/fr.json b/i18n/locales/fr.json new file mode 100644 index 0000000000000..50c8f5e4ec161 --- /dev/null +++ b/i18n/locales/fr.json @@ -0,0 +1,39 @@ +{ + "components.footer.scrollToTop.button": "Faire défiler en haut", + "components.header.links.home": "Accueil", + "components.header.links.about": "À propos", + "components.header.links.download": "Téléchargements", + "components.header.links.docs": "Docs", + "components.header.links.getInvolved": "S’impliquer", + "components.header.links.security": "Securité", + "components.header.links.certification": "Certification", + "components.header.links.blog": "Actualités", + "components.navigation.about.links.governance": "Governance", + "components.navigation.docs.links.es6": "ES6 et au-delà", + "components.navigation.docs.links.apiLts": "{fullLtsNodeVersion} API {spanLts}", + "components.navigation.docs.links.apiCurrent": "{fullCurrentNodeVersion} API", + "components.navigation.docs.links.guides": "Guides", + "components.navigation.docs.links.dependencies": "Dependencies", + "components.navigation.getInvolved.links.collabSummit": "Collab Summit", + "components.navigation.getInvolved.links.contribute": "Contribuer", + "components.navigation.getInvolved.links.codeOfConduct": "Code de conduite", + "components.downloadList.links.previousReleases": "Versions précédentes", + "components.downloadList.links.packageManager": "Installer Node.js via le gestionnaire de paquets", + "components.downloadList.links.shaSums": "SHASUMS signés pour les fichiers des versions", + "components.downaloadList.links.shaSums.howToVerify": " (How to verify)", + "components.downloadList.links.allDownloads": "Toutes les options de téléchargement", + "components.downloadList.links.nightlyReleases": "Versions quotidiennes", + "components.downloadList.links.unofficialBuilds": "Unofficial builds", + "components.downloadList.links.buildingFromSource": "Building Node.js from source on supported platforms", + "components.downloadList.links.installingOnLinux": "Installing Node.js via binary archive", + "components.downloadList.links.installingOnWsl": "Install on Windows Subsystem for Linux (WSL)", + "components.downloadReleasesTable.changelog": "Journal des modifications", + "components.downloadReleasesTable.releases": "Releases", + "components.downloadReleasesTable.docs": "Docs", + "componets.header.buttons.toggleLanguage": "Toggle Language", + "components.header.buttons.toggleDarkMode": "Toggle dark/light mode", + "components.pagination.next": "Newer | ", + "components.pagination.previous": "Older", + "layouts.blogPost.author.byLine": "{author, select, null {} other {By {author}, }}", + "layouts.blogIndex.currentYear": "News from {year}" +} diff --git a/i18n/locales/gl.json b/i18n/locales/gl.json new file mode 100644 index 0000000000000..511b85dab8f94 --- /dev/null +++ b/i18n/locales/gl.json @@ -0,0 +1,39 @@ +{ + "components.footer.scrollToTop.button": "Volta ao principio", + "components.header.links.home": "Inicio", + "components.header.links.about": "Acerca de", + "components.header.links.download": "Descargas", + "components.header.links.docs": "Documentación", + "components.header.links.getInvolved": "Participa", + "components.header.links.security": "Seguridade", + "components.header.links.certification": "Certification", + "components.header.links.blog": "Noticias", + "components.navigation.about.links.governance": "Goberno", + "components.navigation.docs.links.es6": "ES6 e máis aló", + "components.navigation.docs.links.apiLts": "{fullLtsNodeVersion} API {spanLts}", + "components.navigation.docs.links.apiCurrent": "{fullCurrentNodeVersion} API", + "components.navigation.docs.links.guides": "Guías", + "components.navigation.docs.links.dependencies": "Dependencies", + "components.navigation.getInvolved.links.collabSummit": "Collab Summit", + "components.navigation.getInvolved.links.contribute": "Contribúe", + "components.navigation.getInvolved.links.codeOfConduct": "Comportamento", + "components.downloadList.links.previousReleases": "Versións anteriores", + "components.downloadList.links.packageManager": "Instalar Node.js usando un xestor de paquetes", + "components.downloadList.links.shaSums": "Firmas SHASUMS para os arquivos de versións", + "components.downaloadList.links.shaSums.howToVerify": " (How to verify)", + "components.downloadList.links.allDownloads": "Todas as opcións de descarga", + "components.downloadList.links.nightlyReleases": "Versións Nightly", + "components.downloadList.links.unofficialBuilds": "Unofficial builds", + "components.downloadList.links.buildingFromSource": "Building Node.js from source on supported platforms", + "components.downloadList.links.installingOnLinux": "Installing Node.js via binary archive", + "components.downloadList.links.installingOnWsl": "Install on Windows Subsystem for Linux (WSL)", + "components.downloadReleasesTable.changelog": "Cambios", + "components.downloadReleasesTable.releases": "Releases", + "components.downloadReleasesTable.docs": "Documentación", + "componets.header.buttons.toggleLanguage": "Toggle Language", + "components.header.buttons.toggleDarkMode": "Toggle dark/light mode", + "components.pagination.next": "Seguinte | ", + "components.pagination.previous": "Anterior", + "layouts.blogPost.author.byLine": "{author, select, null {} other {By {author}, }}", + "layouts.blogIndex.currentYear": "News from {year}" +} diff --git a/i18n/locales/it.json b/i18n/locales/it.json new file mode 100644 index 0000000000000..c70de9a6f7bba --- /dev/null +++ b/i18n/locales/it.json @@ -0,0 +1,39 @@ +{ + "components.footer.scrollToTop.button": "Portami all'inizio", + "components.header.links.home": "Home", + "components.header.links.about": "Informazioni", + "components.header.links.download": "Downloads", + "components.header.links.docs": "Documentazione", + "components.header.links.getInvolved": "Come partecipare", + "components.header.links.security": "Sicurezza", + "components.header.links.certification": "Certification", + "components.header.links.blog": "Blog", + "components.navigation.about.links.governance": "Gestione", + "components.navigation.docs.links.es6": "ES6 e oltre", + "components.navigation.docs.links.apiLts": "{fullLtsNodeVersion} API {spanLts}", + "components.navigation.docs.links.apiCurrent": "{fullCurrentNodeVersion} API", + "components.navigation.docs.links.guides": "Guide", + "components.navigation.docs.links.dependencies": "Dependencies", + "components.navigation.getInvolved.links.collabSummit": "Collab Summit", + "components.navigation.getInvolved.links.contribute": "Contribuire", + "components.navigation.getInvolved.links.codeOfConduct": "Condotta", + "components.downloadList.links.previousReleases": "Rilasci Precedenti", + "components.downloadList.links.packageManager": "Installa Node.js con un gestore di pacchetti", + "components.downloadList.links.shaSums": "Signed SHASUMS for release files", + "components.downaloadList.links.shaSums.howToVerify": " (How to verify)", + "components.downloadList.links.allDownloads": "Tutti i download", + "components.downloadList.links.nightlyReleases": "Build notturne", + "components.downloadList.links.unofficialBuilds": "Unofficial builds", + "components.downloadList.links.buildingFromSource": "Building Node.js from source on supported platforms", + "components.downloadList.links.installingOnLinux": "Installing Node.js via binary archive", + "components.downloadList.links.installingOnWsl": "Install on Windows Subsystem for Linux (WSL)", + "components.downloadReleasesTable.changelog": "Registro modifiche", + "components.downloadReleasesTable.releases": "Releases", + "components.downloadReleasesTable.docs": "Documentazione", + "componets.header.buttons.toggleLanguage": "Toggle Language", + "components.header.buttons.toggleDarkMode": "Toggle dark/light mode", + "components.pagination.next": "Successiva | ", + "components.pagination.previous": "Precedente", + "layouts.blogPost.author.byLine": "{author, select, null {} other {By {author}, }}", + "layouts.blogIndex.currentYear": "News from {year}" +} diff --git a/i18n/locales/ja.json b/i18n/locales/ja.json new file mode 100644 index 0000000000000..2f7b2c622fe49 --- /dev/null +++ b/i18n/locales/ja.json @@ -0,0 +1,39 @@ +{ + "components.footer.scrollToTop.button": "上部へスクロールする", + "components.header.links.home": "ホーム", + "components.header.links.about": "Node.js とは", + "components.header.links.download": "ダウンロード", + "components.header.links.docs": "ドキュメント", + "components.header.links.getInvolved": "参加する", + "components.header.links.security": "セキュリティ", + "components.header.links.certification": "Certification", + "components.header.links.blog": "ニュース", + "components.navigation.about.links.governance": "委員会", + "components.navigation.docs.links.es6": "ES6 について", + "components.navigation.docs.links.apiLts": "{fullLtsNodeVersion} API {spanLts}", + "components.navigation.docs.links.apiCurrent": "{fullCurrentNodeVersion} API", + "components.navigation.docs.links.guides": "ガイド", + "components.navigation.docs.links.dependencies": "依存関係", + "components.navigation.getInvolved.links.collabSummit": "Collab Summit", + "components.navigation.getInvolved.links.contribute": "貢献する", + "components.navigation.getInvolved.links.codeOfConduct": "行動規範", + "components.downloadList.links.previousReleases": "バージョンの一覧", + "components.downloadList.links.packageManager": "Iパッケージマネージャを使用したダウンロード", + "components.downloadList.links.shaSums": "リリースファイルのための SHASUM 署名", + "components.downaloadList.links.shaSums.howToVerify": " (How to verify)", + "components.downloadList.links.allDownloads": "All download options", + "components.downloadList.links.nightlyReleases": "Nightly builds", + "components.downloadList.links.unofficialBuilds": "非公式のビルド版", + "components.downloadList.links.buildingFromSource": "Building Node.js from source on supported platforms", + "components.downloadList.links.installingOnLinux": "Installing Node.js via binary archive", + "components.downloadList.links.installingOnWsl": "Install on Windows Subsystem for Linux (WSL)", + "components.downloadReleasesTable.changelog": "変更履歴", + "components.downloadReleasesTable.releases": "Releases", + "components.downloadReleasesTable.docs": "ドキュメント", + "componets.header.buttons.toggleLanguage": "Toggle Language", + "components.header.buttons.toggleDarkMode": "Toggle dark/light mode", + "components.pagination.next": "次 | ", + "components.pagination.previous": "前", + "layouts.blogPost.author.byLine": "{author, select, null {} other {By {author}, }}", + "layouts.blogIndex.currentYear": "News from {year}" +} diff --git a/i18n/locales/ka.json b/i18n/locales/ka.json new file mode 100644 index 0000000000000..ca636c9e5cacf --- /dev/null +++ b/i18n/locales/ka.json @@ -0,0 +1,39 @@ +{ + "components.footer.scrollToTop.button": "ზემოთ", + "components.header.links.home": "მთავარი", + "components.header.links.about": "შესახებ", + "components.header.links.download": "ჩამოტვირთვა", + "components.header.links.docs": "დოკუმენტაცია", + "components.header.links.getInvolved": "შემოგვიერთდით", + "components.header.links.security": "უსაფრთხოება", + "components.header.links.certification": "სერტიფიკაცია", + "components.header.links.blog": "სიახლეები", + "components.navigation.about.links.governance": "მმართველობა", + "components.navigation.docs.links.es6": "ES6 და მის ფარგლებს მიღმა", + "components.navigation.docs.links.apiLts": "{fullLtsNodeVersion} API {spanLts}", + "components.navigation.docs.links.apiCurrent": "{fullCurrentNodeVersion} API", + "components.navigation.docs.links.guides": "სახელმძღვანელოები", + "components.navigation.docs.links.dependencies": "დაქვემდებარებულები (Dependencies)", + "components.navigation.getInvolved.links.collabSummit": "თანამშრომლობის სამიტი", + "components.navigation.getInvolved.links.contribute": "ხელშეწყობა", + "components.navigation.getInvolved.links.codeOfConduct": "ყოფაქცევის კოდექსი", + "components.downloadList.links.previousReleases": "უწინდელი ვერსიები", + "components.downloadList.links.packageManager": "Node.js-ის ინსტალაცია პაკეტის მენეჯერის გამოყენებით", + "components.downloadList.links.shaSums": "ხელმოწერილი SHASUMS გამოშვების (release) ფაილებისათვის", + "components.downaloadList.links.shaSums.howToVerify": " (როგორ გადავამოწმოთ)", + "components.downloadList.links.allDownloads": "ჩამოტვირთვის ყველა ვარიანტი", + "components.downloadList.links.nightlyReleases": "ღამის ვერსიები", + "components.downloadList.links.unofficialBuilds": "არაოფიციალური ვერსიები", + "components.downloadList.links.buildingFromSource": "Building Node.js from source on supported platforms", + "components.downloadList.links.installingOnLinux": "Node.js-ის ინსტალაცია ბინარული (binary) არქივის გამოყენებით", + "components.downloadList.links.installingOnWsl": "ინსტალაცია Windows-ის Linux-ქვესისტემისათვის (WSL)", + "components.downloadReleasesTable.changelog": "ცვლილებათა ჩამონათვალი", + "components.downloadReleasesTable.releases": "უწინდელი ვერსიები", + "components.downloadReleasesTable.docs": "დოკუმენტაცია", + "componets.header.buttons.toggleLanguage": "Toggle Language", + "components.header.buttons.toggleDarkMode": "გადართვა მუქ/ნათელ რეჟიმზე", + "components.pagination.next": "შემდეგი | ", + "components.pagination.previous": "წინა", + "layouts.blogPost.author.byLine": "{author, select, null {} other {By {author}, }}", + "layouts.blogIndex.currentYear": "News from {year}" +} diff --git a/i18n/locales/ko.json b/i18n/locales/ko.json new file mode 100644 index 0000000000000..ff50aa834d3b8 --- /dev/null +++ b/i18n/locales/ko.json @@ -0,0 +1,39 @@ +{ + "components.footer.scrollToTop.button": "맨 위로", + "components.header.links.home": "홈", + "components.header.links.about": "About", + "components.header.links.download": "다운로드", + "components.header.links.docs": "문서", + "components.header.links.getInvolved": "참여하기", + "components.header.links.security": "보안", + "components.header.links.certification": "Certification", + "components.header.links.blog": "뉴스", + "components.navigation.about.links.governance": "거버넌스", + "components.navigation.docs.links.es6": "ES6와 그 이후", + "components.navigation.docs.links.apiLts": "{fullLtsNodeVersion} API {spanLts}", + "components.navigation.docs.links.apiCurrent": "{fullCurrentNodeVersion} API", + "components.navigation.docs.links.guides": "안내", + "components.navigation.docs.links.dependencies": "의존성", + "components.navigation.getInvolved.links.collabSummit": "협업자 서밋", + "components.navigation.getInvolved.links.contribute": "기여하기", + "components.navigation.getInvolved.links.codeOfConduct": "행동강령", + "components.downloadList.links.previousReleases": "이전 릴리스", + "components.downloadList.links.packageManager": "패키지 관리자를 통한 Node.js 설치", + "components.downloadList.links.shaSums": "릴리스 파일에 서명된 SHASUMS", + "components.downaloadList.links.shaSums.howToVerify": " (검증 방법)", + "components.downloadList.links.allDownloads": "모든 다운로드 보기", + "components.downloadList.links.nightlyReleases": "나이틀리 빌드", + "components.downloadList.links.unofficialBuilds": "비공식 빌드", + "components.downloadList.links.buildingFromSource": "Building Node.js from source on supported platforms", + "components.downloadList.links.installingOnLinux": "Linux에서 바이너리 아카이브를 통해 Node.js 설치하기", + "components.downloadList.links.installingOnWsl": "Install on Windows Subsystem for Linux (WSL)", + "components.downloadReleasesTable.changelog": "변경사항", + "components.downloadReleasesTable.releases": "Releases", + "components.downloadReleasesTable.docs": "문서", + "componets.header.buttons.toggleLanguage": "Toggle Language", + "components.header.buttons.toggleDarkMode": "Toggle dark/light mode", + "components.pagination.next": "다음 | ", + "components.pagination.previous": "이전", + "layouts.blogPost.author.byLine": "{author, select, null {} other {By {author}, }}", + "layouts.blogIndex.currentYear": "News from {year}" +} diff --git a/i18n/locales/nl.json b/i18n/locales/nl.json new file mode 100644 index 0000000000000..e8d7e33bbc6ad --- /dev/null +++ b/i18n/locales/nl.json @@ -0,0 +1,39 @@ +{ + "components.footer.scrollToTop.button": "Scroll naar boven", + "components.header.links.home": "Home", + "components.header.links.about": "Over Node.js", + "components.header.links.download": "Downloads", + "components.header.links.docs": "Documentatie", + "components.header.links.getInvolved": "Raak Betrokken", + "components.header.links.security": "Security", + "components.header.links.certification": "Certificering", + "components.header.links.blog": "Nieuws", + "components.navigation.about.links.governance": "Bestuur", + "components.navigation.docs.links.es6": "ES6 en meer", + "components.navigation.docs.links.apiLts": "{fullLtsNodeVersion} API {spanLts}", + "components.navigation.docs.links.apiCurrent": "{fullCurrentNodeVersion} API", + "components.navigation.docs.links.guides": "Handleidingen", + "components.navigation.docs.links.dependencies": "Dependencies", + "components.navigation.getInvolved.links.collabSummit": "Collab Summit", + "components.navigation.getInvolved.links.contribute": "Bijdragen", + "components.navigation.getInvolved.links.codeOfConduct": "Code of Conduct", + "components.downloadList.links.previousReleases": "Vorige Versies", + "components.downloadList.links.packageManager": "Installeer Node.js via package manager", + "components.downloadList.links.shaSums": "Ondertekende SHASUMS voor release bestanden", + "components.downaloadList.links.shaSums.howToVerify": " (Hoe verifiëren?)", + "components.downloadList.links.allDownloads": "Alle download opties", + "components.downloadList.links.nightlyReleases": "Nightly builds", + "components.downloadList.links.unofficialBuilds": "Onofficiële builds", + "components.downloadList.links.buildingFromSource": "Building Node.js from source on supported platforms", + "components.downloadList.links.installingOnLinux": "Installeer Node.js via binary archive", + "components.downloadList.links.installingOnWsl": "Installeer op Windows Subsystem voor Linux (WSL)", + "components.downloadReleasesTable.changelog": "Changelog", + "components.downloadReleasesTable.releases": "Releases", + "components.downloadReleasesTable.docs": "Documentatie", + "componets.header.buttons.toggleLanguage": "Toggle Language", + "components.header.buttons.toggleDarkMode": "Toggle dark/light mode", + "components.pagination.next": "Volgende | ", + "components.pagination.previous": "Vorige", + "layouts.blogPost.author.byLine": "{author, select, null {} other {By {author}, }}", + "layouts.blogIndex.currentYear": "News from {year}" +} diff --git a/i18n/locales/pt-br.json b/i18n/locales/pt-br.json new file mode 100644 index 0000000000000..0183e8e7b0076 --- /dev/null +++ b/i18n/locales/pt-br.json @@ -0,0 +1,39 @@ +{ + "components.footer.scrollToTop.button": "Retorne ao começo", + "components.header.links.home": "Início", + "components.header.links.about": "Sobre", + "components.header.links.download": "Download", + "components.header.links.docs": "Documentação", + "components.header.links.getInvolved": "Participe", + "components.header.links.security": "Segurança", + "components.header.links.certification": "Certification", + "components.header.links.blog": "Novidades", + "components.navigation.about.links.governance": "Governança do Projeto", + "components.navigation.docs.links.es6": "ES6 e além", + "components.navigation.docs.links.apiLts": "{fullLtsNodeVersion} API {spanLts}", + "components.navigation.docs.links.apiCurrent": "{fullCurrentNodeVersion} API", + "components.navigation.docs.links.guides": "Guias", + "components.navigation.docs.links.dependencies": "Dependências", + "components.navigation.getInvolved.links.collabSummit": "Collab Summit", + "components.navigation.getInvolved.links.contribute": "Contribua", + "components.navigation.getInvolved.links.codeOfConduct": "Código de Conduta", + "components.downloadList.links.previousReleases": "Versões Anteriores", + "components.downloadList.links.packageManager": "Instale Node.js usando gerenciador de pacotes.", + "components.downloadList.links.shaSums": "SHASUMS assinados para arquivos de versões", + "components.downaloadList.links.shaSums.howToVerify": " (Como verificar)", + "components.downloadList.links.allDownloads": "Todas as opções de download", + "components.downloadList.links.nightlyReleases": "Versões Nightly", + "components.downloadList.links.unofficialBuilds": "Unofficial builds", + "components.downloadList.links.buildingFromSource": "Building Node.js from source on supported platforms", + "components.downloadList.links.installingOnLinux": "Instalando Node.js via arquivo binário.", + "components.downloadList.links.installingOnWsl": "Install on Windows Subsystem for Linux (WSL)", + "components.downloadReleasesTable.changelog": "Changelog", + "components.downloadReleasesTable.releases": "Releases", + "components.downloadReleasesTable.docs": "Documentação", + "componets.header.buttons.toggleLanguage": "Toggle Language", + "components.header.buttons.toggleDarkMode": "Toggle dark/light mode", + "components.pagination.next": "Próximo | ", + "components.pagination.previous": "Anterior", + "layouts.blogPost.author.byLine": "{author, select, null {} other {By {author}, }}", + "layouts.blogIndex.currentYear": "News from {year}" +} diff --git a/i18n/locales/ro.json b/i18n/locales/ro.json new file mode 100644 index 0000000000000..9dbf6ec601e9f --- /dev/null +++ b/i18n/locales/ro.json @@ -0,0 +1,39 @@ +{ + "components.footer.scrollToTop.button": "Scroll to top", + "components.header.links.home": "Home", + "components.header.links.about": "About", + "components.header.links.download": "Downloads", + "components.header.links.docs": "Docs", + "components.header.links.getInvolved": "Get Involved", + "components.header.links.security": "Security", + "components.header.links.certification": "Certification", + "components.header.links.blog": "News", + "components.navigation.about.links.governance": "Governance", + "components.navigation.docs.links.es6": "ES6 and beyond", + "components.navigation.docs.links.apiLts": "{fullLtsNodeVersion} API {spanLts}", + "components.navigation.docs.links.apiCurrent": "{fullCurrentNodeVersion} API", + "components.navigation.docs.links.guides": "Guides", + "components.navigation.docs.links.dependencies": "Dependencies", + "components.navigation.getInvolved.links.collabSummit": "Collab Summit", + "components.navigation.getInvolved.links.contribute": "Contribute", + "components.navigation.getInvolved.links.codeOfConduct": "Code of Conduct", + "components.downloadList.links.previousReleases": "Previous Releases", + "components.downloadList.links.packageManager": "Installing Node.js via package manager", + "components.downloadList.links.shaSums": "Signed SHASUMS for release files", + "components.downaloadList.links.shaSums.howToVerify": " (How to verify)", + "components.downloadList.links.allDownloads": "All download options", + "components.downloadList.links.nightlyReleases": "Nightly builds", + "components.downloadList.links.unofficialBuilds": "Unofficial builds", + "components.downloadList.links.buildingFromSource": "Building Node.js from source on supported platforms", + "components.downloadList.links.installingOnLinux": "Installing Node.js via binary archive", + "components.downloadList.links.installingOnWsl": "Install on Windows Subsystem for Linux (WSL)", + "components.downloadReleasesTable.changelog": "Changelog", + "components.downloadReleasesTable.releases": "Releases", + "components.downloadReleasesTable.docs": "Docs", + "componets.header.buttons.toggleLanguage": "Toggle Language", + "components.header.buttons.toggleDarkMode": "Toggle dark/light mode", + "components.pagination.next": "Newer | ", + "components.pagination.previous": "Older", + "layouts.blogPost.author.byLine": "{author, select, null {} other {By {author}, }}", + "layouts.blogIndex.currentYear": "News from {year}" +} diff --git a/i18n/locales/ru.json b/i18n/locales/ru.json new file mode 100644 index 0000000000000..0356947615fb6 --- /dev/null +++ b/i18n/locales/ru.json @@ -0,0 +1,39 @@ +{ + "components.footer.scrollToTop.button": "Вверх", + "components.header.links.home": "Главная", + "components.header.links.about": "О проекте", + "components.header.links.download": "Загрузка", + "components.header.links.docs": "Документация", + "components.header.links.getInvolved": "Присоединиться", + "components.header.links.security": "Безопасность", + "components.header.links.certification": "Certification", + "components.header.links.blog": "Новости", + "components.navigation.about.links.governance": "Управление", + "components.navigation.docs.links.es6": "ES6 и выше", + "components.navigation.docs.links.apiLts": "{fullLtsNodeVersion} API {spanLts}", + "components.navigation.docs.links.apiCurrent": "{fullCurrentNodeVersion} API", + "components.navigation.docs.links.guides": "Руководства", + "components.navigation.docs.links.dependencies": "Зависимости", + "components.navigation.getInvolved.links.collabSummit": "Саммит сотрудников", + "components.navigation.getInvolved.links.contribute": "Участие", + "components.navigation.getInvolved.links.codeOfConduct": "Правила", + "components.downloadList.links.previousReleases": "Предыдущие релизы", + "components.downloadList.links.packageManager": "Установка Node.js с помощью пакетного менеджера", + "components.downloadList.links.shaSums": "Подписанные SHASUMS для файлов релиза", + "components.downaloadList.links.shaSums.howToVerify": " (Как проверить)", + "components.downloadList.links.allDownloads": "Все варианты загрузки", + "components.downloadList.links.nightlyReleases": "Ночные сборки", + "components.downloadList.links.unofficialBuilds": "Неофициальные сборки", + "components.downloadList.links.buildingFromSource": "Building Node.js from source on supported platforms", + "components.downloadList.links.installingOnLinux": "Установка Node.js через бинарный архив в Linux", + "components.downloadList.links.installingOnWsl": "Install on Windows Subsystem for Linux (WSL)", + "components.downloadReleasesTable.changelog": "Список изменений", + "components.downloadReleasesTable.releases": "Releases", + "components.downloadReleasesTable.docs": "Документация", + "componets.header.buttons.toggleLanguage": "Toggle Language", + "components.header.buttons.toggleDarkMode": "Toggle dark/light mode", + "components.pagination.next": "Следующий | ", + "components.pagination.previous": "Предыдущий", + "layouts.blogPost.author.byLine": "{author, select, null {} other {By {author}, }}", + "layouts.blogIndex.currentYear": "News from {year}" +} diff --git a/i18n/locales/tr.json b/i18n/locales/tr.json new file mode 100644 index 0000000000000..ba8b4889a68da --- /dev/null +++ b/i18n/locales/tr.json @@ -0,0 +1,40 @@ +{ + "components.footer.scrollToTop.button": "Yukarı", + "components.header.links.home": "Anasayfa", + "components.header.links.about": "Hakkında", + "components.header.links.download": "İndir", + "components.header.links.docs": "Belgeler", + "components.header.links.getInvolved": "Katıl", + "components.header.links.security": "Güvenlik", + "components.header.links.certification": "Certification", + "components.header.links.blog": "Haberler", + "components.navigation.about.links.governance": "Yönetim", + "components.navigation.docs.links.es6": "ES6 ve ötesi", + "components.navigation.docs.links.apiLts": "{fullLtsNodeVersion} API {spanLts}", + "components.navigation.docs.links.apiCurrent": "{fullCurrentNodeVersion} API", + "components.navigation.docs.links.guides": "Rehberler", + "components.navigation.docs.links.dependencies": "Bağımlılıklar", + "components.navigation.getInvolved.links.collabSummit": "İşbirliği Zirvesi", + "components.navigation.getInvolved.links.contribute": "Katkıda bulunmak", + "components.navigation.getInvolved.links.codeOfConduct": "Davranış Kuralları", + "components.downloadList.links.previousReleases": "Önceki Sürümler", + "components.downloadList.links.packageManager": "Node.js'i paket yöneticisi ile kurmak", + "components.downloadList.links.shaSums": "Sürüm dosyaları için İmzalı SHASUMS", + "components.downaloadList.links.shaSums.howToVerify": " (Doğrulama nasıl yapılır)", + "components.downloadList.links.allDownloads": "Tüm indirme seçenekleri", + "components.downloadList.links.nightlyReleases": "Gecelik Sürümler", + "components.downloadList.links.unofficialBuilds": "Resmi Olmayan Sürümler", + "components.downloadList.links.buildingFromSource": "Building Node.js from source on supported platforms", + "components.downloadList.links.installingOnLinux": "Linux'ta ikili(binary) arşiv yoluyla Node.js kurulumu", + "components.downloadList.links.installingOnWsl": "Install on Windows Subsystem for Linux (WSL)", + "components.downloadReleasesTable.changelog": "Değişiklikler", + "components.downloadReleasesTable.releases": "Releases", + "components.downloadReleasesTable.docs": "Belgeler", + "componets.header.buttons.toggleLanguage": "Toggle Language", + "components.header.buttons.toggleDarkMode": "Toggle dark/light mode", + "components.pagination.next": "Sonraki | ", + "components.pagination.previous": "Önceki", + "layouts.blogPost.author.byLine": "{author, select, null {} other {By {author}, }}", + "layouts.blogIndex.currentYear": "News from {year}" + } + \ No newline at end of file diff --git a/i18n/locales/uk.json b/i18n/locales/uk.json new file mode 100644 index 0000000000000..7d515a93df221 --- /dev/null +++ b/i18n/locales/uk.json @@ -0,0 +1,39 @@ +{ + "components.footer.scrollToTop.button": "Вгору", + "components.header.links.home": "Головна", + "components.header.links.about": "Про проект", + "components.header.links.download": "Завантаження", + "components.header.links.docs": "Документація", + "components.header.links.getInvolved": "Приєднатись", + "components.header.links.security": "Безпека", + "components.header.links.certification": "Certification", + "components.header.links.blog": "Новини", + "components.navigation.about.links.governance": "Управління", + "components.navigation.docs.links.es6": "ES6 і вище", + "components.navigation.docs.links.apiLts": "{fullLtsNodeVersion} API {spanLts}", + "components.navigation.docs.links.apiCurrent": "{fullCurrentNodeVersion} API", + "components.navigation.docs.links.guides": "Керівництва", + "components.navigation.docs.links.dependencies": "Залежності", + "components.navigation.getInvolved.links.collabSummit": "Саміт співпраці", + "components.navigation.getInvolved.links.contribute": "Сприяння", + "components.navigation.getInvolved.links.codeOfConduct": "Правила", + "components.downloadList.links.previousReleases": "Попередні Релізи", + "components.downloadList.links.packageManager": "Встановлення Node.js через пакетний менеджер", + "components.downloadList.links.shaSums": "Підписані SHASUMS для файлів релізу", + "components.downaloadList.links.shaSums.howToVerify": " (Як перевірити)", + "components.downloadList.links.allDownloads": "Всі варіанти завантажень", + "components.downloadList.links.nightlyReleases": "Нічні збірки", + "components.downloadList.links.unofficialBuilds": "Unofficial builds", + "components.downloadList.links.buildingFromSource": "Building Node.js from source on supported platforms", + "components.downloadList.links.installingOnLinux": "Installing Node.js via binary archive", + "components.downloadList.links.installingOnWsl": "Install on Windows Subsystem for Linux (WSL)", + "components.downloadReleasesTable.changelog": "Список змін", + "components.downloadReleasesTable.releases": "Releases", + "components.downloadReleasesTable.docs": "Документація", + "componets.header.buttons.toggleLanguage": "Toggle Language", + "components.header.buttons.toggleDarkMode": "Toggle dark/light mode", + "components.pagination.next": "Далі | ", + "components.pagination.previous": "Попередній", + "layouts.blogPost.author.byLine": "{author, select, null {} other {By {author}, }}", + "layouts.blogIndex.currentYear": "News from {year}" +} diff --git a/i18n/locales/zh-cn.json b/i18n/locales/zh-cn.json new file mode 100644 index 0000000000000..148d15bd113db --- /dev/null +++ b/i18n/locales/zh-cn.json @@ -0,0 +1,39 @@ +{ + "components.footer.scrollToTop.button": "回到页顶", + "components.header.links.home": "首页", + "components.header.links.about": "关于", + "components.header.links.download": "下载", + "components.header.links.docs": "文档", + "components.header.links.getInvolved": "加入我们", + "components.header.links.security": "安全", + "components.header.links.certification": "相关认证", + "components.header.links.blog": "新闻", + "components.navigation.about.links.governance": "管理规则", + "components.navigation.docs.links.es6": "ES6 及更高", + "components.navigation.docs.links.apiLts": "{fullLtsNodeVersion} API {spanLts}", + "components.navigation.docs.links.apiCurrent": "{fullCurrentNodeVersion} API", + "components.navigation.docs.links.guides": "指南", + "components.navigation.docs.links.dependencies": "依赖项", + "components.navigation.getInvolved.links.collabSummit": "协作者峰会", + "components.navigation.getInvolved.links.contribute": "贡献", + "components.navigation.getInvolved.links.codeOfConduct": "管理", + "components.downloadList.links.previousReleases": "以往的版本", + "components.downloadList.links.packageManager": "使用包管理器安装 Node.js", + "components.downloadList.links.shaSums": "Signed SHASUMS for release files", + "components.downaloadList.links.shaSums.howToVerify": " (如何校验)", + "components.downloadList.links.allDownloads": "所有下载选项", + "components.downloadList.links.nightlyReleases": "每日构建", + "components.downloadList.links.unofficialBuilds": "非官方构建版", + "components.downloadList.links.buildingFromSource": "Building Node.js from source on supported platforms", + "components.downloadList.links.installingOnLinux": "在 Linux 上,通过二进制文件安装 Node.js", + "components.downloadList.links.installingOnWsl": "在适用于 Linux 的 Windows 子系统(WSL)上安装 Node.js", + "components.downloadReleasesTable.changelog": "更新日志", + "components.downloadReleasesTable.releases": "Releases", + "components.downloadReleasesTable.docs": "文档", + "componets.header.buttons.toggleLanguage": "Toggle Language", + "components.header.buttons.toggleDarkMode": "Toggle dark/light mode", + "components.pagination.next": "下一个 | ", + "components.pagination.previous": "以前", + "layouts.blogPost.author.byLine": "{author, select, null {} other {By {author}, }}", + "layouts.blogIndex.currentYear": "News from {year}" +} diff --git a/i18n/locales/zh-tw.json b/i18n/locales/zh-tw.json new file mode 100644 index 0000000000000..9fd6ed80c78bb --- /dev/null +++ b/i18n/locales/zh-tw.json @@ -0,0 +1,39 @@ +{ + "components.footer.scrollToTop.button": "回到頁首", + "components.header.links.home": "首頁", + "components.header.links.about": "關於我們", + "components.header.links.download": "下載", + "components.header.links.docs": "文件", + "components.header.links.getInvolved": "加入我們", + "components.header.links.security": "安全", + "components.header.links.certification": "相關認證", + "components.header.links.blog": "部落格", + "components.navigation.about.links.governance": "管理規則", + "components.navigation.docs.links.es6": "ES6 相關", + "components.navigation.docs.links.apiLts": "{fullLtsNodeVersion} API {spanLts}", + "components.navigation.docs.links.apiCurrent": "{fullCurrentNodeVersion} API", + "components.navigation.docs.links.guides": "技術指南", + "components.navigation.docs.links.dependencies": "Dependencies", + "components.navigation.getInvolved.links.collabSummit": "協作者峰會", + "components.navigation.getInvolved.links.contribute": "貢獻", + "components.navigation.getInvolved.links.codeOfConduct": "管理", + "components.downloadList.links.previousReleases": "舊版", + "components.downloadList.links.packageManager": "I使用套件管理器安裝 Node.js", + "components.downloadList.links.shaSums": "發佈檔案的 SHASUM 簽名", + "components.downaloadList.links.shaSums.howToVerify": " (How to verify)", + "components.downloadList.links.allDownloads": "所有下載選項", + "components.downloadList.links.nightlyReleases": "每日建置版本", + "components.downloadList.links.unofficialBuilds": "非官方建置版本", + "components.downloadList.links.buildingFromSource": "Building Node.js from source on supported platforms", + "components.downloadList.links.installingOnLinux": "在 Linux 上使用二進位檔案安裝 Node.js", + "components.downloadList.links.installingOnWsl": "Install on Windows Subsystem for Linux (WSL)", + "components.downloadReleasesTable.changelog": "更新紀錄", + "components.downloadReleasesTable.releases": "Releases", + "components.downloadReleasesTable.docs": "文件", + "componets.header.buttons.toggleLanguage": "Toggle Language", + "components.header.buttons.toggleDarkMode": "Toggle dark/light mode", + "components.pagination.next": "下一個 | ", + "components.pagination.previous": "上一個", + "layouts.blogPost.author.byLine": "{author, select, null {} other {By {author}, }}", + "layouts.blogIndex.currentYear": "News from {year}" +} diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000000000..a1e917d3bf9d6 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "styles/*": ["./styles/*"], + "i18n/*": ["./i18n/*"] + } + } +} diff --git a/layouts/AboutLayout.tsx b/layouts/AboutLayout.tsx new file mode 100644 index 0000000000000..ad71d5b5a67bf --- /dev/null +++ b/layouts/AboutLayout.tsx @@ -0,0 +1,15 @@ +import type { PropsWithChildren } from 'react'; + +import BaseLayout from './BaseLayout'; +import SideNavigation from '../components/SideNavigation'; + +const AboutLayout = ({ children }: PropsWithChildren) => ( + +
+ +
{children}
+
+
+); + +export default AboutLayout; diff --git a/layouts/BaseLayout.tsx b/layouts/BaseLayout.tsx new file mode 100644 index 0000000000000..91559745d8b2d --- /dev/null +++ b/layouts/BaseLayout.tsx @@ -0,0 +1,14 @@ +import type { PropsWithChildren } from 'react'; + +import Footer from '../components/Footer'; +import Header from '../components/Header'; + +const BaseLayout = ({ children }: PropsWithChildren) => ( + <> +
+
{children}
+