git ssb

0+

Matt McKegg / ssb-about



Tree: 1adfa5738b024a8710f45fc9b2340898054eaee6

Files: 1adfa5738b024a8710f45fc9b2340898054eaee6 / index.js

1333 bytesRaw
1var FlumeReduce = require('flumeview-reduce')
2var ref = require('ssb-ref')
3
4exports.name = 'about'
5exports.version = require('./package.json').version
6exports.manifest = {
7 stream: 'source',
8 get: 'async'
9}
10
11exports.init = function (ssb, config) {
12 return ssb._flumeUse('about', FlumeReduce(1, reduce, map))
13}
14
15function reduce (result, item) {
16 if (!result) result = {}
17 if (item) {
18 for (var target in item) {
19 var valuesForId = result[target] = result[target] || {}
20 for (var key in item[target]) {
21 var valuesForKey = valuesForId[key] = valuesForId[key] || {}
22 for (var author in item[target][key]) {
23 var value = item[target][key][author]
24 if (!valuesForKey[author] || value[1] > valuesForKey[author][1]) {
25 valuesForKey[author] = value
26 }
27 }
28 }
29 }
30 }
31 return result
32}
33
34function map (msg) {
35 if (msg.value.content && msg.value.content.type === 'about' && ref.isLink(msg.value.content.about)) {
36 var author = msg.value.author
37 var target = msg.value.content.about
38 var values = {}
39
40 for (var key in msg.value.content) {
41 if (key !== 'about' && key !== 'type') {
42 values[key] = {
43 [author]: [msg.value.content[key], msg.value.timestamp]
44 }
45 }
46 }
47
48 return {
49 [target]: values
50 }
51 }
52}
53

Built with git-ssb-web