Initial commit
[yaffs-website] / node_modules / unique-stream / index.js
1 var Stream = require('stream');
2
3 function prop(propName) {
4   return function (data) {
5     return data[propName];
6   };
7 }
8
9 module.exports = unique;
10 function unique(propName) {
11   var keyfn = JSON.stringify;
12   if (typeof propName === 'string') {
13     keyfn = prop(propName);
14   } else if (typeof propName === 'function') {
15     keyfn = propName;
16   }
17   var seen = {};
18   var s = new Stream();
19   s.readable = true;
20   s.writable = true;
21   var pipes = 0;
22
23   s.write = function (data) {
24     var key = keyfn(data);
25     if (seen[key] === undefined) {
26       seen[key] = true;
27       s.emit('data', data);
28     }
29   };
30
31   var ended = 0;
32   s.end = function (data) {
33     if (arguments.length) s.write(data);
34     ended++;
35     if (ended === pipes || pipes === 0) {
36       s.writable = false;
37       s.emit('end');
38     }
39   };
40
41   s.destroy = function (data) {
42     s.writable = false;
43   };
44
45   s.on('pipe', function () {
46     pipes++;
47   });
48
49   s.on('unpipe', function () {
50     pipes--;
51   });
52
53   return s;
54 }