diff --git a/index.js b/index.js index e5d2002..aaf2c81 100644 --- a/index.js +++ b/index.js @@ -13,6 +13,7 @@ function readFile (file, options, callback) { try { obj = JSON.parse(data, options ? options.reviver : null) } catch (err2) { + err2.message = file + ': ' + err2.message return callback(err2) } @@ -27,13 +28,15 @@ function readFileSync (file, options) { } var shouldThrow = 'throws' in options ? options.throws : true + var content = fs.readFileSync(file, options) - if (shouldThrow) { // i.e. throw on invalid JSON - return JSON.parse(fs.readFileSync(file, options), options.reviver) - } else { - try { - return JSON.parse(fs.readFileSync(file, options), options.reviver) - } catch (err) { + try { + return JSON.parse(content, options.reviver) + } catch (err) { + if (shouldThrow) { + err.message = file + ': ' + err.message + throw err + } else { return null } } diff --git a/test/read-file-sync.test.js b/test/read-file-sync.test.js index c0b71e3..06df60f 100644 --- a/test/read-file-sync.test.js +++ b/test/read-file-sync.test.js @@ -34,6 +34,21 @@ describe('+ readFileSync()', function () { } }) + describe('> when invalid JSON', function () { + it('should include the filename in the error', function () { + var file = path.join(TEST_DIR, 'somefile.json') + fs.writeFileSync(file, '{') + + assert.throws(function () { + jf.readFileSync(file) + }, function (err) { + assert(err instanceof Error) + assert(err.message.match(file)) + return true + }) + }) + }) + describe('> when invalid JSON and throws set to false', function () { it('should return null', function () { var file = path.join(TEST_DIR, 'somefile4-invalid.json') diff --git a/test/read-file.test.js b/test/read-file.test.js index ff45cc6..634d4b3 100644 --- a/test/read-file.test.js +++ b/test/read-file.test.js @@ -33,6 +33,19 @@ describe('+ readFile()', function () { }) }) + describe('> when invalid JSON', function () { + it('should include the filename in the error', function (done) { + var file = path.join(TEST_DIR, 'somefile.json') + fs.writeFileSync(file, '{') + + jf.readFile(file, function (err, obj2) { + assert(err instanceof Error) + assert(err.message.match(file)) + done() + }) + }) + }) + describe('> when JSON reviver is set', function () { it('should transform the JSON', function (done) { var file = path.join(TEST_DIR, 'somefile.json')