From b16869b72c583d9c9330255fa0dc831614c0e9de Mon Sep 17 00:00:00 2001 From: Anton Georgiev Date: Fri, 4 Sep 2026 20:53:16 -0400 Subject: [PATCH] build: require Node >= 22 and build with Node 24 Add an `engines` floor of Node >= 22 to package.json and mirror it into package-lock.json, and bump @types/node to ^24.13.3 so the typings match the runtime the plugin is built with. Move CI onto Node 24 (was Node 20). Install Node 24 from NodeSource when building the Debian package. Also move the locked typescript to 5.9.3, within the existing ^5.1.3 range. @types/node 24 uses Symbol.dispose and Disposable, which TypeScript only defines from 5.2, and this repo was pinned at 5.1.3. --- .../workflows/build-plugin-deb-package.yml | 2 +- .github/workflows/publish-tag.yml | 2 +- .github/workflows/ts-code-compilation.yml | 2 +- .github/workflows/ts-code-validation.yml | 2 +- package-lock.json | 52 +++++++++++-------- package.json | 7 ++- 6 files changed, 38 insertions(+), 29 deletions(-) diff --git a/.github/workflows/build-plugin-deb-package.yml b/.github/workflows/build-plugin-deb-package.yml index 942f4e1..4505077 100644 --- a/.github/workflows/build-plugin-deb-package.yml +++ b/.github/workflows/build-plugin-deb-package.yml @@ -33,7 +33,7 @@ jobs: - name: Set up Node.js run: | - curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - + curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash - sudo apt-get install -y nodejs - name: Verify Node.js installation diff --git a/.github/workflows/publish-tag.yml b/.github/workflows/publish-tag.yml index 09ffeff..012dc98 100644 --- a/.github/workflows/publish-tag.yml +++ b/.github/workflows/publish-tag.yml @@ -19,7 +19,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v3 with: - node-version: '20' + node-version: '24' - name: Get triggering user's email run: | diff --git a/.github/workflows/ts-code-compilation.yml b/.github/workflows/ts-code-compilation.yml index 8c351fc..3d917f4 100644 --- a/.github/workflows/ts-code-compilation.yml +++ b/.github/workflows/ts-code-compilation.yml @@ -14,7 +14,7 @@ jobs: - name: install node uses: actions/setup-node@v4 with: - node-version: 20.x + node-version: 24.x - name: run npm install run: npm install - name: typescript code compilation diff --git a/.github/workflows/ts-code-validation.yml b/.github/workflows/ts-code-validation.yml index b9fa8e8..7dbff82 100644 --- a/.github/workflows/ts-code-validation.yml +++ b/.github/workflows/ts-code-validation.yml @@ -15,7 +15,7 @@ jobs: - name: install node uses: actions/setup-node@v4 with: - node-version: 20.x + node-version: 24.x - name: run npm install run: npm install - name: typescript code validation with eslint diff --git a/package-lock.json b/package-lock.json index 253bd26..ccabddb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "dependencies": { "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", - "@types/node": "^20.3.1", + "@types/node": "^24.13.3", "@types/react": "^18.2.13", "@types/react-dom": "^18.2.6", "babel-plugin-syntax-dynamic-import": "^6.18.0", @@ -26,7 +26,7 @@ "@babel/core": "^7.21.8", "@babel/preset-env": "^7.21.5", "@babel/preset-react": "^7.18.6", - "@types/node": "^20.4.4", + "@types/node": "^24.13.3", "@types/react": "^18.2.15", "@types/react-copy-to-clipboard": "^5.0.7", "@types/react-dom": "^18.2.7", @@ -53,6 +53,9 @@ "webpack": "^5.83.1", "webpack-cli": "^5.1.1", "webpack-dev-server": "^4.15.1" + }, + "engines": { + "node": ">=22" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -2415,12 +2418,13 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.12.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", - "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "version": "24.13.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.3.tgz", + "integrity": "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==", "dev": true, + "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~7.18.0" } }, "node_modules/@types/parse-json": { @@ -9114,10 +9118,11 @@ } }, "node_modules/typescript": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", - "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -9142,10 +9147,11 @@ } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "dev": true, + "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", @@ -11411,12 +11417,12 @@ "dev": true }, "@types/node": { - "version": "20.12.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", - "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "version": "24.13.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.3.tgz", + "integrity": "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==", "dev": true, "requires": { - "undici-types": "~5.26.4" + "undici-types": "~7.18.0" } }, "@types/parse-json": { @@ -16161,9 +16167,9 @@ } }, "typescript": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", - "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true }, "unbox-primitive": { @@ -16179,9 +16185,9 @@ } }, "undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", "dev": true }, "unicode-canonical-property-names-ecmascript": { diff --git a/package.json b/package.json index b81961f..20c4d7e 100644 --- a/package.json +++ b/package.json @@ -3,10 +3,13 @@ "version": "0.0.1", "private": true, "main": "./src/index.tsx", + "engines": { + "node": ">=22" + }, "dependencies": { "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", - "@types/node": "^20.3.1", + "@types/node": "^24.13.3", "@types/react": "^18.2.13", "@types/react-dom": "^18.2.6", "babel-plugin-syntax-dynamic-import": "^6.18.0", @@ -42,7 +45,7 @@ "@babel/core": "^7.21.8", "@babel/preset-env": "^7.21.5", "@babel/preset-react": "^7.18.6", - "@types/node": "^20.4.4", + "@types/node": "^24.13.3", "@types/react": "^18.2.15", "@types/react-copy-to-clipboard": "^5.0.7", "@types/react-dom": "^18.2.7",