From 940d2a3fcb7a6d5bfe52f5d487031f84a6c659c8 Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Fri, 8 Nov 2019 16:22:50 +0000 Subject: [PATCH] refactor: move files to root level Moves remaining files that contain root level commands to the root of the src directory. This makes it easier for new contributors to find things. It also renames the `files-mfs` dir to `files` to reflect the fact that it lives in the "files" namespace currently. BREAKING CHANGE: files in `src/files-regular` have moved to `src`. The `src/files-mfs` directory has been renamed to `src/files`. If you were previously requiring files from these directories e.g. `require('ipfs-http-client/src/files-regular/add')` then please be aware that they have moved. License: MIT Signed-off-by: Alan Shaw --- src/files-regular/index.js | 100 ------------------ src/files-regular/refs.js | 63 ----------- src/{files-mfs => files}/cp.js | 0 src/{files-mfs => files}/flush.js | 0 src/{files-mfs => files}/index.js | 0 src/{files-mfs => files}/ls-pull-stream.js | 0 .../ls-readable-stream.js | 0 src/{files-mfs => files}/ls.js | 0 src/{files-mfs => files}/mkdir.js | 0 src/{files-mfs => files}/mv.js | 0 src/{files-mfs => files}/read-pull-stream.js | 0 .../read-readable-stream.js | 0 src/{files-mfs => files}/read.js | 0 src/{files-mfs => files}/rm.js | 0 src/{files-mfs => files}/stat.js | 0 src/{files-mfs => files}/write.js | 0 src/{files-regular => }/get.js | 6 +- src/{files-regular => }/ls.js | 4 +- src/refs/index.js | 69 ++++++++++++ .../refs-local.js => refs/local.js} | 0 src/utils/load-commands.js | 96 ++++++++++++++++- test/sub-modules.spec.js | 22 ++-- 22 files changed, 179 insertions(+), 181 deletions(-) delete mode 100644 src/files-regular/index.js delete mode 100644 src/files-regular/refs.js rename src/{files-mfs => files}/cp.js (100%) rename src/{files-mfs => files}/flush.js (100%) rename src/{files-mfs => files}/index.js (100%) rename src/{files-mfs => files}/ls-pull-stream.js (100%) rename src/{files-mfs => files}/ls-readable-stream.js (100%) rename src/{files-mfs => files}/ls.js (100%) rename src/{files-mfs => files}/mkdir.js (100%) rename src/{files-mfs => files}/mv.js (100%) rename src/{files-mfs => files}/read-pull-stream.js (100%) rename src/{files-mfs => files}/read-readable-stream.js (100%) rename src/{files-mfs => files}/read.js (100%) rename src/{files-mfs => files}/rm.js (100%) rename src/{files-mfs => files}/stat.js (100%) rename src/{files-mfs => files}/write.js (100%) rename src/{files-regular => }/get.js (85%) rename src/{files-regular => }/ls.js (94%) create mode 100644 src/refs/index.js rename src/{files-regular/refs-local.js => refs/local.js} (100%) 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', () => {