git ssb

0+

Matt McKegg / ssb-about



Tree: 25a70276fabd9332f9e03d154fd2fc70b553cc2d

Files: 25a70276fabd9332f9e03d154fd2fc70b553cc2d / index.js

1394 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(0, 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.lastSeq > valuesForKey[author].lastSeq) {
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]: {
44 value: msg.value.content[key],
45 lastSeq: msg.value.sequence
46 }
47 }
48 }
49 }
50
51 return {
52 [target]: values
53 }
54 }
55}
56

Built with git-ssb-web