Skip to content

Commit fd57e38

Browse files
committed
build: update node.js toolchain to use 20.19.0
This is the min supported version of Angular 20
1 parent 4bf3fc1 commit fd57e38

File tree

2 files changed

+142
-10
lines changed

2 files changed

+142
-10
lines changed

WORKSPACE

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ workspace(
44

55
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
66

7-
NODE_VERSION = "20.11.1"
8-
97
# The PKG rules are needed to build tar packages for integration tests. The builtin
108
# rule in `@bazel_tools` is not Windows compatible and outdated.
119
http_archive(
@@ -29,6 +27,9 @@ http_archive(
2927
# Fetch rules_nodejs and install its dependencies so we can install our npm dependencies.
3028
http_archive(
3129
name = "build_bazel_rules_nodejs",
30+
patches = [
31+
"//tools:bazel-patches/build_bazel_rules_nodejs.patch",
32+
],
3233
sha256 = "709cc0dcb51cf9028dd57c268066e5bc8f03a119ded410a13b5c3925d6e43c48",
3334
urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/5.8.4/rules_nodejs-5.8.4.tar.gz"],
3435
)
@@ -42,15 +43,15 @@ load("@rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains")
4243
nodejs_register_toolchains(
4344
name = "nodejs",
4445
node_repositories = {
45-
"20.11.1-darwin_arm64": ("node-v20.11.1-darwin-arm64.tar.gz", "node-v20.11.1-darwin-arm64", "e0065c61f340e85106a99c4b54746c5cee09d59b08c5712f67f99e92aa44995d"),
46-
"20.11.1-darwin_amd64": ("node-v20.11.1-darwin-x64.tar.gz", "node-v20.11.1-darwin-x64", "c52e7fb0709dbe63a4cbe08ac8af3479188692937a7bd8e776e0eedfa33bb848"),
47-
"20.11.1-linux_arm64": ("node-v20.11.1-linux-arm64.tar.xz", "node-v20.11.1-linux-arm64", "c957f29eb4e341903520caf362534f0acd1db7be79c502ae8e283994eed07fe1"),
48-
"20.11.1-linux_ppc64le": ("node-v20.11.1-linux-ppc64le.tar.xz", "node-v20.11.1-linux-ppc64le", "51343cacf5cdf5c4b5e93e919d19dd373d6ef43d5f2c666eae299f26e31d08b5"),
49-
"20.11.1-linux_s390x": ("node-v20.11.1-linux-s390x.tar.xz", "node-v20.11.1-linux-s390x", "b32616b705cd0ddbb230b95c693e3d7a37becc2ced9bcadea8dc824cceed6be0"),
50-
"20.11.1-linux_amd64": ("node-v20.11.1-linux-x64.tar.xz", "node-v20.11.1-linux-x64", "d8dab549b09672b03356aa2257699f3de3b58c96e74eb26a8b495fbdc9cf6fbe"),
51-
"20.11.1-windows_amd64": ("node-v20.11.1-win-x64.zip", "node-v20.11.1-win-x64", "bc032628d77d206ffa7f133518a6225a9c5d6d9210ead30d67e294ff37044bda"),
46+
"20.19.0-darwin_arm64": ("node-v20.19.0-darwin-arm64.tar.gz", "node-v20.19.0-darwin-arm64", "c016cd1975a264a29dc1b07c6fbe60d5df0a0c2beb4113c0450e3d998d1a0d9c"),
47+
"20.19.0-darwin_amd64": ("node-v20.19.0-darwin-x64.tar.gz", "node-v20.19.0-darwin-x64", "a8554af97d6491fdbdabe63d3a1cfb9571228d25a3ad9aed2df856facb131b20"),
48+
"20.19.0-linux_arm64": ("node-v20.19.0-linux-arm64.tar.xz", "node-v20.19.0-linux-arm64", "dbe339e55eb393955a213e6b872066880bb9feceaa494f4d44c7aac205ec2ab9"),
49+
"20.19.0-linux_ppc64le": ("node-v20.19.0-linux-ppc64le.tar.xz", "node-v20.19.0-linux-ppc64le", "84937108f005679e60b486ed8e801cebfe923f02b76d8e710463d32f82181f65"),
50+
"20.19.0-linux_s390x": ("node-v20.19.0-linux-s390x.tar.xz", "node-v20.19.0-linux-s390x", "11f8ee99d792a83bba7b29911e0229dd6cd5e88987d7416346067db1cc76d89a"),
51+
"20.19.0-linux_amd64": ("node-v20.19.0-linux-x64.tar.xz", "node-v20.19.0-linux-x64", "b4e336584d62abefad31baecff7af167268be9bb7dd11f1297112e6eed3ca0d5"),
52+
"20.19.0-windows_amd64": ("node-v20.19.0-win-x64.zip", "node-v20.19.0-win-x64", "be72284c7bc62de07d5a9fd0ae196879842c085f11f7f2b60bf8864c0c9d6a4f"),
5253
},
53-
node_version = NODE_VERSION,
54+
node_version = "20.19.0",
5455
)
5556

5657
http_archive(
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
diff --git internal/node/node_patches.cjs internal/node/node_patches.cjs
2+
index 239bb5f..1c02e06 100755
3+
--- internal/node/node_patches.cjs
4+
+++ internal/node/node_patches.cjs
5+
@@ -15,7 +15,7 @@ var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof win
6+
7+
function createCommonjsModule(fn) {
8+
var module = { exports: {} };
9+
- return fn(module, module.exports), module.exports;
10+
+ return fn(module, module.exports), module.exports;
11+
}
12+
13+
var fs = createCommonjsModule(function (module, exports) {
14+
@@ -95,7 +95,7 @@ const patcher = (fs = fs__default['default'], roots) => {
15+
args[args.length - 1] = (err, stats) => {
16+
if (err)
17+
return cb(err);
18+
- path__default['default'].resolve(args[0]);
19+
+ path__default['default'].resolve(args[0].toString());
20+
if (!stats.isSymbolicLink()) {
21+
return cb(null, stats);
22+
}
23+
@@ -116,7 +116,7 @@ const patcher = (fs = fs__default['default'], roots) => {
24+
return cb(err);
25+
}
26+
}
27+
- str = path__default['default'].resolve(path__default['default'].dirname(args[0]), str);
28+
+ str = path__default['default'].resolve(path__default['default'].dirname(args[0].toString()), str);
29+
if (isEscape(str, args[0])) {
30+
// if it's an out link we have to return the original stat.
31+
return origStat(args[0], (err, plainStat) => {
32+
@@ -143,7 +143,7 @@ const patcher = (fs = fs__default['default'], roots) => {
33+
if (err)
34+
return cb(err);
35+
if (isEscape(str, args[0])) {
36+
- cb(null, path__default['default'].resolve(args[0]));
37+
+ cb(null, path__default['default'].resolve(args[0].toString()));
38+
}
39+
else {
40+
cb(null, str);
41+
@@ -161,7 +161,7 @@ const patcher = (fs = fs__default['default'], roots) => {
42+
if (err)
43+
return cb(err);
44+
if (isEscape(str, args[0])) {
45+
- cb(null, path__default['default'].resolve(args[0]));
46+
+ cb(null, path__default['default'].resolve(args[0].toString()));
47+
}
48+
else {
49+
cb(null, str);
50+
@@ -176,9 +176,9 @@ const patcher = (fs = fs__default['default'], roots) => {
51+
if (cb) {
52+
cb = once(cb);
53+
args[args.length - 1] = (err, str) => {
54+
- args[0] = path__default['default'].resolve(args[0]);
55+
+ args[0] = path__default['default'].resolve(args[0].toString());
56+
if (str)
57+
- str = path__default['default'].resolve(path__default['default'].dirname(args[0]), str);
58+
+ str = path__default['default'].resolve(path__default['default'].dirname(args[0].toString()), str);
59+
if (err)
60+
return cb(err);
61+
if (isEscape(str, args[0])) {
62+
@@ -196,13 +196,13 @@ const patcher = (fs = fs__default['default'], roots) => {
63+
// tslint:disable-next-line:no-any
64+
fs.lstatSync = (...args) => {
65+
const stats = origLstatSync(...args);
66+
- const linkPath = path__default['default'].resolve(args[0]);
67+
+ const linkPath = path__default['default'].resolve(args[0].toString());
68+
if (!stats.isSymbolicLink()) {
69+
return stats;
70+
}
71+
let linkTarget;
72+
try {
73+
- linkTarget = path__default['default'].resolve(path__default['default'].dirname(args[0]), origReadlinkSync(linkPath));
74+
+ linkTarget = path__default['default'].resolve(path__default['default'].dirname(args[0].toString()), origReadlinkSync(linkPath));
75+
}
76+
catch (e) {
77+
if (e.code === 'ENOENT') {
78+
@@ -228,7 +228,7 @@ const patcher = (fs = fs__default['default'], roots) => {
79+
fs.realpathSync = (...args) => {
80+
const str = origRealpathSync(...args);
81+
if (isEscape(str, args[0])) {
82+
- return path__default['default'].resolve(args[0]);
83+
+ return path__default['default'].resolve(args[0].toString());
84+
}
85+
return str;
86+
};
87+
@@ -236,14 +236,14 @@ const patcher = (fs = fs__default['default'], roots) => {
88+
fs.realpathSync.native = (...args) => {
89+
const str = origRealpathSyncNative(...args);
90+
if (isEscape(str, args[0])) {
91+
- return path__default['default'].resolve(args[0]);
92+
+ return path__default['default'].resolve(args[0].toString());
93+
}
94+
return str;
95+
};
96+
// tslint:disable-next-line:no-any
97+
fs.readlinkSync = (...args) => {
98+
- args[0] = path__default['default'].resolve(args[0]);
99+
- const str = path__default['default'].resolve(path__default['default'].dirname(args[0]), origReadlinkSync(...args));
100+
+ args[0] = path__default['default'].resolve(args[0].toString());
101+
+ const str = path__default['default'].resolve(path__default['default'].dirname(args[0].toString()), origReadlinkSync(...args));
102+
if (isEscape(str, args[0]) || str === args[0]) {
103+
const e = new Error('EINVAL: invalid argument, readlink \'' + args[0] + '\'');
104+
// tslint:disable-next-line:no-any
105+
@@ -254,7 +254,7 @@ const patcher = (fs = fs__default['default'], roots) => {
106+
};
107+
// tslint:disable-next-line:no-any
108+
fs.readdir = (...args) => {
109+
- const p = path__default['default'].resolve(args[0]);
110+
+ const p = path__default['default'].resolve(args[0].toString());
111+
let cb = args[args.length - 1];
112+
if (typeof cb !== 'function') {
113+
// this will likely throw callback required error.
114+
@@ -284,7 +284,7 @@ const patcher = (fs = fs__default['default'], roots) => {
115+
// tslint:disable-next-line:no-any
116+
fs.readdirSync = (...args) => {
117+
const res = origReaddirSync(...args);
118+
- const p = path__default['default'].resolve(args[0]);
119+
+ const p = path__default['default'].resolve(args[0].toString());
120+
// tslint:disable-next-line:no-any
121+
res.forEach((v) => {
122+
handleDirentSync(p, v);
123+
@@ -504,6 +504,8 @@ const escapeFunction = (roots) => {
124+
// ensure roots are always absolute
125+
roots = roots.map(root => path__default['default'].resolve(root));
126+
function isEscape(linkTarget, linkPath) {
127+
+ linkTarget = linkTarget.toString();
128+
+ linkPath = linkPath.toString();
129+
if (!path__default['default'].isAbsolute(linkPath)) {
130+
linkPath = path__default['default'].resolve(linkPath);
131+
}

0 commit comments

Comments
 (0)