diff --git a/README.md b/README.md index 61bd232..cf84bc2 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,7 @@ isIPFS.url('https://bafybeie5gq4jxvzmsym6hjlwxej4rwdoxt7wadqvmmwbqi7r27fclha2va. isIPFS.url('http://en.wikipedia-on-ipfs.org.ipfs.localhost:8080') // true isIPFS.url('https://github.com/ipfs/js-ipfs/blob/master/README.md') // false isIPFS.url('https://google.com') // false +isIPFS.url('ipfs://QmYjtig7VJQ6XsnUjqqJvj7QaMcCAwtrgNdahSiFofrE7o') // true isIPFS.path('/ipfs/QmYjtig7VJQ6XsnUjqqJvj7QaMcCAwtrgNdahSiFofrE7o') // true isIPFS.path('/ipfs/QmbcBPAwCDxRMB1Qe7CRQmxdrTSkxKwM9y6rZw2FjGtbsb/?weird-filename=test.jpg') // true @@ -71,9 +72,11 @@ isIPFS.urlOrPath('/ipfs/QmYjtig7VJQ6XsnUjqqJvj7QaMcCAwtrgNdahSiFofrE7o') // true isIPFS.urlOrPath('/ipns/github.com') // true isIPFS.urlOrPath('https://bafybeie5gq4jxvzmsym6hjlwxej4rwdoxt7wadqvmmwbqi7r27fclha2va.ipfs.dweb.link') // true isIPFS.urlOrPath('https://google.com') // false +isIPFS.urlOrPath('ipfs://QmYjtig7VJQ6XsnUjqqJvj7QaMcCAwtrgNdahSiFofrE7o') // true isIPFS.ipfsUrl('https://ipfs.io/ipfs/QmYjtig7VJQ6XsnUjqqJvj7QaMcCAwtrgNdahSiFofrE7o') // true isIPFS.ipfsUrl('https://ipfs.io/ipfs/invalid-hash') // false +isIPFS.ipfsUrl('ipfs://QmYjtig7VJQ6XsnUjqqJvj7QaMcCAwtrgNdahSiFofrE7o') // true isIPFS.ipnsUrl('https://ipfs.io/ipfs/QmYjtig7VJQ6XsnUjqqJvj7QaMcCAwtrgNdahSiFofrE7o') // false isIPFS.ipnsUrl('https://ipfs.io/ipns/github.com') // true diff --git a/src/index.js b/src/index.js index 64d1e3f..646eced 100644 --- a/src/index.js +++ b/src/index.js @@ -22,6 +22,9 @@ const subdomainProtocolMatch = 2 // Fully qualified domain name (FQDN) that has an explicit .tld suffix const fqdnWithTld = /^(([a-z0-9]|[a-z0-9][a-z0-9-]*[a-z0-9])\.)+([a-z0-9]|[a-z0-9][a-z0-9-]*[a-z0-9])$/ +// URI IANA-scheme +const uriSchemePattern = /^(ipfs):\/\/([^/?#]+)/ + /** * @param {*} hash */ @@ -210,7 +213,7 @@ const subdomain = (url) => ipfsSubdomain(url) || ipnsSubdomain(url) /** * @param {string | Uint8Array} url */ -const ipfsUrl = (url) => isIpfs(url, pathGatewayPattern) || ipfsSubdomain(url) +const ipfsUrl = (url) => isIpfs(url, pathGatewayPattern) || ipfsSubdomain(url) || isIpfs(url, uriSchemePattern) /** * @param {string | Uint8Array} url */