From 493790953fe2a348c43570a5ae0391c1878e737d Mon Sep 17 00:00:00 2001 From: 18bharathkumar Date: Sun, 11 Jan 2026 12:25:21 +0530 Subject: [PATCH 1/2] build: add missing test dependencies to package workspaces to fix lint warnings --- eslint.config.mjs | 2 +- package-lock.json | 47 ++++++++++++++++++++++-- packages/binding-coap/package.json | 4 ++ packages/binding-file/package.json | 3 ++ packages/binding-http/package.json | 8 +++- packages/binding-mbus/package.json | 4 ++ packages/binding-modbus/package.json | 4 ++ packages/binding-mqtt/package.json | 4 ++ packages/binding-netconf/package.json | 2 + packages/binding-websockets/package.json | 4 ++ packages/cli/package.json | 2 + packages/core/package.json | 10 ++++- 12 files changed, 88 insertions(+), 6 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 62bebdf34..23ec14f75 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -89,7 +89,7 @@ export default defineConfig([ "n/hashbang": "warn", // *************** Ensure that only used dependencies are imported *************** - "extraneous-dependencies/no-extraneous-dependencies": "off", // https://github.com/eclipse-thingweb/node-wot/issues/1430 + "extraneous-dependencies/no-extraneous-dependencies": "warn", // https://github.com/eclipse-thingweb/node-wot/issues/1430 // *************** Code style and best practices *************** "unused-imports/no-unused-imports": "error", diff --git a/package-lock.json b/package-lock.json index f2f111f1f..be4a1195d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12179,6 +12179,10 @@ "rxjs": "^5.5.11", "slugify": "^1.4.5", "wot-typescript-definitions": "0.8.0-SNAPSHOT.31" + }, + "devDependencies": { + "@testdeck/mocha": "^0.1.2", + "chai": "^4.3.4" } }, "packages/binding-file": { @@ -12188,6 +12192,9 @@ "dependencies": { "@node-wot/core": "0.9.2", "rxjs": "^5.5.11" + }, + "devDependencies": { + "chai": "^4.3.4" } }, "packages/binding-http": { @@ -12209,13 +12216,19 @@ "devDependencies": { "@node-oauth/express-oauth-server": "^3.0.1", "@node-oauth/oauth2-server": "^4.3.0", + "@sinonjs/fake-timers": "^7.1.2", + "@testdeck/mocha": "^0.1.2", "@types/accept-language-parser": "^1.5.2", "@types/basic-auth": "1.1.3", "@types/eventsource": "^1.1.15", "@types/express": "^4.17.3", "@types/node-fetch": "^2.6.12", "body-parser": "^1.20.3", + "chai": "^4.3.4", + "chai-as-promised": "^7.1.1", + "chai-spies": "^1.0.0", "express": "^4.20.0", + "serve-static": "^1.16.2", "ssestream": "^1.1.0", "timekeeper": "^2.2.0" } @@ -12228,6 +12241,10 @@ "@node-wot/core": "0.9.2", "node-mbus": "^2.2.6", "rxjs": "^5.5.11" + }, + "devDependencies": { + "chai": "^4.3.4", + "chai-as-promised": "^7.1.1" } }, "packages/binding-modbus": { @@ -12239,6 +12256,10 @@ "modbus-serial": "8.0.17", "rxjs": "^5.5.11", "wot-typescript-definitions": "0.8.0-SNAPSHOT.31" + }, + "devDependencies": { + "chai": "^4.3.4", + "chai-as-promised": "^7.1.1" } }, "packages/binding-mqtt": { @@ -12250,6 +12271,10 @@ "aedes": "^0.46.2", "mqtt": "^5.3.2", "rxjs": "^5.5.11" + }, + "devDependencies": { + "chai": "^4.3.4", + "chai-as-promised": "^7.1.1" } }, "packages/binding-netconf": { @@ -12265,7 +12290,9 @@ }, "devDependencies": { "@types/node-netconf": "npm:@types/netconf@^2.0.0", - "@types/url-parse": "^1.4.3" + "@types/url-parse": "^1.4.3", + "chai": "^4.3.4", + "chai-spies": "^1.0.0" } }, "packages/binding-opcua": { @@ -12333,6 +12360,10 @@ "rxjs": "^5.5.11", "slugify": "^1.4.5", "ws": "^7.5.10" + }, + "devDependencies": { + "@testdeck/mocha": "^0.1.2", + "chai": "^4.3.4" } }, "packages/browser-bundle": { @@ -12495,7 +12526,9 @@ "wot-servient": "bin/index.js" }, "devDependencies": { - "@types/lodash": "^4.14.199" + "@testdeck/mocha": "^0.1.2", + "@types/lodash": "^4.14.199", + "chai": "^4.3.4" }, "optionalDependencies": { "ts-node": "10.9.1" @@ -12522,10 +12555,18 @@ "wot-thing-description-types": "^1.1.0-12-March-2025" }, "devDependencies": { + "@testdeck/mocha": "^0.1.2", + "@types/chai": "^4.2.18", + "@types/chai-as-promised": "^7.1.4", + "@types/chai-spies": "^1.0.4", "@types/content-type": "^1.1.8", "@types/debug": "^4.1.7", + "@types/mocha": "^10.0.10", "@types/uritemplate": "^0.3.4", - "@types/uuid": "^8.3.1" + "@types/uuid": "^8.3.1", + "chai": "^4.3.4", + "chai-as-promised": "^7.1.1", + "chai-spies": "^1.0.0" } }, "packages/core/node_modules/ajv-formats": { diff --git a/packages/binding-coap/package.json b/packages/binding-coap/package.json index f094bd28c..6ff2bc818 100644 --- a/packages/binding-coap/package.json +++ b/packages/binding-coap/package.json @@ -23,6 +23,10 @@ "slugify": "^1.4.5", "wot-typescript-definitions": "0.8.0-SNAPSHOT.31" }, + "devDependencies": { + "@testdeck/mocha": "^0.1.2", + "chai": "^4.3.4" + }, "scripts": { "build": "tsc -b", "test": "mocha --require ts-node/register --extension ts", diff --git a/packages/binding-file/package.json b/packages/binding-file/package.json index 3192a412c..882cb7226 100644 --- a/packages/binding-file/package.json +++ b/packages/binding-file/package.json @@ -17,6 +17,9 @@ "@node-wot/core": "0.9.2", "rxjs": "^5.5.11" }, + "devDependencies": { + "chai": "^4.3.4" + }, "scripts": { "build": "tsc -b", "test": "mocha --require ts-node/register --extension ts", diff --git a/packages/binding-http/package.json b/packages/binding-http/package.json index bc89e0b40..72f0bd1dc 100644 --- a/packages/binding-http/package.json +++ b/packages/binding-http/package.json @@ -28,7 +28,13 @@ "body-parser": "^1.20.3", "express": "^4.20.0", "ssestream": "^1.1.0", - "timekeeper": "^2.2.0" + "timekeeper": "^2.2.0", + "@testdeck/mocha": "^0.1.2", + "chai": "^4.3.4", + "chai-as-promised": "^7.1.1", + "chai-spies": "^1.0.0", + "serve-static": "^1.16.2", + "@sinonjs/fake-timers": "^7.1.2" }, "dependencies": { "@node-wot/core": "0.9.2", diff --git a/packages/binding-mbus/package.json b/packages/binding-mbus/package.json index e2622ac69..0355f078b 100644 --- a/packages/binding-mbus/package.json +++ b/packages/binding-mbus/package.json @@ -18,6 +18,10 @@ "node-mbus": "^2.2.6", "rxjs": "^5.5.11" }, + "devDependencies": { + "chai": "^4.3.4", + "chai-as-promised": "^7.1.1" + }, "scripts": { "build": "tsc -b", "test": "mocha --require ts-node/register --extension ts", diff --git a/packages/binding-modbus/package.json b/packages/binding-modbus/package.json index 529ae1b5c..3f7d47a0a 100644 --- a/packages/binding-modbus/package.json +++ b/packages/binding-modbus/package.json @@ -22,6 +22,10 @@ "rxjs": "^5.5.11", "wot-typescript-definitions": "0.8.0-SNAPSHOT.31" }, + "devDependencies": { + "chai": "^4.3.4", + "chai-as-promised": "^7.1.1" + }, "scripts": { "build": "tsc -b", "test": "mocha --require ts-node/register --extension ts", diff --git a/packages/binding-mqtt/package.json b/packages/binding-mqtt/package.json index 6a86592a4..2c627a250 100644 --- a/packages/binding-mqtt/package.json +++ b/packages/binding-mqtt/package.json @@ -19,6 +19,10 @@ "mqtt": "^5.3.2", "rxjs": "^5.5.11" }, + "devDependencies": { + "chai": "^4.3.4", + "chai-as-promised": "^7.1.1" + }, "scripts": { "build": "tsc -b", "test": "mocha --require ts-node/register --extension ts", diff --git a/packages/binding-netconf/package.json b/packages/binding-netconf/package.json index 121a31bb6..58f7aaee9 100644 --- a/packages/binding-netconf/package.json +++ b/packages/binding-netconf/package.json @@ -36,6 +36,8 @@ }, "keywords": [], "devDependencies": { + "chai": "^4.3.4", + "chai-spies": "^1.0.0", "@types/node-netconf": "npm:@types/netconf@^2.0.0", "@types/url-parse": "^1.4.3" } diff --git a/packages/binding-websockets/package.json b/packages/binding-websockets/package.json index a1b65b7c3..7f3334cec 100644 --- a/packages/binding-websockets/package.json +++ b/packages/binding-websockets/package.json @@ -21,6 +21,10 @@ "slugify": "^1.4.5", "ws": "^7.5.10" }, + "devDependencies": { + "@testdeck/mocha": "^0.1.2", + "chai": "^4.3.4" + }, "scripts": { "build": "tsc -b", "test": "mocha --require ts-node/register --extension ts", diff --git a/packages/cli/package.json b/packages/cli/package.json index 53d9047e3..2e82ec5d7 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -47,6 +47,8 @@ "homepage": "https://github.com/eclipse-thingweb/node-wot/tree/master/packages/cli#readme", "keywords": [], "devDependencies": { + "@testdeck/mocha": "^0.1.2", + "chai": "^4.3.4", "@types/lodash": "^4.14.199" } } diff --git a/packages/core/package.json b/packages/core/package.json index 6e8fa3dd3..d81950513 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -18,7 +18,15 @@ "@types/content-type": "^1.1.8", "@types/debug": "^4.1.7", "@types/uritemplate": "^0.3.4", - "@types/uuid": "^8.3.1" + "@types/uuid": "^8.3.1", + "@testdeck/mocha": "^0.1.2", + "@types/chai": "^4.2.18", + "@types/chai-as-promised": "^7.1.4", + "@types/chai-spies": "^1.0.4", + "@types/mocha": "^10.0.10", + "chai": "^4.3.4", + "chai-as-promised": "^7.1.1", + "chai-spies": "^1.0.0" }, "dependencies": { "@petamoriken/float16": "^3.1.1", From 6034fdeb98bccb6e736852f1f9a442dc6e85644e Mon Sep 17 00:00:00 2001 From: 18bharathkumar Date: Tue, 13 Jan 2026 01:03:51 +0530 Subject: [PATCH 2/2] Fix monorepo dependency hoisting and ESLint extraneous-dependencies rule --- eslint.config.mjs | 33 +++++++++++++++++++++++- packages/binding-coap/package.json | 4 --- packages/binding-file/package.json | 3 --- packages/binding-http/package.json | 4 --- packages/binding-mbus/package.json | 4 --- packages/binding-modbus/package.json | 4 --- packages/binding-mqtt/package.json | 4 --- packages/binding-netconf/package.json | 2 -- packages/binding-opcua/package.json | 3 +-- packages/binding-websockets/package.json | 4 --- packages/cli/package.json | 2 -- packages/core/package.json | 10 +------ 12 files changed, 34 insertions(+), 43 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 23ec14f75..df45beba9 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,3 +1,4 @@ +import fs from "fs"; import path from "path"; import { fileURLToPath } from "url"; @@ -25,6 +26,17 @@ const compat = new FlatCompat({ allConfig: js.configs.all, }); +const packageDirs = [__dirname]; +const packagesRoot = path.join(__dirname, "packages"); +if (fs.existsSync(packagesRoot)) { + fs.readdirSync(packagesRoot).forEach((dir) => { + const pkgPath = path.join(packagesRoot, dir, "package.json"); + if (fs.existsSync(pkgPath)) { + packageDirs.push(path.join(packagesRoot, dir)); + } + }); +} + export default defineConfig([ ...compat.extends( "eslint:recommended", @@ -89,7 +101,13 @@ export default defineConfig([ "n/hashbang": "warn", // *************** Ensure that only used dependencies are imported *************** - "extraneous-dependencies/no-extraneous-dependencies": "warn", // https://github.com/eclipse-thingweb/node-wot/issues/1430 + // Default rule for root files + "extraneous-dependencies/no-extraneous-dependencies": [ + "warn", + { + packageDir: [__dirname], + }, + ], // *************** Code style and best practices *************** "unused-imports/no-unused-imports": "error", @@ -157,4 +175,17 @@ export default defineConfig([ "**/bin", "**/*.js", ]), + ...packageDirs + .filter((dir) => dir !== __dirname) + .map((dir) => ({ + files: [path.relative(__dirname, dir) + "/**/*.{ts,js}"], + rules: { + "extraneous-dependencies/no-extraneous-dependencies": [ + "warn", + { + packageDir: [__dirname, dir], + }, + ], + }, + })), ]); diff --git a/packages/binding-coap/package.json b/packages/binding-coap/package.json index 6ff2bc818..f094bd28c 100644 --- a/packages/binding-coap/package.json +++ b/packages/binding-coap/package.json @@ -23,10 +23,6 @@ "slugify": "^1.4.5", "wot-typescript-definitions": "0.8.0-SNAPSHOT.31" }, - "devDependencies": { - "@testdeck/mocha": "^0.1.2", - "chai": "^4.3.4" - }, "scripts": { "build": "tsc -b", "test": "mocha --require ts-node/register --extension ts", diff --git a/packages/binding-file/package.json b/packages/binding-file/package.json index 882cb7226..3192a412c 100644 --- a/packages/binding-file/package.json +++ b/packages/binding-file/package.json @@ -17,9 +17,6 @@ "@node-wot/core": "0.9.2", "rxjs": "^5.5.11" }, - "devDependencies": { - "chai": "^4.3.4" - }, "scripts": { "build": "tsc -b", "test": "mocha --require ts-node/register --extension ts", diff --git a/packages/binding-http/package.json b/packages/binding-http/package.json index 72f0bd1dc..ce3f3701b 100644 --- a/packages/binding-http/package.json +++ b/packages/binding-http/package.json @@ -29,10 +29,6 @@ "express": "^4.20.0", "ssestream": "^1.1.0", "timekeeper": "^2.2.0", - "@testdeck/mocha": "^0.1.2", - "chai": "^4.3.4", - "chai-as-promised": "^7.1.1", - "chai-spies": "^1.0.0", "serve-static": "^1.16.2", "@sinonjs/fake-timers": "^7.1.2" }, diff --git a/packages/binding-mbus/package.json b/packages/binding-mbus/package.json index 0355f078b..e2622ac69 100644 --- a/packages/binding-mbus/package.json +++ b/packages/binding-mbus/package.json @@ -18,10 +18,6 @@ "node-mbus": "^2.2.6", "rxjs": "^5.5.11" }, - "devDependencies": { - "chai": "^4.3.4", - "chai-as-promised": "^7.1.1" - }, "scripts": { "build": "tsc -b", "test": "mocha --require ts-node/register --extension ts", diff --git a/packages/binding-modbus/package.json b/packages/binding-modbus/package.json index 3f7d47a0a..529ae1b5c 100644 --- a/packages/binding-modbus/package.json +++ b/packages/binding-modbus/package.json @@ -22,10 +22,6 @@ "rxjs": "^5.5.11", "wot-typescript-definitions": "0.8.0-SNAPSHOT.31" }, - "devDependencies": { - "chai": "^4.3.4", - "chai-as-promised": "^7.1.1" - }, "scripts": { "build": "tsc -b", "test": "mocha --require ts-node/register --extension ts", diff --git a/packages/binding-mqtt/package.json b/packages/binding-mqtt/package.json index 2c627a250..6a86592a4 100644 --- a/packages/binding-mqtt/package.json +++ b/packages/binding-mqtt/package.json @@ -19,10 +19,6 @@ "mqtt": "^5.3.2", "rxjs": "^5.5.11" }, - "devDependencies": { - "chai": "^4.3.4", - "chai-as-promised": "^7.1.1" - }, "scripts": { "build": "tsc -b", "test": "mocha --require ts-node/register --extension ts", diff --git a/packages/binding-netconf/package.json b/packages/binding-netconf/package.json index 58f7aaee9..121a31bb6 100644 --- a/packages/binding-netconf/package.json +++ b/packages/binding-netconf/package.json @@ -36,8 +36,6 @@ }, "keywords": [], "devDependencies": { - "chai": "^4.3.4", - "chai-spies": "^1.0.0", "@types/node-netconf": "npm:@types/netconf@^2.0.0", "@types/url-parse": "^1.4.3" } diff --git a/packages/binding-opcua/package.json b/packages/binding-opcua/package.json index 7ec0a8c60..c2271f923 100644 --- a/packages/binding-opcua/package.json +++ b/packages/binding-opcua/package.json @@ -15,8 +15,7 @@ "main": "dist/index.js", "types": "dist/index.d.ts", "devDependencies": { - "should": "^13.2.3", - "chai": "^4.3.4" + "should": "^13.2.3" }, "dependencies": { "@node-wot/core": "0.9.2", diff --git a/packages/binding-websockets/package.json b/packages/binding-websockets/package.json index 7f3334cec..a1b65b7c3 100644 --- a/packages/binding-websockets/package.json +++ b/packages/binding-websockets/package.json @@ -21,10 +21,6 @@ "slugify": "^1.4.5", "ws": "^7.5.10" }, - "devDependencies": { - "@testdeck/mocha": "^0.1.2", - "chai": "^4.3.4" - }, "scripts": { "build": "tsc -b", "test": "mocha --require ts-node/register --extension ts", diff --git a/packages/cli/package.json b/packages/cli/package.json index 2e82ec5d7..53d9047e3 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -47,8 +47,6 @@ "homepage": "https://github.com/eclipse-thingweb/node-wot/tree/master/packages/cli#readme", "keywords": [], "devDependencies": { - "@testdeck/mocha": "^0.1.2", - "chai": "^4.3.4", "@types/lodash": "^4.14.199" } } diff --git a/packages/core/package.json b/packages/core/package.json index d81950513..6e8fa3dd3 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -18,15 +18,7 @@ "@types/content-type": "^1.1.8", "@types/debug": "^4.1.7", "@types/uritemplate": "^0.3.4", - "@types/uuid": "^8.3.1", - "@testdeck/mocha": "^0.1.2", - "@types/chai": "^4.2.18", - "@types/chai-as-promised": "^7.1.4", - "@types/chai-spies": "^1.0.4", - "@types/mocha": "^10.0.10", - "chai": "^4.3.4", - "chai-as-promised": "^7.1.1", - "chai-spies": "^1.0.0" + "@types/uuid": "^8.3.1" }, "dependencies": { "@petamoriken/float16": "^3.1.1",