1 |
|
2 |
|
3 |
|
4 | var through = require('through2')
|
5 |
|
6 | module.exports = function (osm) {
|
7 | return through.obj(write)
|
8 |
|
9 | function write (row, enc, next) {
|
10 | var pending = 1
|
11 | var nrefs = []
|
12 | ;(row.refs || []).forEach(function (ref, i) {
|
13 | pending++
|
14 | osm.get(ref, function (err, docs) {
|
15 | if (err) return next(err)
|
16 | if (Object.keys(docs).length > 0) nrefs[i] = ref
|
17 | else console.log('SKIP', ref)
|
18 | if (--pending === 0) done()
|
19 | })
|
20 | })
|
21 | var nmembers = []
|
22 | ;(row.members || []).forEach(function (m, i) {
|
23 | pending++
|
24 | osm.get(m.ref, function (err, doc) {
|
25 | if (err) return next(err)
|
26 | if (Object.keys(doc).length > 0) nmembers[i] = m
|
27 | else console.log('SKIP', m.ref)
|
28 | if (--pending === 0) done()
|
29 | })
|
30 | })
|
31 | if (--pending === 0) done()
|
32 |
|
33 | function done () {
|
34 | if (row.refs) row.refs = nrefs.filter(Boolean)
|
35 | if (row.members) row.members = nmembers.filter(Boolean)
|
36 | next(null, row)
|
37 | }
|
38 | }
|
39 | }
|