docs: function deps(entries, i, opts) {
      var e = entries[i];
      var fullPaths = R.map(R.applyLeft(path.resolve, opts.basedir || process.cwd()), [].concat(e.entry));
      var b = opts.browserify(fullPaths, cleanOpts(opts));
      return sort(fromStream(b.deps(opts)))
          .do(function (row) {
              if (!opts.cache[row.id]) {
                  opts.cache[row.id] = row;
              }
          })
          .map(R.mixin({ level: e.level }))
          .toArray()
          .flatMap(function (rows) {
              var r = Rx.Observable.fromArray(rows);
              return i + 1 < entries.length
                  ? r.concat(deps(entries, i + 1, opts))
                  : r;
          });
  }