text: var gaze = require('gaze');
  var EventEmitter = require('events').EventEmitter;
  
  module.exports = function (glob, opts, cb) {
      var out = new EventEmitter();
  
      if (typeof opts === 'function') {
          cb = opts;
          opts = {};
      }
  
      var watcher = gaze(glob, opts, function (err, rwatcher) {
          if (err) out.emit('error', err);
          rwatcher.on('all', function (evt, path, old) {
              var outEvt = {type: evt, path: path};
              if (old) outEvt.old = old;
              out.emit('change', outEvt);
              if (cb) cb(outEvt);
          });
      });
  
      watcher.on('end', out.emit.bind(out, 'end'));
      watcher.on('error', out.emit.bind(out, 'error'));
      watcher.on('ready', out.emit.bind(out, 'ready'));
      watcher.on('nomatch', out.emit.bind(out, 'nomatch'));
  
      out.end = function () {
          return watcher.close();
      };
      out.add = function () {
          return watcher.add.apply(watcher, arguments);
      };
      out.remove = function () {
          return watcher.remove.apply(watcher, arguments);
      };
      out._watcher = watcher;
  
      return out;
  };
  