diff --git a/package.json b/package.json index c83eaf1..be83d98 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ }, "dependencies": { "multiaddr": "^4.0.0", + "mafmt": "^4.0.0", "lodash.uniqby": "^4.7.0", "peer-id": "~0.10.7" }, diff --git a/src/multiaddr-set.js b/src/multiaddr-set.js index a8f9bdf..8235556 100644 --- a/src/multiaddr-set.js +++ b/src/multiaddr-set.js @@ -52,6 +52,15 @@ class MultiaddrSet { return this._multiaddrs.forEach(fn) } + filterBy (maFmt) { + if (typeof maFmt !== 'object' || + typeof maFmt.matches !== 'function' || + typeof maFmt.partialMatch !== 'function' || + typeof maFmt.toString !== 'function') return [] + + return this._multiaddrs.filter((ma) => maFmt.matches(ma)) + } + has (ma) { ma = ensureMultiaddr(ma) return this._multiaddrs.some((m) => m.equals(ma)) diff --git a/test/index.spec.js b/test/index.spec.js index 76edc74..88c0a08 100644 --- a/test/index.spec.js +++ b/test/index.spec.js @@ -7,6 +7,7 @@ chai.use(dirtyChai) const expect = chai.expect const Id = require('peer-id') const Multiaddr = require('multiaddr') +const mafmt = require('mafmt') const Info = require('../src') const peerIdJSON = require('./peer-test.json') @@ -260,6 +261,16 @@ describe('peer-info', () => { }) }) + it('multiaddrs.filterBy', () => { + const ma1 = Multiaddr('/ip4/127.0.0.1/tcp/7000') + const ma2 = Multiaddr('/ip4/127.0.0.1/udp/5001') + pi.multiaddrs.add(ma1) + pi.multiaddrs.add(ma2) + const maddrs = pi.multiaddrs.filterBy(mafmt.TCP) + expect(maddrs.length).to.eq(1) + expect(maddrs[0].equals(ma1)).to.eq(true) + }) + it('multiaddrs.toArray', () => { pi.multiaddrs.add('/ip4/127.0.0.1/tcp/5001') pi.multiaddrs.toArray().forEach((ma) => {