diff --git a/eslint.config.mjs b/eslint.config.mjs index 62bebdf34..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": "off", // 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/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-http/package.json b/packages/binding-http/package.json index bc89e0b40..ce3f3701b 100644 --- a/packages/binding-http/package.json +++ b/packages/binding-http/package.json @@ -28,7 +28,9 @@ "body-parser": "^1.20.3", "express": "^4.20.0", "ssestream": "^1.1.0", - "timekeeper": "^2.2.0" + "timekeeper": "^2.2.0", + "serve-static": "^1.16.2", + "@sinonjs/fake-timers": "^7.1.2" }, "dependencies": { "@node-wot/core": "0.9.2", 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",