Yang Guo | 4fd355c | 2019-09-19 08:59:03 | [diff] [blame] | 1 | /** |
| 2 | * Module dependencies. |
| 3 | */ |
| 4 | |
| 5 | var AssertionError = require('assert').AssertionError |
| 6 | , callsite = require('callsite') |
| 7 | , fs = require('fs') |
| 8 | |
| 9 | /** |
| 10 | * Expose `assert`. |
| 11 | */ |
| 12 | |
| 13 | module.exports = process.env.NO_ASSERT |
| 14 | ? function(){} |
| 15 | : assert; |
| 16 | |
| 17 | /** |
| 18 | * Assert the given `expr`. |
| 19 | */ |
| 20 | |
| 21 | function assert(expr) { |
| 22 | if (expr) return; |
| 23 | |
| 24 | var stack = callsite(); |
| 25 | var call = stack[1]; |
| 26 | var file = call.getFileName(); |
| 27 | var lineno = call.getLineNumber(); |
| 28 | var src = fs.readFileSync(file, 'utf8'); |
| 29 | var line = src.split('\n')[lineno-1]; |
| 30 | var src = line.match(/assert\((.*)\)/)[1]; |
| 31 | |
| 32 | var err = new AssertionError({ |
| 33 | message: src, |
| 34 | stackStartFunction: stack[0].getFunction() |
| 35 | }); |
| 36 | |
| 37 | throw err; |
| 38 | } |