From 252ab1dd1cef9869e0aab0297adf79a0063a41bd Mon Sep 17 00:00:00 2001 From: Pascal Precht Date: Fri, 29 Jun 2018 16:01:22 +0100 Subject: [PATCH] fix(core/components/dag): make options in `put` API optional The [dag.put](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/DAG.md#dagput) interface takes an options object which is required, but should be optional with decent defaults. See dedicated test here: https://github.com/ipfs/interface-ipfs-core/pull/316 This commit implements this behaviour. **Before**: ```js ipfs.dag.put(obj, options, (err, cid) => {...}); ``` ^ Prior to this commit, without passing `options`, this call resulted in an error. **After**: ```js ipfs.dag.put(obj, (err, cid) => {...}); ``` ^ This is now perfectly fine. Fixes #1395 License: MIT Signed-off-by: Pascal Precht --- src/core/components/dag.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/core/components/dag.js b/src/core/components/dag.js index e43ea241f8..5b917323a9 100644 --- a/src/core/components/dag.js +++ b/src/core/components/dag.js @@ -9,6 +9,21 @@ const flattenDeep = require('lodash.flattendeep') module.exports = function dag (self) { return { put: promisify((dagNode, options, callback) => { + if (typeof options === 'function') { + callback = options + } else if (options.cid && options.format && options.hashAlg) { + throw new Error('Can\'t put dag node. Please provide either `cid` OR `format` and `hashAlg` options.'); + } else if ((options.format && !options.hashAlg) || (!options.format && options.hashAlg)) { + throw new Error('Can\'t put dag node. Please provide `format` AND `hashAlg` options.'); + } + + const optionDefaults = { + format: 'dag-cbor', + hashAlg: 'sha2-255' + } + + options = options.cid ? options : Object.assign({}, optionDefaults, options) + self._ipld.put(dagNode, options, callback) }),