11import path from 'path' ;
22import fs from 'fs' ;
3- import readPkgUp from 'eslint-module-utils/readPkgUp ' ;
3+ import pkgUp from 'eslint-module-utils/pkgUp ' ;
44import minimatch from 'minimatch' ;
55import resolve from 'eslint-module-utils/resolve' ;
66import moduleVisitor from 'eslint-module-utils/moduleVisitor' ;
@@ -30,6 +30,21 @@ function extractDepFields(pkg) {
3030 } ;
3131}
3232
33+ function getPackageDepFields ( packageJsonPath ) {
34+ if ( packageJsonPath && ! depFieldCache . has ( packageJsonPath ) ) {
35+ let content ;
36+ try {
37+ content = JSON . parse ( fs . readFileSync ( packageJsonPath , 'utf8' ) ) ;
38+ } catch ( err ) {
39+ content = { } ;
40+ }
41+ const depFields = extractDepFields ( content ) ;
42+ depFieldCache . set ( packageJsonPath , depFields ) ;
43+ }
44+
45+ return depFieldCache . get ( packageJsonPath ) ;
46+ }
47+
3348function getDependencies ( context , packageDir ) {
3449 let paths = [ ] ;
3550 try {
@@ -53,24 +68,21 @@ function getDependencies(context, packageDir) {
5368 // use rule config to find package.json
5469 paths . forEach ( dir => {
5570 const packageJsonPath = path . join ( dir , 'package.json' ) ;
56- if ( ! depFieldCache . has ( packageJsonPath ) ) {
57- const depFields = extractDepFields (
58- JSON . parse ( fs . readFileSync ( packageJsonPath , 'utf8' ) ) ,
59- ) ;
60- depFieldCache . set ( packageJsonPath , depFields ) ;
61- }
62- const _packageContent = depFieldCache . get ( packageJsonPath ) ;
71+ const _packageContent = getPackageDepFields ( packageJsonPath ) || { } ;
6372 Object . keys ( packageContent ) . forEach ( depsKey =>
6473 Object . assign ( packageContent [ depsKey ] , _packageContent [ depsKey ] ) ,
6574 ) ;
6675 } ) ;
6776 } else {
77+ const packageJsonPath = pkgUp ( {
78+ cwd : context . getPhysicalFilename ? context . getPhysicalFilename ( ) : context . getFilename ( ) ,
79+ normalize : false ,
80+ } ) ;
81+
6882 // use closest package.json
6983 Object . assign (
7084 packageContent ,
71- extractDepFields (
72- readPkgUp ( { cwd : context . getPhysicalFilename ? context . getPhysicalFilename ( ) : context . getFilename ( ) , normalize : false } ) . pkg ,
73- ) ,
85+ getPackageDepFields ( packageJsonPath ) ,
7486 ) ;
7587 }
7688
0 commit comments