git ssb

0+

Matt McKegg / ssb-backlinks



Tree: e7396ed4efa860539b216900f87b9d0eb225c472

Files: e7396ed4efa860539b216900f87b9d0eb225c472 / lib / flumeview-links-raw.js

2638 bytesRaw
1// FORKED TO REMOVE FILTERING APPLIED TO INDEXED DATA RESULT
2
3'use strict'
4var pull = require('pull-stream')
5var query = require('flumeview-query/query')
6var select = require('flumeview-query/select')
7var mfr = require('map-filter-reduce')
8var u = require('flumeview-query/util')
9var Flatmap = require('pull-flatmap')
10var FlumeViewLevel = require('flumeview-level')
11
12var isArray = Array.isArray
13
14//sorted index.
15
16//split this into TWO modules. flumeview-links and flumeview-query
17module.exports = function (indexes, links, version) {
18
19 if(!links)
20 links = function (data, emit) { emit(data) }
21
22 function getIndexes (data, seq) {
23 var A = []
24 indexes.forEach(function (index) {
25 var a = [index.key]
26 for(var i = 0; i < index.value.length; i++) {
27 var key = index.value[i]
28 if(!u.has(key, data)) return
29 a.push(u.get(key, data))
30 }
31 a.push(seq)
32 A.push(a)
33 })
34 return A
35 }
36
37 var create = FlumeViewLevel(version || 1, function (value, seq) {
38 var A = []
39 links(value, function (value) {
40 A = A.concat(getIndexes(value, seq))
41 })
42 return A
43 })
44
45 return function (log, name) {
46
47 var index = create(log, name)
48 var read = index.read
49
50 index.read = function (opts) {
51
52 opts = opts || {}
53 var _opts = {}
54 var q, k
55
56 if(isArray(opts.query)) {
57 q = opts.query[0].$filter || {}
58 }
59 else if(opts.query) {
60 q = opts.query
61 }
62 else
63 q = {}
64
65 var index = select(indexes, q)
66
67 // HACK: allow manual selection of indexes
68 if (opts.index) {
69 index = indexes.find(x => x.key === opts.index)
70 }
71
72 if(!index)
73 return pull(
74 log.stream({
75 values: true, seqs: false, live: opts.live, limit: opts.limit, reverse: opts.reverse
76 }),
77 Flatmap(function (data) {
78 var emit = []
79 links(data, function (a) {
80 emit.push(a)
81 })
82 return emit
83 })
84 )
85 var _opts = query(index, q)
86
87
88 _opts.values = false
89 _opts.keys = true
90
91 _opts.reverse = !!opts.reverse
92 _opts.live = opts.live
93 _opts.old = opts.old
94 _opts.sync = opts.sync
95 _opts.limit = opts.limit
96
97 return pull(
98 read(_opts),
99 pull.map(function (data) {
100 if(data.sync) return data
101 var o = data.value
102 for(var i = 0; i < index.value.length; i++)
103 u.set(index.value[i], data.key[i+1], o)
104 return o
105 }),
106 isArray(opts.query) ? mfr(opts.query) : pull.through()
107 )
108 }
109 return index
110 }
111}
112

Built with git-ssb-web