From 96deffb8a1d51a7e46924f546084ae5eb01bf3c6 Mon Sep 17 00:00:00 2001 From: Nicolas Bonet Date: Tue, 25 Aug 2026 08:26:23 -0500 Subject: [PATCH 1/3] Enforce Node 26.5.0 / npm 11.17.0 via engines and engine-strict --- .npmrc | 1 + .nvmrc | 2 +- package-lock.json | 39 ++++++++++++++++++++++----------------- package.json | 4 ++++ 4 files changed, 28 insertions(+), 18 deletions(-) create mode 100644 .npmrc diff --git a/.npmrc b/.npmrc new file mode 100644 index 000000000..b6f27f135 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/.nvmrc b/.nvmrc index 0a492611a..3eb1386fc 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -24.11.0 +26.5.0 diff --git a/package-lock.json b/package-lock.json index bb7201e73..cf3fb7c87 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,6 +54,10 @@ "type-fest": "5.7.0", "typescript": "^5.7.2", "typescript-eslint": "^8.61.0" + }, + "engines": { + "node": ">=26.5.0", + "npm": ">=11.17.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -96,7 +100,6 @@ "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", @@ -1989,6 +1992,7 @@ "dev": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "@emnapi/wasi-threads": "1.2.2", "tslib": "^2.4.0" @@ -2001,6 +2005,19 @@ "dev": true, "license": "MIT", "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz", + "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "tslib": "^2.4.0" } @@ -3278,7 +3295,8 @@ "version": "15.7.12", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@types/punycode": { "version": "2.1.4", @@ -3353,7 +3371,6 @@ "integrity": "sha512-bFNvl9ZczlVb+wR2Akszf3gHfKVj/8WanXaGJ3UstTA7brNKg0cNdk6X1Psu5V7MZ2oQtzZKOEzIUehaoxbDGw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.61.0", @@ -3393,7 +3410,6 @@ "integrity": "sha512-5B7PfA2e1NQGCnDHd/0lW7W3gvp3d59Ryw54FYO8Uswxo9f6ikw3AZV+Xj/TvpImmpsiYyUqAfhC6kJID1jF6w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.61.0", "@typescript-eslint/types": "8.61.0", @@ -3997,7 +4013,6 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -4694,7 +4709,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", @@ -5204,7 +5218,8 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/damerau-levenshtein": { "version": "1.0.8", @@ -5740,7 +5755,6 @@ "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -5871,7 +5885,6 @@ "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", - "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -7255,7 +7268,6 @@ "integrity": "sha512-bUzh5nA/P5L66ihXTDP6J5BGnMB/8lXJXejYWSbH4Y4TvWM9t2S39sggQDYYQlx06cYcCsmu63HMYHGCIzUVfg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "dateformat": "~4.6.2", "eventemitter2": "~0.4.13", @@ -8580,7 +8592,6 @@ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, - "peer": true, "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -11284,7 +11295,6 @@ "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -11428,7 +11438,6 @@ "version": "16.12.0", "resolved": "https://registry.npmjs.org/react/-/react-16.12.0.tgz", "integrity": "sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA==", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -12450,7 +12459,6 @@ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -12670,7 +12678,6 @@ "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -12845,7 +12852,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "napi-postinstall": "^0.3.4" }, @@ -13319,7 +13325,6 @@ "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index 7f1c6f758..d82cb049b 100644 --- a/package.json +++ b/package.json @@ -257,6 +257,10 @@ "type": "git", "url": "git+ssh://git@github.com/Expensify/expensify-common.git" }, + "engines": { + "node": ">=26.5.0", + "npm": ">=11.17.0" + }, "dependencies": { "awesome-phonenumber": "^5.4.0", "classnames": "2.5.0", From 6a3353a011949df0d478e98b28bec7b5c7289c1a Mon Sep 17 00:00:00 2001 From: Nicolas Bonet Date: Tue, 25 Aug 2026 08:28:49 -0500 Subject: [PATCH 2/3] Target Node 24.19.0 / npm 11.10.0 floors instead of Node 26 --- .nvmrc | 2 +- package-lock.json | 4 ++-- package.json | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.nvmrc b/.nvmrc index 3eb1386fc..60ade1ae0 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -26.5.0 +24.19.0 diff --git a/package-lock.json b/package-lock.json index cf3fb7c87..114eff5ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -56,8 +56,8 @@ "typescript-eslint": "^8.61.0" }, "engines": { - "node": ">=26.5.0", - "npm": ">=11.17.0" + "node": ">=24.19.0", + "npm": ">=11.10.0" } }, "node_modules/@aashutoshrathi/word-wrap": { diff --git a/package.json b/package.json index d82cb049b..479aa2ec0 100644 --- a/package.json +++ b/package.json @@ -258,8 +258,8 @@ "url": "git+ssh://git@github.com/Expensify/expensify-common.git" }, "engines": { - "node": ">=26.5.0", - "npm": ">=11.17.0" + "node": ">=24.19.0", + "npm": ">=11.10.0" }, "dependencies": { "awesome-phonenumber": "^5.4.0", From 4de78c1bc238a747904dc753f2eef14c1d45d7de Mon Sep 17 00:00:00 2001 From: Nicolas Bonet Date: Tue, 25 Aug 2026 08:46:01 -0500 Subject: [PATCH 3/3] Use devEngines instead of engines for root-project toolchain floors --- package-lock.json | 4 ---- package.json | 14 +++++++++++--- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 114eff5ed..f2ae42ba8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,10 +54,6 @@ "type-fest": "5.7.0", "typescript": "^5.7.2", "typescript-eslint": "^8.61.0" - }, - "engines": { - "node": ">=24.19.0", - "npm": ">=11.10.0" } }, "node_modules/@aashutoshrathi/word-wrap": { diff --git a/package.json b/package.json index 479aa2ec0..8c3cbf472 100644 --- a/package.json +++ b/package.json @@ -257,9 +257,17 @@ "type": "git", "url": "git+ssh://git@github.com/Expensify/expensify-common.git" }, - "engines": { - "node": ">=24.19.0", - "npm": ">=11.10.0" + "devEngines": { + "runtime": { + "name": "node", + "version": ">=24.19.0", + "onFail": "error" + }, + "packageManager": { + "name": "npm", + "version": ">=11.10.0", + "onFail": "error" + } }, "dependencies": { "awesome-phonenumber": "^5.4.0",