diff --git a/.gitignore b/.gitignore index e0c8856..2c4609d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ .DS_Store node_modules *.sock +.idea + diff --git a/.npmignore b/.npmignore index f1250e5..3f8d09a 100644 --- a/.npmignore +++ b/.npmignore @@ -2,3 +2,5 @@ support test examples *.sock +.idea/ + diff --git a/Readme.md b/Readme.md index 00f30e7..fc42e12 100644 --- a/Readme.md +++ b/Readme.md @@ -1,8 +1,7 @@ # better-assert - Better c-style assertions using [callsite](https://github.com/visionmedia/callsite) for - self-documenting failure messages. + Better c-style assertions for self-documenting failure messages. ## Installation diff --git a/index.js b/index.js index fd1c9b7..cac4983 100644 --- a/index.js +++ b/index.js @@ -3,8 +3,7 @@ */ var AssertionError = require('assert').AssertionError - , callsite = require('callsite') - , fs = require('fs') + , fs = require('fs'); /** * Expose `assert`. @@ -21,18 +20,31 @@ module.exports = process.env.NO_ASSERT function assert(expr) { if (expr) return; - var stack = callsite(); - var call = stack[1]; - var file = call.getFileName(); - var lineno = call.getLineNumber(); - var src = fs.readFileSync(file, 'utf8'); - var line = src.split('\n')[lineno-1]; - var src = line.match(/assert\((.*)\)/)[1]; - - var err = new AssertionError({ - message: src, - stackStartFunction: stack[0].getFunction() - }); - - throw err; + var a = new Error(); + // 0 => Error + // 1 => at assert + // 2 => at Object. (/project/myproject/test/test-babel.js:15:1)', <= where the assert was raised ! + // ..... + // + var errorline = a.stack.split('\n')[2]; + var m = errorline.match(/at (.*)\((.*):([0-9]*):([0-9]*)\)/); + var func = m[1]; // Object. ( not very useful) + var file = m[2]; // filename + var lineno = parseInt(m[3]); + var fullsource = fs.readFileSync(file, 'utf8'); + var line = fullsource.split('\n')[lineno-1]; + var m = line.match(/assert\((.*)\)/); + if (!m) { + // however, if the entire file doesn't carry any assert() lines any more, + // our next bet is this source file was transpiled by babel: + m = line.match(/\(0, [\w_]+\.default\)\((.*)\)/); + } + + var src = m ? m[1] : "???"; + var err = new AssertionError({ + message: src + "\n ", + stackStartFunction: assert + }); + throw err; } + diff --git a/package.json b/package.json index e270f5e..fca6ece 100644 --- a/package.json +++ b/package.json @@ -14,9 +14,7 @@ "TonyHe ", "ForbesLindesay" ], - "dependencies": { - "callsite": "1.0.0" - }, + "dependencies": {}, "repository": { "type": "git", "url": "https://github.com/visionmedia/better-assert.git" diff --git a/test/test-babel.js b/test/test-babel.js new file mode 100644 index 0000000..169b3e3 --- /dev/null +++ b/test/test-babel.js @@ -0,0 +1,27 @@ +// run with babel-node +// install: +// * npm install --save-dev babel-core +// * npm install --save-dev babel-preset-es2015 +// * npm install -g babel +// babel-node --presets es2015 ./test/test-babel.hs +// +// should display: +// throw err; +// ^ +// AssertionError: 1==2,"1 should be 2" +// +// at myFunction (/projects/better-assert/test/test-babel.js:23:5) +// at Object. /projects/better-assert/test/test-babel.js:20:1) +// at Module._compile (module.js:570:32) +//... + +import assert from ".."; + + + +function myFunction() { + assert(1==2,"1 should be 2"); + +} + +myFunction(); \ No newline at end of file