diff --git a/bin.js b/bin.js index bca2547..06d051f 100755 --- a/bin.js +++ b/bin.js @@ -53,6 +53,7 @@ cli cli .command('hash [car]') .describe('Generate CID for a CAR.') + .option('-m, --only-multihash', 'Output base58btc encoded multihash instead of a CID.') .action(createAction('./cmd/hash.js')) cli.parse(process.argv) diff --git a/cmd/hash.js b/cmd/hash.js index ca823f9..52f9a64 100644 --- a/cmd/hash.js +++ b/cmd/hash.js @@ -4,12 +4,16 @@ import { pipeline } from 'stream/promises' import { CID } from 'multiformats/cid' import * as Digest from 'multiformats/hashes/digest' import { sha256 } from 'multiformats/hashes/sha2' +import { base58btc } from 'multiformats/bases/base58' /** CAR CID code */ const carCode = 0x0202 -/** @param {string} carPath */ -export default async function hash (carPath) { +/** + * @param {string} carPath + * @param {{ 'only-multihash': boolean }} [opts] + */ +export default async function hash (carPath, opts) { const hasher = crypto.createHash('sha256') await pipeline( @@ -22,5 +26,9 @@ export default async function hash (carPath) { ) const digest = Digest.create(sha256.code, hasher.digest()) - console.log(CID.createV1(carCode, digest).toString()) + if (opts?.['only-multihash']) { + console.log(base58btc.encode(digest.bytes)) + } else { + console.log(CID.createV1(carCode, digest).toString()) + } } diff --git a/test/bin.node.test.js b/test/bin.node.test.js index a8a0917..985a10c 100644 --- a/test/bin.node.test.js +++ b/test/bin.node.test.js @@ -248,6 +248,12 @@ describe('CLI', function () { assert.equal(res.stdout, 'bagbaieraycsgjotn63wc2tdyiyadvkdach5vphpdmoeehnseebjbtapgi44q') }) + it('generate multihash', () => { + const carPath = './test/fixtures/comic.car' + const res = execaSync(binPath, ['hash', carPath, '--only-multihash']) + assert.equal(res.stdout, 'zQmbJeNsbY4jTphnsZ4RBHG2jC8STcBanGVPi3V3A9FQxSU') + }) + it('stdin | generate CAR CID', () => { const carPath = './test/fixtures/comic.car' const res = execaSync(binPath, ['hash'], {