How to check if file is valid for require()?

I want to check if file is "requirable" or not, how can I do it?

I checked npm packages, googled stackoverflow and read nodejs documentation, but still has no answer.

I search the way to write isRequirable() function, which will work as in the examples

Obvious examples:

isRequirable('./package.json') // true
isRequirable('./asd.txt') // false

Not so obvious examples:

$ cat normal.js
module.exports = function();

$ cat eval.js
({
    evil: true
})

then

isRequirable('./normal.js') // true
isRequirable('./eval.js') // false

As not an expert in Node i suggest to use two step checking with regular expression and try-catch module request.

It covers most cases including file bundled with Browserify or another packer.

Check it out:

// isRequirable.js
var fs = require('fs');
var isRequirable = function (filename) {
    var result;
    var content;
    var rex = /(?:^|\s*;|\s*=)\s*(?:module\.)*exports(\..+)*\s*=\s*.+/gm;

    try {
        content = fs.readFileSync(filename).toString();
    } catch (err) {
        content = '';
        console.log(err);
    }
    result = content.match(rex) ? true : false;
    if (result) {
        try {
            var temp = require(filename);
        } catch (err) {
            result = false;
            console.log(err);
        }
    }
    return result;
};

module.exports = isRequirable;

in another place

var isRequirable = require('./isRequirable');

console.log(isRequirable('./isRequirable.js'));
// true

console.log(isRequirable('./eval.js'));
// false

console.log(isRequirable('./test.js')); // where test.js is (function () {})();
// false

console.log(isRequirable('nonexistent'));
// { ... no such file or directory ... ]
// false

console.log(isRequirable('./browserify/bundle.js'));
// [ReferenceError: document is not defined]
// false