From 377042b62d09a76f7ec8e8a6b44df6615ecfa163 Mon Sep 17 00:00:00 2001 From: Alex Potsides Date: Thu, 29 Aug 2019 12:08:46 +0100 Subject: [PATCH] feat: support adding files via async iterator (#1078) Adds a method called `ipfs._addAsyncIterator`, prefixed with an underscore to mark it as sort of unofficial (though it's what `ipfs.add` will become once the async iterator migration is complete) and we don't want to implement symmetrical `ipfs.catAsyncIterator` etc methods, or at least not yet. --- src/files-regular/add-async-iterator.js | 23 +++++++++++++++++++++++ src/files-regular/index.js | 1 + src/utils/load-commands.js | 1 + 3 files changed, 25 insertions(+) create mode 100644 src/files-regular/add-async-iterator.js diff --git a/src/files-regular/add-async-iterator.js b/src/files-regular/add-async-iterator.js new file mode 100644 index 000000000..3fa2b23ed --- /dev/null +++ b/src/files-regular/add-async-iterator.js @@ -0,0 +1,23 @@ +'use strict' + +const SendFilesStream = require('../utils/send-files-stream') +const FileResultStreamConverter = require('../utils/file-result-stream-converter') + +module.exports = (send) => { + return async function * (source, options) { + options = options || {} + options.converter = FileResultStreamConverter + + const stream = SendFilesStream(send, 'add')(options) + + for await (const entry of source) { + stream.write(entry) + } + + stream.end() + + for await (const entry of stream) { + yield entry + } + } +} diff --git a/src/files-regular/index.js b/src/files-regular/index.js index 059d7ea1c..e5b49e495 100644 --- a/src/files-regular/index.js +++ b/src/files-regular/index.js @@ -12,6 +12,7 @@ module.exports = (arg) => { addFromFs: require('../files-regular/add-from-fs')(send), addFromURL: require('../files-regular/add-from-url')(send), addFromStream: require('../files-regular/add')(send), + _addAsyncIterator: require('../files-regular/add-async-iterator')(send), cat: require('../files-regular/cat')(send), catReadableStream: require('../files-regular/cat-readable-stream')(send), catPullStream: require('../files-regular/cat-pull-stream')(send), diff --git a/src/utils/load-commands.js b/src/utils/load-commands.js index e4a914dd0..467af3cea 100644 --- a/src/utils/load-commands.js +++ b/src/utils/load-commands.js @@ -9,6 +9,7 @@ function requireCommands () { addFromFs: require('../files-regular/add-from-fs'), addFromURL: require('../files-regular/add-from-url'), addFromStream: require('../files-regular/add'), + _addAsyncIterator: require('../files-regular/add-async-iterator'), cat: require('../files-regular/cat'), catReadableStream: require('../files-regular/cat-readable-stream'), catPullStream: require('../files-regular/cat-pull-stream'),