Skip to content

Commit

Permalink
special/bin: climb up directories to find binary module (#437)
Browse files Browse the repository at this point in the history
* special/bin: climb up directories to find binary module

Issue #436

* Move .gitignore to upper directory

* Remove duplicate test

* Add test for binary packages in parent directories
  • Loading branch information
sveyret authored and rumpl committed Nov 1, 2019
1 parent 40fa69c commit abcff5f
Show file tree
Hide file tree
Showing 12 changed files with 29 additions and 25 deletions.
4 changes: 3 additions & 1 deletion src/index.js
Expand Up @@ -21,7 +21,9 @@ function hasBin(rootDir, dependency) {
const metadata = readJSON(path.join(rootDir, 'node_modules', dependency, 'package.json'));
return {}.hasOwnProperty.call(metadata, 'bin');
} catch (error) {
return false;
return rootDir === path.parse(rootDir).root
? false
: hasBin(path.dirname(rootDir), dependency);
}
}

Expand Down
4 changes: 3 additions & 1 deletion src/special/bin.js
Expand Up @@ -19,7 +19,9 @@ function loadMetadata(dep, dir) {
const packagePath = path.resolve(dir, 'node_modules', dep, 'package.json');
return getCacheOrRequire(packagePath);
} catch (error) {
return {}; // ignore silently
return dir === path.parse(dir).root
? {} // ignore silently
: loadMetadata(dep, path.dirname(dir));
}
}

Expand Down
File renamed without changes.
3 changes: 2 additions & 1 deletion test/fake_modules/bin_js/package.json
@@ -1,5 +1,6 @@
{
"dependencies": {
"anybin": "*"
"anybin": "*",
"upperbin": "*"
}
}
1 change: 0 additions & 1 deletion test/fake_modules/optional_dep/.gitignore

This file was deleted.

1 change: 0 additions & 1 deletion test/fake_modules/peer_dep/.gitignore

This file was deleted.

1 change: 0 additions & 1 deletion test/fake_modules/peer_dep_nested/.gitignore

This file was deleted.

1 change: 0 additions & 1 deletion test/fake_modules/sass/.gitignore

This file was deleted.

5 changes: 5 additions & 0 deletions test/node_modules/upperbin/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 1 addition & 14 deletions test/spec.js
Expand Up @@ -477,7 +477,7 @@ export default [
ignoreBinPackage: false,
},
expected: {
dependencies: ['anybin'],
dependencies: ['anybin', 'upperbin'],
devDependencies: [],
missing: {},
using: {},
Expand All @@ -499,19 +499,6 @@ export default [
},
},
},
{
name: 'not ignore bin dependencies when ignoreBinPackage is false',
module: 'bin_js',
options: {
ignoreBinPackage: false,
},
expected: {
dependencies: ['anybin'],
devDependencies: [],
missing: {},
using: {},
},
},
{
name: 'output empty missing dependencies when skipMissing is true',
module: 'missing',
Expand Down
1 change: 0 additions & 1 deletion test/special/.gitignore

This file was deleted.

18 changes: 15 additions & 3 deletions test/special/bin.js
Expand Up @@ -5,11 +5,23 @@ import parse from '../../src/special/bin';

const testCases = [
{
name: 'detect packages used in scripts',
name: 'detect packages used in scripts in local directory',
script: 'binary-entry --argument',
dependencies: ['binary-package'],
expected: ['binary-package'],
},
{
name: 'detect packages used in scripts in parent directory',
script: 'binupper --upperarg',
dependencies: ['upperbin'],
expected: ['upperbin'],
},
{
name: 'detect packages used in scripts (anywhere)',
script: 'binary-entry --argument || binupper --upperarg',
dependencies: ['binary-package', 'upperbin'],
expected: ['binary-package', 'upperbin'],
},
{
name: 'detect packages used as `.bin` path',
script: './node_modules/.bin/binary-entry',
Expand Down Expand Up @@ -49,13 +61,13 @@ const testCases = [
{
name: 'not report it when it is not used',
script: 'other-binary-entry',
dependencies: ['binary-package'],
dependencies: ['binary-package', 'upperbin'],
expected: [],
},
{
name: 'ignore detection when no scripts section',
script: false,
dependencies: ['binary-package'],
dependencies: ['binary-package', 'upperbin'],
expected: [],
},
{
Expand Down

0 comments on commit abcff5f

Please sign in to comment.