Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,17 @@ b.plugin(errorify, /* errorify options */);

* `replacer` _(optional)_ is a function that takes an error as its first argument, and returns a string that will be used as the output bundle.

* `onError` _(optional)_ is a function that takes an error as its first argument and is used to override the default handler which simply logs to `stderr`. This option is intended to be used for logging and notification purposes. Example:

```js
var colors = require('colors/safe');
var notifier = require('node-notifier');
var errorHandler = function(err) {
console.error(colors.red('Build broken. Error:'), err.message);
notifier.notify({ title: 'Browserify build error', message: err.message });
b.plugin(errorify, { onError: errorHandler });
```

### CLI

After installing `errorify` as a local devDependency, you can use the `--plugin` or `-p` option like so:
Expand Down
10 changes: 8 additions & 2 deletions errorify.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,16 @@ var stream = require('stream');
module.exports = function errorify(b, opts) {
var bundle = b.bundle;
var replacer = opts && opts.replacer || defaultReplacer;
var errorHandler = opts && opts.onError || defaultErrorLogger;

b.bundle = function(cb) {
var output = new stream.Transform();
output._transform = function(chunk, enc, callback) {
callback(null, chunk);
};
var pipeline = bundle.call(b, cb);
pipeline.on('error', function(err) {
// module-deps likes to emit each error
console.error('errorify: %s', err);
errorHandler(err);
});
pipeline.once('error', function(err) {
output.push(replacer(err));
Expand Down Expand Up @@ -83,3 +84,8 @@ function normalizeError(err) {
function defaultReplacer(err) {
return '!' + template + '(' + JSON.stringify(normalizeError(err)) + ')';
}

function defaultErrorLogger(err) {
// module-deps likes to emit each error
console.error('errorify: %s', err);
}
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
"browserify": "^11.0.1",
"concat-stream": "^1.4.7",
"tap": "^1.3.2",
"std-mocks": "^1.0.1",
"through2": "^0.6.3"
}
}
27 changes: 27 additions & 0 deletions test/errorify-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

var browserify = require('browserify');
var concat = require('concat-stream');
var stdMocks = require('std-mocks');
var test = require('tap').test;
var through = require('through2');
var vm = require('vm');
Expand Down Expand Up @@ -175,5 +176,31 @@ test('errorify', function(t) {
}));
});

t.test('default error logger is called by default', function(t) {
t.plan(1);
stdMocks.use({ stdout: false, stderr: true }); // only mock stderr

var b = browserify('./test/fixtures/bad-syntax-entry.js');
b.plugin(errorify);
b.bundle().pipe(concat(function(src) {
stdMocks.restore();
var output = stdMocks.flush();
t.assert(output.stderr.length === 1); // stderr should have one output
}));
});

t.test('errorify calls user-provided handler', function(t) {
t.plan(1);
var b = browserify('./test/fixtures/bad-syntax-entry.js');

var isCalled = false;
var customLogger = function(err) { isCalled = true; }
b.plugin(errorify, { onError: customLogger });

b.bundle().pipe(concat(function(src) {
t.assert(isCalled);
}));
});

t.end();
});