git ssb

0+

Matt McKegg / ssb-private



Tree: 3c079c7c75a9d3c1510d61209f3944aacdc90f9e

Files: 3c079c7c75a9d3c1510d61209f3944aacdc90f9e / lib / flumeview-links-raw.js

2646 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 if(!index)
68 return pull(
69 log.stream({
70 values: true, seqs: false, live: opts.live, limit: opts.limit, reverse: opts.reverse
71 }),
72 Flatmap(function (data) {
73 var emit = []
74 links(data, function (a) {
75 emit.push(a)
76 })
77 return emit
78 })
79 )
80
81 var _opts = query(index, q)
82
83 _opts.values = false
84 _opts.keys = true
85
86 _opts.reverse = !!opts.reverse
87 _opts.live = opts.live
88 _opts.old = opts.old
89 _opts.sync = opts.sync
90
91 var stream = pull(
92 read(_opts),
93 pull.map(function (data) {
94 if(data.sync) return data
95 var o = data.value
96 for(var i = 0; i < index.value.length; i++)
97 u.set(index.value[i], data.key[i+1], o)
98 return o
99 }),
100 isArray(opts.query) ? mfr(opts.query) : pull.through()
101 )
102
103 if (typeof opts.limit === 'number') {
104 return pull(
105 stream,
106 pull.take(opts.limit)
107 )
108 } else {
109 return stream
110 }
111 }
112 return index
113 }
114}
115

Built with git-ssb-web