diff --git a/README.md b/README.md index f7d7de4..0191f63 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ use like: ```js import detectEslintConfig from 'detect-eslint-config' -const hasEslintConfig = detectEslintConfig('dog/face') +const hasEslintConfig = !!detectEslintConfig('dog/face') if (hasEslintConfig) { console.log('we have found an eslint config for this project') diff --git a/dist/index.js b/dist/index.js index 7c7bd9b..416be5c 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,10 +1,8 @@ -var ref = require('path'); -var dirname = ref.dirname; -var resolve = ref.resolve; +var path = require('path') -var ref$1 = require('fs'); -var existsSync = ref$1.existsSync; -var lstatSync = ref$1.lstatSync; +var ref = require('fs'); +var existsSync = ref.existsSync; +var statSync = ref.statSync; var PACKAGE_JSON = 'package.json' @@ -14,22 +12,28 @@ var ESLINT_FILES = var ESLINT_NODE = 'eslintConfig' -var isDirectory = function (file) { return lstatSync(file).isDirectory(); } -var isRoot = function (directory) { return directory === resolve(directory, '..'); } +var isDirectory = function (file) { return statSync(file).isDirectory(); } +var isRoot = function (directory) { return directory === path.resolve(directory, '..'); } +var createResolver = function (directory) { return function (file) { return path.resolve(directory, file); }; } +var dirname = path.dirname; module.exports = function detectEslintConfig (file) { var directory = isDirectory(file) ? file : dirname(file) + var resolve = createResolver(directory) + if (isRoot(directory)) { return false } - var packageJson = resolve(directory, PACKAGE_JSON) + var packageJson = resolve(PACKAGE_JSON) - var eslintFileDetected = !!ESLINT_FILES.find(function (eslintFile) { return existsSync(resolve(directory, eslintFile)); } + var detectedFile = ESLINT_FILES.find(function (eslintFile) { return existsSync(resolve(eslintFile)); } ) if (existsSync(packageJson)) { - return eslintFileDetected || !!require(packageJson)[ESLINT_NODE] + return (detectedFile && resolve(detectedFile)) || + (require(packageJson)[ESLINT_NODE] && packageJson) } - return eslintFileDetected || detectEslintConfig(resolve(directory, '..')) + return (detectedFile && resolve(detectedFile)) || + detectEslintConfig(resolve('..')) } diff --git a/source/index.js b/source/index.js index 8a088f8..73bdf1b 100644 --- a/source/index.js +++ b/source/index.js @@ -1,6 +1,6 @@ -const {dirname, resolve} = require('path') +const path = require('path') -const {existsSync, lstatSync} = require('fs') +const {existsSync, statSync} = require('fs') const PACKAGE_JSON = 'package.json' @@ -10,23 +10,29 @@ const ESLINT_FILES = const ESLINT_NODE = 'eslintConfig' -const isDirectory = file => lstatSync(file).isDirectory() -const isRoot = directory => directory === resolve(directory, '..') +const isDirectory = file => statSync(file).isDirectory() +const isRoot = directory => directory === path.resolve(directory, '..') +const createResolver = directory => file => path.resolve(directory, file) +const {dirname} = path module.exports = function detectEslintConfig (file) { const directory = isDirectory(file) ? file : dirname(file) - if (isRoot(directory)) return false + const resolve = createResolver(directory) - const packageJson = resolve(directory, PACKAGE_JSON) + if (isRoot(directory)) return null - const eslintFileDetected = !!ESLINT_FILES.find(eslintFile => - existsSync(resolve(directory, eslintFile)) + const packageJson = resolve(PACKAGE_JSON) + + const detectedFile = ESLINT_FILES.find(eslintFile => + existsSync(resolve(eslintFile)) ) if (existsSync(packageJson)) { - return eslintFileDetected || !!require(packageJson)[ESLINT_NODE] + return (detectedFile && resolve(detectedFile)) || + (require(packageJson)[ESLINT_NODE] && packageJson) } - return eslintFileDetected || detectEslintConfig(resolve(directory, '..')) + return (detectedFile && resolve(detectedFile)) || + detectEslintConfig(resolve('..')) } diff --git a/tests/index.js b/tests/index.js index 0457bdc..9de32da 100644 --- a/tests/index.js +++ b/tests/index.js @@ -4,14 +4,14 @@ const detectConfig = require('../dist') it('correctly detects eslint config in a package.json', tape => { const hasConfig = detectConfig(`${__dirname}/packagejson/beak.js`) tape.plan(1) - tape.equal(hasConfig, true) + tape.equal(!!hasConfig, true) tape.end() }) it('correctly detects eslint config in a project root', tape => { const hasConfig = detectConfig(`${__dirname}/root/index.js`) tape.plan(1) - tape.equal(hasConfig, true) + tape.equal(!!hasConfig, true) tape.end() }) @@ -19,20 +19,34 @@ it('correctly detects eslint config in a subdirectory', tape => { const hasConfig = detectConfig(`${__dirname}/subdirectory/help-me/charlie/index.js`) tape.plan(1) - tape.equal(hasConfig, true) + tape.equal(!!hasConfig, true) tape.end() }) it('returns false if no eslint config is detected', tape => { const hasConfig = detectConfig(`${__dirname}/none/pineapples.js`) tape.plan(1) - tape.equal(hasConfig, false) + tape.equal(!!hasConfig, false) tape.end() }) it('works if you specify a directory', tape => { const hasConfig = detectConfig(`${__dirname}/root/`) tape.plan(1) - tape.equal(hasConfig, true) + tape.equal(!!hasConfig, true) + tape.end() +}) + +it('returns the path to the file', tape => { + const hasConfig = detectConfig(`${__dirname}/root/index.js`) + tape.plan(1) + tape.equal(hasConfig.endsWith('root/.eslintrc.json'), true) + tape.end() +}) + +it('returns the path to the package.json', tape => { + const hasConfig = detectConfig(`${__dirname}/packagejson/beak.js`) + tape.plan(1) + tape.equal(hasConfig.endsWith('packagejson/package.json'), true) tape.end() })