Skip to content

Commit fc73da7

Browse files
author
Alan Shaw
authored
refactor: convert object.* and files.* API methods to async/await (ipfs#1160)
License: MIT Signed-off-by: Alan Shaw <[email protected]>
1 parent 8b48d57 commit fc73da7

35 files changed

+495
-738
lines changed

package.json

+3-11
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,11 @@
5353
"cids": "~0.7.1",
5454
"concat-stream": "github:hugomrdias/concat-stream#feat/smaller",
5555
"debug": "^4.1.0",
56-
"delay": "^4.3.0",
5756
"detect-node": "^2.0.4",
58-
"end-of-stream": "^1.4.1",
5957
"err-code": "^2.0.0",
6058
"explain-error": "^1.0.4",
6159
"flatmap": "0.0.3",
6260
"form-data": "^3.0.0",
63-
"fs-extra": "^8.1.0",
6461
"glob": "^7.1.3",
6562
"ipfs-block": "~0.8.1",
6663
"ipfs-utils": "^0.4.0",
@@ -71,44 +68,39 @@
7168
"is-pull-stream": "0.0.0",
7269
"is-stream": "^2.0.0",
7370
"iso-stream-http": "~0.1.2",
74-
"iso-url": "~0.4.6",
7571
"it-glob": "0.0.6",
7672
"it-tar": "^1.1.0",
7773
"it-to-stream": "^0.1.1",
7874
"iterable-ndjson": "^1.1.0",
79-
"just-kebab-case": "^1.1.0",
80-
"just-map-keys": "^1.1.0",
8175
"kind-of": "^6.0.2",
8276
"ky": "^0.15.0",
8377
"ky-universal": "^0.3.0",
84-
"lru-cache": "^5.1.1",
8578
"merge-options": "^2.0.0",
8679
"multiaddr": "^6.0.6",
8780
"multibase": "~0.6.0",
8881
"multicodec": "~0.5.1",
8982
"multihashes": "~0.4.14",
9083
"ndjson": "github:hugomrdias/ndjson#feat/readable-stream3",
9184
"once": "^1.4.0",
85+
"parse-duration": "^0.1.1",
9286
"peer-id": "~0.12.3",
9387
"peer-info": "~0.15.1",
9488
"promise-nodeify": "^3.0.1",
9589
"promisify-es6": "^1.0.3",
9690
"pull-defer": "~0.2.3",
9791
"pull-stream": "^3.6.9",
98-
"pull-stream-to-async-iterator": "^1.0.2",
9992
"pull-to-stream": "~0.1.1",
10093
"pump": "^3.0.0",
10194
"qs": "^6.5.2",
10295
"readable-stream": "^3.1.1",
103-
"stream-to-pull-stream": "^1.7.2",
104-
"through2": "^3.0.1"
96+
"stream-to-pull-stream": "^1.7.2"
10597
},
10698
"devDependencies": {
10799
"aegir": "^20.4.1",
108100
"browser-process-platform": "~0.1.1",
109101
"cross-env": "^6.0.0",
110102
"go-ipfs-dep": "^0.4.22",
111-
"interface-ipfs-core": "^0.119.0",
103+
"interface-ipfs-core": "^0.120.0",
112104
"ipfsd-ctl": "^0.47.1",
113105
"nock": "^11.4.0",
114106
"stream-equal": "^1.1.1"

src/files/cp.js

+21-16
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,25 @@
11
'use strict'
22

3-
const promisify = require('promisify-es6')
4-
const findSources = require('../utils/find-sources')
3+
const CID = require('cids')
4+
const configure = require('../lib/configure')
5+
const { findSources } = require('./utils')
56

6-
module.exports = (send) => {
7-
return promisify(function () {
8-
const {
9-
callback,
10-
sources,
11-
opts
12-
} = findSources(Array.prototype.slice.call(arguments))
7+
module.exports = configure(({ ky }) => {
8+
return (...args) => {
9+
const { sources, options } = findSources(args)
1310

14-
send({
15-
path: 'files/cp',
16-
args: sources,
17-
qs: opts
18-
}, (error) => callback(error))
19-
})
20-
}
11+
const searchParams = new URLSearchParams(options.searchParams)
12+
sources.forEach(src => searchParams.append('arg', CID.isCID(src) ? `/ipfs/${src}` : src))
13+
if (options.format) searchParams.set('format', options.format)
14+
if (options.flush != null) searchParams.set('flush', options.flush)
15+
if (options.hashAlg) searchParams.set('hash', options.hashAlg)
16+
if (options.parents != null) searchParams.set('parents', options.parents)
17+
18+
return ky.post('files/cp', {
19+
timeout: options.timeout,
20+
signal: options.signal,
21+
headers: options.headers,
22+
searchParams
23+
}).text()
24+
}
25+
})

src/files/flush.js

+19-12
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,24 @@
11
'use strict'
22

3-
const promisify = require('promisify-es6')
3+
const configure = require('../lib/configure')
44

5-
module.exports = (send) => {
6-
return promisify((args, callback) => {
7-
if (typeof args === 'function') {
8-
callback = args
9-
args = '/'
5+
module.exports = configure(({ ky }) => {
6+
return async (path, options) => {
7+
if (typeof path !== 'string') {
8+
options = path
9+
path = '/'
1010
}
1111

12-
return send({
13-
path: 'files/flush',
14-
args: args
15-
}, (error) => callback(error))
16-
})
17-
}
12+
options = options || {}
13+
14+
const searchParams = new URLSearchParams(options.searchParams)
15+
searchParams.set('arg', path)
16+
17+
await ky.post('files/flush', {
18+
timeout: options.timeout,
19+
signal: options.signal,
20+
headers: options.headers,
21+
searchParams
22+
}).text()
23+
}
24+
})

src/files/index.js

+18-16
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,25 @@
11
'use strict'
22

3-
const moduleConfig = require('../utils/module-config')
3+
const callbackify = require('callbackify')
4+
const { collectify, streamify, pullify, concatify } = require('../lib/converters')
45

5-
module.exports = (arg) => {
6-
const send = moduleConfig(arg)
6+
module.exports = config => {
7+
const ls = require('./ls')(config)
8+
const read = require('./read')(config)
79

810
return {
9-
cp: require('./cp')(send),
10-
mkdir: require('./mkdir')(send),
11-
flush: require('./flush')(send),
12-
stat: require('./stat')(send),
13-
rm: require('./rm')(send),
14-
ls: require('./ls')(send),
15-
lsReadableStream: require('./ls-readable-stream')(send),
16-
lsPullStream: require('./ls-pull-stream')(send),
17-
read: require('./read')(send),
18-
readReadableStream: require('./read-readable-stream')(send),
19-
readPullStream: require('./read-pull-stream')(send),
20-
write: require('./write')(send),
21-
mv: require('./mv')(send)
11+
cp: callbackify.variadic(require('./cp')(config)),
12+
mkdir: callbackify.variadic(require('./mkdir')(config)),
13+
flush: callbackify.variadic(require('./flush')(config)),
14+
stat: callbackify.variadic(require('./stat')(config)),
15+
rm: callbackify.variadic(require('./rm')(config)),
16+
ls: callbackify.variadic(collectify(ls)),
17+
lsReadableStream: streamify.readable(ls),
18+
lsPullStream: pullify.source(ls),
19+
read: callbackify.variadic(concatify(read)),
20+
readReadableStream: streamify.readable(read),
21+
readPullStream: pullify.source(read),
22+
write: callbackify.variadic(require('./write')(config)),
23+
mv: callbackify.variadic(require('./mv')(config))
2224
}
2325
}

src/files/ls-pull-stream.js

-12
This file was deleted.

src/files/ls-readable-stream.js

-62
This file was deleted.

src/files/ls.js

+35-30
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,42 @@
11
'use strict'
22

3-
const promisify = require('promisify-es6')
3+
const CID = require('cids')
4+
const ndjson = require('iterable-ndjson')
5+
const toIterable = require('../lib/stream-to-iterable')
6+
const configure = require('../lib/configure')
7+
const toCamel = require('../lib/object-to-camel')
48

5-
const transform = function (res, callback) {
6-
const entries = res.Entries || []
7-
8-
callback(null, entries.map((entry) => {
9-
return {
10-
name: entry.Name,
11-
type: entry.Type,
12-
size: entry.Size,
13-
hash: entry.Hash
9+
module.exports = configure(({ ky }) => {
10+
return async function * ls (path, options) {
11+
if (typeof path !== 'string') {
12+
options = path
13+
path = '/'
1414
}
15-
}))
16-
}
1715

18-
module.exports = (send) => {
19-
return promisify((args, opts, callback) => {
20-
if (typeof (opts) === 'function') {
21-
callback = opts
22-
opts = {}
23-
}
16+
options = options || {}
2417

25-
if (typeof (args) === 'function') {
26-
callback = args
27-
opts = {}
28-
args = null
29-
}
18+
const searchParams = new URLSearchParams(options.searchParams)
19+
searchParams.set('arg', CID.isCID(path) ? `/ipfs/${path}` : path)
20+
searchParams.set('stream', true)
21+
if (options.cidBase) searchParams.set('cid-base', options.cidBase)
22+
if (options.long != null) searchParams.set('long', options.long)
3023

31-
return send.andTransform({
32-
path: 'files/ls',
33-
args: args,
34-
qs: opts
35-
}, transform, callback)
36-
})
37-
}
24+
const res = await ky.post('files/ls', {
25+
timeout: options.timeout,
26+
signal: options.signal,
27+
headers: options.headers,
28+
searchParams
29+
})
30+
31+
for await (const result of ndjson(toIterable(res.body))) {
32+
// go-ipfs does not yet support the "stream" option
33+
if ('Entries' in result) {
34+
for (const entry of result.Entries || []) {
35+
yield toCamel(entry)
36+
}
37+
return
38+
}
39+
yield toCamel(result)
40+
}
41+
}
42+
})

src/files/mkdir.js

+21-15
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,24 @@
1-
21
'use strict'
32

4-
const promisify = require('promisify-es6')
3+
const configure = require('../lib/configure')
4+
5+
module.exports = configure(({ ky }) => {
6+
return (path, options) => {
7+
options = options || {}
8+
9+
const searchParams = new URLSearchParams(options.searchParams)
10+
searchParams.append('arg', path)
11+
if (options.cidVersion != null) searchParams.set('cid-version', options.cidVersion)
12+
if (options.format) searchParams.set('format', options.format)
13+
if (options.flush != null) searchParams.set('flush', options.flush)
14+
if (options.hashAlg) searchParams.set('hash', options.hashAlg)
15+
if (options.parents != null) searchParams.set('parents', options.parents)
516

6-
module.exports = (send) => {
7-
return promisify((args, opts, callback) => {
8-
if (typeof (opts) === 'function') {
9-
callback = opts
10-
opts = {}
11-
}
12-
send({
13-
path: 'files/mkdir',
14-
args: args,
15-
qs: opts
16-
}, (error) => callback(error))
17-
})
18-
}
17+
return ky.post('files/mkdir', {
18+
timeout: options.timeout,
19+
signal: options.signal,
20+
headers: options.headers,
21+
searchParams
22+
}).text()
23+
}
24+
})

0 commit comments

Comments
 (0)