| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 | 
							- var Stream = require('stream');
 
- function prop(propName) {
 
-   return function (data) {
 
-     return data[propName];
 
-   };
 
- }
 
- module.exports = unique;
 
- function unique(propName) {
 
-   var keyfn = JSON.stringify;
 
-   if (typeof propName === 'string') {
 
-     keyfn = prop(propName);
 
-   } else if (typeof propName === 'function') {
 
-     keyfn = propName;
 
-   }
 
-   var seen = {};
 
-   var s = new Stream();
 
-   s.readable = true;
 
-   s.writable = true;
 
-   var pipes = 0;
 
-   s.write = function (data) {
 
-     var key = keyfn(data);
 
-     if (seen[key] === undefined) {
 
-       seen[key] = true;
 
-       s.emit('data', data);
 
-     }
 
-   };
 
-   var ended = 0;
 
-   s.end = function (data) {
 
-     if (arguments.length) s.write(data);
 
-     ended++;
 
-     if (ended === pipes || pipes === 0) {
 
-       s.writable = false;
 
-       s.emit('end');
 
-     }
 
-   };
 
-   s.destroy = function (data) {
 
-     s.writable = false;
 
-   };
 
-   s.on('pipe', function () {
 
-     pipes++;
 
-   });
 
-   s.on('unpipe', function () {
 
-     pipes--;
 
-   });
 
-   return s;
 
- }
 
 
  |