Skip to content
This repository was archived by the owner on Mar 10, 2020. It is now read-only.

Commit f252160

Browse files
committed
feat: stream refs endpoints
1 parent 94c6f85 commit f252160

7 files changed

+119
-35
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
'use strict'
2+
3+
const cleanCID = require('../utils/clean-cid')
4+
const v = require('is-ipfs')
5+
const pull = require('pull-stream')
6+
const toPull = require('stream-to-pull-stream')
7+
const deferred = require('pull-defer')
8+
const moduleConfig = require('../utils/module-config')
9+
10+
module.exports = (send) => {
11+
send = moduleConfig(send)
12+
13+
return (opts) => {
14+
opts = opts || {}
15+
16+
const p = deferred.source()
17+
18+
send({ path: 'refs/local', qs: opts }, (err, stream) => {
19+
if (err) { return p.resolve(pull.error(err)) }
20+
21+
p.resolve(toPull.source(stream))
22+
})
23+
24+
return p
25+
}
26+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
'use strict'
2+
3+
const cleanCID = require('../utils/clean-cid')
4+
const v = require('is-ipfs')
5+
const Stream = require('readable-stream')
6+
const pump = require('pump')
7+
8+
module.exports = (send) => {
9+
return (opts) => {
10+
opts = opts || {}
11+
12+
const pt = new Stream.PassThrough({ objectMode: true })
13+
14+
send({ path: 'refs/local', qs: opts }, (err, stream) => {
15+
if (err) { return pt.destroy(err) }
16+
17+
pump(stream, pt)
18+
})
19+
20+
return pt
21+
}
22+
}

src/files-regular/refs-local.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
'use strict'
2+
3+
const IsIpfs = require('is-ipfs')
4+
const promisify = require('promisify-es6')
5+
const streamToValue = require('../utils/stream-to-value')
6+
const moduleConfig = require('../utils/module-config')
7+
const cleanCID = require('../utils/clean-cid')
8+
9+
module.exports = (arg) => {
10+
const send = moduleConfig(arg)
11+
12+
return promisify((opts, callback) => {
13+
if (typeof (opts) === 'function') {
14+
callback = opts
15+
opts = {}
16+
}
17+
18+
const request = {
19+
path: 'refs/local',
20+
qs: opts
21+
}
22+
23+
send.andTransform(request, streamToValue, callback)
24+
})
25+
}

src/files-regular/refs-pull-stream.js

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,32 @@
11
'use strict'
22

3-
const pullError = require('pull-stream/sources/error')
4-
const pullValues = require('pull-stream/sources/values')
5-
const pullDefer = require('pull-defer')
6-
const refs = require('./refs')
3+
const cleanCID = require('../utils/clean-cid')
4+
const v = require('is-ipfs')
5+
const pull = require('pull-stream')
6+
const toPull = require('stream-to-pull-stream')
7+
const deferred = require('pull-defer')
8+
const moduleConfig = require('../utils/module-config')
79

8-
module.exports = (arg) => {
9-
const refsFn = refs(arg)
10+
module.exports = (send) => {
11+
send = moduleConfig(send)
1012

11-
return (args, opts) => {
12-
const p = pullDefer.source()
13+
return (hash, opts) => {
14+
opts = opts || {}
1315

14-
refsFn(args, opts, (err, res) => {
15-
if (err) {
16-
return p.resolve(pullError(err))
16+
const p = deferred.source()
17+
18+
try {
19+
hash = cleanCID(hash)
20+
} catch (err) {
21+
if (!v.ipfsPath(hash)) {
22+
return p.end(err)
1723
}
18-
p.resolve(pullValues(res))
24+
}
25+
26+
send({ path: 'refs', args: hash, qs: opts }, (err, stream) => {
27+
if (err) { return p.resolve(pull.error(err)) }
28+
29+
p.resolve(toPull.source(stream))
1930
})
2031

2132
return p

src/files-regular/refs-readable-stream.js

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,28 @@
11
'use strict'
22

3+
const cleanCID = require('../utils/clean-cid')
4+
const v = require('is-ipfs')
35
const Stream = require('readable-stream')
4-
const refs = require('./refs')
6+
const pump = require('pump')
57

6-
module.exports = (arg) => {
7-
const refsFn = refs(arg)
8+
module.exports = (send) => {
9+
return (hash, opts) => {
10+
opts = opts || {}
811

9-
return (args, opts) => {
1012
const pt = new Stream.PassThrough({ objectMode: true })
1113

12-
refsFn(args, opts, (err, res) => {
13-
if (err) {
14-
return pt.emit('error', err)
14+
try {
15+
hash = cleanCID(hash)
16+
} catch (err) {
17+
if (!v.ipfsPath(hash)) {
18+
return pt.destroy(err)
1519
}
16-
res.forEach((item) => pt.write(item))
17-
pt.end()
20+
}
21+
22+
send({ path: 'refs', args: hash, qs: opts }, (err, stream) => {
23+
if (err) { return pt.destroy(err) }
24+
25+
pump(stream, pt)
1826
})
1927

2028
return pt

src/files-regular/refs.js

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,19 +40,9 @@ module.exports = (arg) => {
4040
send.andTransform(request, valueOrStreamToValue, callback)
4141
})
4242

43-
refs.local = promisify((opts, callback) => {
44-
if (typeof (opts) === 'function') {
45-
callback = opts
46-
opts = {}
47-
}
48-
49-
const request = {
50-
path: 'refs/local',
51-
qs: opts
52-
}
53-
54-
send.andTransform(request, valueOrStreamToValue, callback)
55-
})
43+
refs.local = require('./refs-local')(arg)
44+
refs.localReadableStream = require('./refs-local-readable-stream')(arg)
45+
refs.localPullStream = require('./refs-local-pull-stream')(arg)
5646

5747
return refs
5848
}

test/sub-modules.spec.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,9 +184,11 @@ describe('submodules', () => {
184184
expect(filesRegular.lsReadableStream).to.be.a('function')
185185
expect(filesRegular.lsPullStream).to.be.a('function')
186186
expect(filesRegular.refs).to.be.a('function')
187-
expect(filesRegular.refs.local).to.be.a('function')
188187
expect(filesRegular.refsReadableStream).to.be.a('function')
189188
expect(filesRegular.refsPullStream).to.be.a('function')
189+
expect(filesRegular.refs.local).to.be.a('function')
190+
expect(filesRegular.refs.localReadableStream).to.be.a('function')
191+
expect(filesRegular.refs.localPullStream).to.be.a('function')
190192
})
191193

192194
it('files MFS API', () => {

0 commit comments

Comments
 (0)