diff --git a/.nvmrc b/.nvmrc index 3c032078a4..209e3ef4b6 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -18 +20 diff --git a/CHANGELOG.md b/CHANGELOG.md index eb08220768..af03252955 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ - Replace ~date with ~day in Date.make\*. https://github.com/rescript-lang/rescript/pull/7324 - Remove `-bs-jsx-mode`. https://github.com/rescript-lang/rescript/pull/7327 +- Drop Node.js version <20 support, as it is reaching End-of-Life. https://github.com/rescript-lang/rescript-compiler/pull/7354 #### :house: Internal diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 90d8a60953..f26e2227c3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -14,7 +14,7 @@ Happy hacking! > Most of our contributors are working on Apple machines, so all our instructions are currently macOS / Linux centric. Contributions for Windows development welcome! -- [NodeJS v18](https://nodejs.org/) +- [Node.js](https://nodejs.org/) v20.x - C compiler toolchain (usually installed with `xcode` on Mac) - Python <= 3.11 (required to build ninja) - Rust toolchain (required to build rewatch; follow the instructions at https://www.rust-lang.org/tools/install) diff --git a/package-lock.json b/package-lock.json index 9878a7deff..0c685355bb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "nyc": "15.0.0" }, "engines": { - "node": ">=18" + "node": ">=20.11.0" } }, "node_modules/@babel/code-frame": { diff --git a/package.json b/package.json index 479a16879e..41327b7b37 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "Woonki Moon (https://github.com/mununki)" ], "engines": { - "node": ">=18" + "node": ">=20.11.0" }, "bin": { "bsc": "cli/bsc", @@ -78,5 +78,5 @@ "mocha": "10.8.2", "nyc": "15.0.0" }, - "packageManager": "npm@10.8.1+sha512.0e9d42e92bd2318408ed81eaff2da5f78baf23ee7d12a6eed44a6e2901d0f29d7ab715d1b918ade601f72e769a824d9a5c322383f22bbbda5dd396e79de2a077" + "packageManager": "npm@10.8.2+sha512.c7f0088c520a46596b85c6f8f1da943400199748a0f7ea8cb8df75469668dc26f6fb3ba26df87e2884a5ebe91557292d0f3db7d0929cdb4f14910c3032ac81fb" } diff --git a/tests/docstring_tests/DocTest.res b/tests/docstring_tests/DocTest.res index 1d7b78dc0a..bcb0bcba5f 100644 --- a/tests/docstring_tests/DocTest.res +++ b/tests/docstring_tests/DocTest.res @@ -21,11 +21,14 @@ let nodeVersion = let ignoreRuntimeTests = [ ( - // Ignore some tests not supported by node v18 - 18, + // Ignore some tests require Node.js v20+ + 20, + ["Stdlib.Array.toReversed", "Stdlib.Array.toSorted"], + ), + ( + // Ignore some tests require Node.js v22+ + 22, [ - "Stdlib.Array.toReversed", - "Stdlib.Array.toSorted", "Stdlib.Promise.withResolvers", "Stdlib.Set.union", "Stdlib.Set.isSupersetOf", @@ -202,7 +205,7 @@ let main = async () => { let codeExamples = examples->Array.filterMap(example => { let ignoreExample = ignoreRuntimeTests->Array.some( - ((version, tests)) => nodeVersion === version && tests->Array.includes(example.id), + ((version, tests)) => nodeVersion < version && tests->Array.includes(example.id), ) if ignoreExample { diff --git a/tests/docstring_tests/DocTest.res.mjs b/tests/docstring_tests/DocTest.res.mjs index c2276b1d23..8ce01923db 100644 --- a/tests/docstring_tests/DocTest.res.mjs +++ b/tests/docstring_tests/DocTest.res.mjs @@ -23,11 +23,17 @@ import * as RescriptTools_Docgen from "rescript/lib/es6/RescriptTools_Docgen.js" let nodeVersion = Stdlib_Option.getExn(Stdlib_Int.fromString(Stdlib_Option.getExn(process.version.replace("v", "").split(".")[0], "Failed to find major version of Node"), undefined), "Failed to convert node version to Int"); -let ignoreRuntimeTests = [[ - 18, +let ignoreRuntimeTests = [ + [ + 20, [ "Stdlib.Array.toReversed", - "Stdlib.Array.toSorted", + "Stdlib.Array.toSorted" + ] + ], + [ + 22, + [ "Stdlib.Promise.withResolvers", "Stdlib.Set.union", "Stdlib.Set.isSupersetOf", @@ -37,7 +43,8 @@ let ignoreRuntimeTests = [[ "Stdlib.Set.symmetricDifference", "Stdlib.Set.difference" ] - ]]; + ] +]; function getOutput(buffer) { return buffer.map(e => e.toString()).join(""); @@ -60,7 +67,7 @@ async function extractDocFromFile(file) { RE_EXN_ID: "Assert_failure", _1: [ "DocTest.res", - 58, + 61, 9 ], Error: new Error() @@ -237,7 +244,7 @@ async function main() { examples.sort((a, b) => Primitive_string.compare(a.name, b.name)); let codeExamples = Stdlib_Array.filterMap(examples, example => { let ignoreExample = ignoreRuntimeTests.some(param => { - if (nodeVersion === param[0]) { + if (nodeVersion < param[0]) { return param[1].includes(example.id); } else { return false;