From f57d0b8a6d57e2bd31e2a4b3c5a68bb03efe7576 Mon Sep 17 00:00:00 2001 From: jeromeh Date: Fri, 11 Jun 2021 00:23:17 +0200 Subject: [PATCH] [Defect 2120][no-extraneous-dependencies] add ESM intermediate package.json support --- src/core/packagePath.js | 8 ++++++-- tests/files/node_modules/esm-package/esm-module/index.js | 0 .../node_modules/esm-package/esm-module/package.json | 4 ++++ tests/files/node_modules/esm-package/index.js | 0 tests/files/node_modules/esm-package/package.json | 5 +++++ tests/files/package.json | 1 + tests/src/rules/no-extraneous-dependencies.js | 4 ++++ 7 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 tests/files/node_modules/esm-package/esm-module/index.js create mode 100644 tests/files/node_modules/esm-package/esm-module/package.json create mode 100644 tests/files/node_modules/esm-package/index.js create mode 100644 tests/files/node_modules/esm-package/package.json diff --git a/src/core/packagePath.js b/src/core/packagePath.js index e95b066668..315ec0918c 100644 --- a/src/core/packagePath.js +++ b/src/core/packagePath.js @@ -13,6 +13,10 @@ export function getFilePackagePath(filePath) { } export function getFilePackageName(filePath) { - const { pkg } = readPkgUp.sync({ cwd: filePath, normalize: false }); - return pkg && pkg.name; + const { pkg, path } = readPkgUp.sync({ cwd: filePath, normalize: false }); + if (pkg) { + // recursion in case of intermediate esm package.json without name found + return pkg.name || getFilePackageName(dirname(dirname(path))); + } + return null; } diff --git a/tests/files/node_modules/esm-package/esm-module/index.js b/tests/files/node_modules/esm-package/esm-module/index.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/files/node_modules/esm-package/esm-module/package.json b/tests/files/node_modules/esm-package/esm-module/package.json new file mode 100644 index 0000000000..0c58fec1b0 --- /dev/null +++ b/tests/files/node_modules/esm-package/esm-module/package.json @@ -0,0 +1,4 @@ +{ + "sideEffects": false, + "module": "./index.js" +} diff --git a/tests/files/node_modules/esm-package/index.js b/tests/files/node_modules/esm-package/index.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/files/node_modules/esm-package/package.json b/tests/files/node_modules/esm-package/package.json new file mode 100644 index 0000000000..ddad1a531e --- /dev/null +++ b/tests/files/node_modules/esm-package/package.json @@ -0,0 +1,5 @@ +{ + "name": "esm-package", + "main": "index.js", + "version": "1.0.0" +} diff --git a/tests/files/package.json b/tests/files/package.json index 62bd3764a3..de1d802753 100644 --- a/tests/files/package.json +++ b/tests/files/package.json @@ -9,6 +9,7 @@ }, "dependencies": { "@org/package": "^1.0.0", + "esm-package": "^1.0.0", "jquery": "^3.1.0", "lodash.cond": "^4.3.0", "pkg-up": "^1.0.0", diff --git a/tests/src/rules/no-extraneous-dependencies.js b/tests/src/rules/no-extraneous-dependencies.js index 6bb84358ae..7d852c819b 100644 --- a/tests/src/rules/no-extraneous-dependencies.js +++ b/tests/src/rules/no-extraneous-dependencies.js @@ -154,6 +154,10 @@ ruleTester.run('no-extraneous-dependencies', rule, { test({ code: 'import "rxjs/operators"', }), + + test({ + code: 'import "esm-package/esm-module";', + }), ], invalid: [ test({