diff --git a/src/files-regular/index.js b/src/files-regular/index.js deleted file mode 100644 index 3381102d5..000000000 --- a/src/files-regular/index.js +++ /dev/null @@ -1,100 +0,0 @@ -'use strict' - -const nodeify = require('promise-nodeify') -const callbackify = require('callbackify') -const all = require('async-iterator-all') -const { concatify, collectify, pullify, streamify } = require('../lib/converters') -const toPullStream = require('async-iterator-to-pull-stream') -const pull = require('pull-stream/pull') -const map = require('pull-stream/throughs/map') - -module.exports = (config) => { - const add = require('../add')(config) - const addFromFs = require('../add-from-fs')(config) - const addFromURL = require('../add-from-url')(config) - const cat = require('../cat')(config) - const get = require('./get')(config) - const ls = require('./ls')(config) - const refs = require('./refs')(config) - const refsLocal = require('./refs-local')(config) - - const api = { - add: (input, options, callback) => { - if (typeof options === 'function') { - callback = options - options = {} - } - return nodeify(collectify(add)(input, options), callback) - }, - addReadableStream: streamify.transform(add), - addPullStream: pullify.transform(add), - addFromFs: (path, options, callback) => { - if (typeof options === 'function') { - callback = options - options = {} - } - return nodeify(collectify(addFromFs)(path, options), callback) - }, - addFromURL: (url, options, callback) => { - if (typeof options === 'function') { - callback = options - options = {} - } - return nodeify(collectify(addFromURL)(url, options), callback) - }, - addFromStream: (input, options, callback) => { - if (typeof options === 'function') { - callback = options - options = {} - } - return nodeify(collectify(add)(input, options), callback) - }, - _addAsyncIterator: add, - cat: callbackify.variadic((path, options) => concatify(cat)(path, options)), - catReadableStream: streamify.readable(cat), - catPullStream: pullify.source(cat), - _catAsyncIterator: cat, - get: callbackify.variadic(async (path, options) => { - const output = [] - - for await (const entry of get(path, options)) { - if (entry.content) { - entry.content = Buffer.concat(await all(entry.content)) - } - - output.push(entry) - } - - return output - }), - getReadableStream: streamify.readable(get), - getPullStream: (path, options) => { - return pull( - toPullStream(get(path, options)), - map(file => { - if (file.content) { - file.content = toPullStream(file.content) - } - - return file - }) - ) - }, - _getAsyncIterator: get, - ls: callbackify.variadic((path, options) => collectify(ls)(path, options)), - lsReadableStream: streamify.readable(ls), - lsPullStream: pullify.source(ls), - _lsAsyncIterator: ls, - refs: callbackify.variadic((path, options) => collectify(refs)(path, options)), - refsReadableStream: streamify.readable(refs), - refsPullStream: pullify.source(refs), - _refsAsyncIterator: refs - } - - api.refs.local = callbackify.variadic((options) => collectify(refsLocal)(options)) - api.refs.localReadableStream = streamify.readable(refsLocal) - api.refs.localPullStream = pullify.source(refsLocal) - api.refs._localAsyncIterator = refsLocal - - return api -} diff --git a/src/files-regular/refs.js b/src/files-regular/refs.js deleted file mode 100644 index c6136ede5..000000000 --- a/src/files-regular/refs.js +++ /dev/null @@ -1,63 +0,0 @@ -'use strict' - -const configure = require('../lib/configure') -const cleanCID = require('../utils/clean-cid') -const IsIpfs = require('is-ipfs') -const ndjson = require('iterable-ndjson') -const toIterable = require('../lib/stream-to-iterable') -const toCamel = require('../lib/object-to-camel') - -module.exports = configure(({ ky }) => { - return async function * refs (args, options) { - options = options || {} - - const searchParams = new URLSearchParams() - - if (options.format !== undefined) { - searchParams.set('format', options.format) - } - - if (options.edges !== undefined) { - searchParams.set('edges', options.edges) - } - - if (options.unique !== undefined) { - searchParams.set('unique', options.unique) - } - - if (options.recursive !== undefined) { - searchParams.set('recursive', options.recursive) - } - - if (options.maxDepth !== undefined) { - searchParams.set('max-depth', options.maxDepth) - } - - if (!Array.isArray(args)) { - args = [args] - } - - for (let arg of args) { - try { - arg = cleanCID(arg) - } catch (err) { - if (!IsIpfs.ipfsPath(arg)) { - throw err - } - } - - searchParams.append('arg', arg.toString()) - } - - const res = await ky.get('refs', { - timeout: options.timeout, - signal: options.signal, - headers: options.headers, - searchParams - }) - - for await (const file of ndjson(toIterable(res.body))) { - yield toCamel(file) - } - } -}) diff --git a/src/files-mfs/cp.js b/src/files/cp.js similarity index 100% rename from src/files-mfs/cp.js rename to src/files/cp.js diff --git a/src/files-mfs/flush.js b/src/files/flush.js similarity index 100% rename from src/files-mfs/flush.js rename to src/files/flush.js diff --git a/src/files-mfs/index.js b/src/files/index.js similarity index 100% rename from src/files-mfs/index.js rename to src/files/index.js diff --git a/src/files-mfs/ls-pull-stream.js b/src/files/ls-pull-stream.js similarity index 100% rename from src/files-mfs/ls-pull-stream.js rename to src/files/ls-pull-stream.js diff --git a/src/files-mfs/ls-readable-stream.js b/src/files/ls-readable-stream.js similarity index 100% rename from src/files-mfs/ls-readable-stream.js rename to src/files/ls-readable-stream.js diff --git a/src/files-mfs/ls.js b/src/files/ls.js similarity index 100% rename from src/files-mfs/ls.js rename to src/files/ls.js diff --git a/src/files-mfs/mkdir.js b/src/files/mkdir.js similarity index 100% rename from src/files-mfs/mkdir.js rename to src/files/mkdir.js diff --git a/src/files-mfs/mv.js b/src/files/mv.js similarity index 100% rename from src/files-mfs/mv.js rename to src/files/mv.js diff --git a/src/files-mfs/read-pull-stream.js b/src/files/read-pull-stream.js similarity index 100% rename from src/files-mfs/read-pull-stream.js rename to src/files/read-pull-stream.js diff --git a/src/files-mfs/read-readable-stream.js b/src/files/read-readable-stream.js similarity index 100% rename from src/files-mfs/read-readable-stream.js rename to src/files/read-readable-stream.js diff --git a/src/files-mfs/read.js b/src/files/read.js similarity index 100% rename from src/files-mfs/read.js rename to src/files/read.js diff --git a/src/files-mfs/rm.js b/src/files/rm.js similarity index 100% rename from src/files-mfs/rm.js rename to src/files/rm.js diff --git a/src/files-mfs/stat.js b/src/files/stat.js similarity index 100% rename from src/files-mfs/stat.js rename to src/files/stat.js diff --git a/src/files-mfs/write.js b/src/files/write.js similarity index 100% rename from src/files-mfs/write.js rename to src/files/write.js diff --git a/src/files-regular/get.js b/src/get.js similarity index 85% rename from src/files-regular/get.js rename to src/get.js index 6c942648b..62adfd1e9 100644 --- a/src/files-regular/get.js +++ b/src/get.js @@ -1,9 +1,9 @@ 'use strict' -const configure = require('../lib/configure') -const tarStreamToObjects = require('../utils/tar-stream-to-objects') +const configure = require('./lib/configure') +const tarStreamToObjects = require('./utils/tar-stream-to-objects') const IsIpfs = require('is-ipfs') -const cleanCID = require('../utils/clean-cid') +const cleanCID = require('./utils/clean-cid') module.exports = configure(({ ky }) => { return async function * get (path, options) { diff --git a/src/files-regular/ls.js b/src/ls.js similarity index 94% rename from src/files-regular/ls.js rename to src/ls.js index 0f13f556d..fc9921963 100644 --- a/src/files-regular/ls.js +++ b/src/ls.js @@ -1,8 +1,8 @@ 'use strict' const IsIpfs = require('is-ipfs') -const cleanCID = require('../utils/clean-cid') -const configure = require('../lib/configure') +const cleanCID = require('./utils/clean-cid') +const configure = require('./lib/configure') module.exports = configure(({ ky }) => { return async function * ls (path, options) { diff --git a/src/refs/index.js b/src/refs/index.js new file mode 100644 index 000000000..d86944eb2 --- /dev/null +++ b/src/refs/index.js @@ -0,0 +1,69 @@ +'use strict' + +const configure = require('../lib/configure') +const cleanCID = require('../utils/clean-cid') +const IsIpfs = require('is-ipfs') +const ndjson = require('iterable-ndjson') +const toIterable = require('../lib/stream-to-iterable') +const toCamel = require('../lib/object-to-camel') + +module.exports = config => { + const refs = (configure(({ ky }) => { + return async function * refs (args, options) { + options = options || {} + + const searchParams = new URLSearchParams() + + if (options.format !== undefined) { + searchParams.set('format', options.format) + } + + if (options.edges !== undefined) { + searchParams.set('edges', options.edges) + } + + if (options.unique !== undefined) { + searchParams.set('unique', options.unique) + } + + if (options.recursive !== undefined) { + searchParams.set('recursive', options.recursive) + } + + if (options.maxDepth !== undefined) { + searchParams.set('max-depth', options.maxDepth) + } + + if (!Array.isArray(args)) { + args = [args] + } + + for (let arg of args) { + try { + arg = cleanCID(arg) + } catch (err) { + if (!IsIpfs.ipfsPath(arg)) { + throw err + } + } + + searchParams.append('arg', arg.toString()) + } + + const res = await ky.get('refs', { + timeout: options.timeout, + signal: options.signal, + headers: options.headers, + searchParams + }) + + for await (const file of ndjson(toIterable(res.body))) { + yield toCamel(file) + } + } + }))(config) + + refs.local = require('./local')(config) + + return refs +} diff --git a/src/files-regular/refs-local.js b/src/refs/local.js similarity index 100% rename from src/files-regular/refs-local.js rename to src/refs/local.js diff --git a/src/utils/load-commands.js b/src/utils/load-commands.js index 81948a54e..d4295205c 100644 --- a/src/utils/load-commands.js +++ b/src/utils/load-commands.js @@ -1,15 +1,107 @@ 'use strict' +const nodeify = require('promise-nodeify') +const callbackify = require('callbackify') +const all = require('async-iterator-all') +const { concatify, collectify, pullify, streamify } = require('../lib/converters') +const toPullStream = require('async-iterator-to-pull-stream') +const pull = require('pull-stream/pull') +const map = require('pull-stream/throughs/map') + function requireCommands (send, config) { + const add = require('../add')(config) + const addFromFs = require('../add-from-fs')(config) + const addFromURL = require('../add-from-url')(config) + const cat = require('../cat')(config) + const get = require('../get')(config) + const ls = require('../ls')(config) + const refs = require('../refs')(config) + const cmds = { - ...require('../files-regular')(config), + add: (input, options, callback) => { + if (typeof options === 'function') { + callback = options + options = {} + } + return nodeify(collectify(add)(input, options), callback) + }, + addReadableStream: streamify.transform(add), + addPullStream: pullify.transform(add), + addFromFs: (path, options, callback) => { + if (typeof options === 'function') { + callback = options + options = {} + } + return nodeify(collectify(addFromFs)(path, options), callback) + }, + addFromURL: (url, options, callback) => { + if (typeof options === 'function') { + callback = options + options = {} + } + return nodeify(collectify(addFromURL)(url, options), callback) + }, + addFromStream: (input, options, callback) => { + if (typeof options === 'function') { + callback = options + options = {} + } + return nodeify(collectify(add)(input, options), callback) + }, + _addAsyncIterator: add, + cat: callbackify.variadic((path, options) => concatify(cat)(path, options)), + catReadableStream: streamify.readable(cat), + catPullStream: pullify.source(cat), + _catAsyncIterator: cat, + get: callbackify.variadic(async (path, options) => { + const output = [] + + for await (const entry of get(path, options)) { + if (entry.content) { + entry.content = Buffer.concat(await all(entry.content)) + } + + output.push(entry) + } + + return output + }), + getReadableStream: streamify.readable(get), + getPullStream: (path, options) => { + return pull( + toPullStream(get(path, options)), + map(file => { + if (file.content) { + file.content = toPullStream(file.content) + } + + return file + }) + ) + }, + _getAsyncIterator: get, + ls: callbackify.variadic((path, options) => collectify(ls)(path, options)), + lsReadableStream: streamify.readable(ls), + lsPullStream: pullify.source(ls), + _lsAsyncIterator: ls, + refs: callbackify.variadic((path, options) => collectify(refs)(path, options)), + refsReadableStream: streamify.readable(refs), + refsPullStream: pullify.source(refs), + _refsAsyncIterator: refs, getEndpointConfig: require('../get-endpoint-config')(config), bitswap: require('../bitswap')(config) } + Object.assign(cmds.refs, { + local: callbackify.variadic(options => collectify(refs.local)(options)), + localReadableStream: streamify.readable(refs.local), + localPullStream: pullify.source(refs.local), + _localAsyncIterator: refs.local + }) + const subCmds = { // Files MFS (Mutable Filesystem) - files: require('../files-mfs'), + files: require('../files'), // Block block: require('../block'), diff --git a/test/sub-modules.spec.js b/test/sub-modules.spec.js index fbecfe637..62d05ce8e 100644 --- a/test/sub-modules.spec.js +++ b/test/sub-modules.spec.js @@ -165,7 +165,7 @@ describe('submodules', () => { }) it('files regular API', () => { - const filesRegular = require('../src/files-regular')(config) + const filesRegular = require('../src')(config) expect(filesRegular.add).to.be.a('function') expect(filesRegular.addReadableStream).to.be.a('function') @@ -191,16 +191,16 @@ describe('submodules', () => { }) it('files MFS API', () => { - const filesMFS = require('../src/files-mfs')(config) - - expect(filesMFS.cp).to.be.a('function') - expect(filesMFS.ls).to.be.a('function') - expect(filesMFS.mkdir).to.be.a('function') - expect(filesMFS.stat).to.be.a('function') - expect(filesMFS.rm).to.be.a('function') - expect(filesMFS.read).to.be.a('function') - expect(filesMFS.write).to.be.a('function') - expect(filesMFS.mv).to.be.a('function') + const files = require('../src/files')(config) + + expect(files.cp).to.be.a('function') + expect(files.ls).to.be.a('function') + expect(files.mkdir).to.be.a('function') + expect(files.stat).to.be.a('function') + expect(files.rm).to.be.a('function') + expect(files.read).to.be.a('function') + expect(files.write).to.be.a('function') + expect(files.mv).to.be.a('function') }) it('commands', () => {