From 7e6a580a8c89455e6305d04c5c1515a6619d9bd9 Mon Sep 17 00:00:00 2001 From: ThaUnknown <6506529+ThaUnknown@users.noreply.github.com> Date: Tue, 6 Dec 2022 00:43:49 +0100 Subject: [PATCH] feat: esm --- .gitignore | 1 + README.md | 4 ++-- index.js | 11 +++++------ package.json | 8 +++++++- test/decode.js | 4 ++-- test/encode.js | 34 +++++++++++++++++----------------- 6 files changed, 34 insertions(+), 28 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c2658d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/README.md b/README.md index efbe310..6542221 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ npm install magnet-uri Parse a magnet URI and return an object of keys/values. ```js -const magnet = require('magnet-uri') +import magnet from 'magnet-uri' // "Leaves of Grass" by Walt Whitman const uri = 'magnet:?xt=urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36&dn=Leaves+of+Grass+by+Walt+Whitman.epub&tr=udp%3A%2F%2Ftracker.example4.com%3A80&tr=udp%3A%2F%2Ftracker.example5.com%3A80&tr=udp%3A%2F%2Ftracker.example3.com%3A6969&tr=udp%3A%2F%2Ftracker.example2.com%3A80&tr=udp%3A%2F%2Ftracker.example1.com%3A1337' @@ -70,7 +70,7 @@ The `parsed` magnet link object looks like this: Convert an object of key/values into a magnet URI string. ```js -const magnet = require('magnet-uri') +import magnet from 'magnet-uri' const uri = magnet.encode({ xt: [ diff --git a/index.js b/index.js index 6786257..36a95db 100644 --- a/index.js +++ b/index.js @@ -1,10 +1,6 @@ /*! magnet-uri. MIT License. WebTorrent LLC */ -module.exports = magnetURIDecode -module.exports.decode = magnetURIDecode -module.exports.encode = magnetURIEncode - -const base32 = require('thirty-two') -const bep53Range = require('bep53-range') +import base32 from 'thirty-two' +import bep53Range from 'bep53-range' /** * Parse a magnet URI and return an object of keys/values @@ -175,3 +171,6 @@ function magnetURIEncode (obj) { return result } + +export default magnetURIDecode +export { magnetURIDecode as decode, magnetURIEncode as encode } diff --git a/package.json b/package.json index 5de3187..1730fe0 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "bugs": { "url": "https://github.com/webtorrent/magnet-uri/issues" }, + "type": "module", "dependencies": { "bep53-range": "^1.1.1", "thirty-two": "^1.0.2" @@ -43,7 +44,12 @@ "webtorrent" ], "license": "MIT", - "main": "index.js", + "engines": { + "node": ">=12.20.0" + }, + "exports": { + "import": "./index.js" + }, "repository": { "type": "git", "url": "git://github.com/webtorrent/magnet-uri.git" diff --git a/test/decode.js b/test/decode.js index 79da1fb..389806a 100644 --- a/test/decode.js +++ b/test/decode.js @@ -1,5 +1,5 @@ -const magnet = require('../') -const test = require('tape') +import magnet from '../index.js' +import test from 'tape' const leavesOfGrass = 'magnet:?xt=urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36&xt=urn:btmh:1220d2474e86c95b19b8bcfdb92bc12c9d44667cfa36d2474e86c95b19b8bcfdb92b&dn=Leaves+of+Grass+by+Walt+Whitman.epub&tr=udp%3A%2F%2Ftracker.example4.com%3A80&tr=udp%3A%2F%2Ftracker.example5.com%3A80&tr=udp%3A%2F%2Ftracker.example3.com%3A6969&tr=udp%3A%2F%2Ftracker.example2.com%3A80&tr=udp%3A%2F%2Ftracker.example1.com%3A1337' diff --git a/test/encode.js b/test/encode.js index 33681f1..fe6c51a 100644 --- a/test/encode.js +++ b/test/encode.js @@ -1,8 +1,8 @@ -const magnet = require('../') -const test = require('tape') +import { encode, decode } from '../index.js' +import test from 'tape' test('encode: complicated magnet uri (multiple xt params, and as, xs)', t => { - const uri = magnet.encode({ + const uri = encode({ xt: [ 'urn:ed2k:354B15E68FB8F36D7CD88FF94116CDC1', 'urn:tree:tiger:7N5OAMRNGMSSEUE3ORHOKWN4WWIQ5X4EBOOTLJY', @@ -59,11 +59,11 @@ test('encode: simple magnet uri using convenience names', t => { keywords: ['hey', 'hey2'] } - const result = magnet.encode(obj) + const result = encode(obj) t.equal(result, 'magnet:?xt=urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36&xt=urn:btmh:1220d2474e86c95b19b8bcfdb92bc12c9d44667cfa36d2474e86c95b19b8bcfdb92b&dn=Leaves+of+Grass+by+Walt+Whitman.epub&tr=udp%3A%2F%2Ftracker.example1.com%3A1337&tr=udp%3A%2F%2Ftracker.example2.com%3A80&tr=udp%3A%2F%2Ftracker.example3.com%3A6969&tr=udp%3A%2F%2Ftracker.example4.com%3A80&tr=udp%3A%2F%2Ftracker.example5.com%3A80&ws=http%3A%2F%2Fdownload.wikimedia.org%2Fmediawiki%2F1.15%2Fmediawiki-1.15.1.tar.gz&kt=hey+hey2') - t.deepEqual(magnet.decode(result), obj) + t.deepEqual(decode(result), obj) t.end() }) @@ -72,9 +72,9 @@ test('encode: using infoHashBuffer', t => { const obj = { infoHashBuffer: Buffer.from('d2474e86c95b19b8bcfdb92bc12c9d44667cfa36', 'hex') } - const result = magnet.encode(obj) + const result = encode(obj) t.equal(result, 'magnet:?xt=urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36') - t.deepEqual(magnet.decode(result), { + t.deepEqual(decode(result), { infoHashBuffer: Buffer.from('d2474e86c95b19b8bcfdb92bc12c9d44667cfa36', 'hex'), infoHash: 'd2474e86c95b19b8bcfdb92bc12c9d44667cfa36', xt: 'urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36', @@ -89,9 +89,9 @@ test('encode: using infoHashV2Buffer', t => { const obj = { infoHashV2Buffer: Buffer.from('d2474e86c95b19b8bcfdb92bc12c9d44667cfa36d2474e86c95b19b8bcfdb92b', 'hex') } - const result = magnet.encode(obj) + const result = encode(obj) t.equal(result, 'magnet:?xt=urn:btmh:1220d2474e86c95b19b8bcfdb92bc12c9d44667cfa36d2474e86c95b19b8bcfdb92b') - t.deepEqual(magnet.decode(result), { + t.deepEqual(decode(result), { infoHashV2: 'd2474e86c95b19b8bcfdb92bc12c9d44667cfa36d2474e86c95b19b8bcfdb92b', infoHashV2Buffer: Buffer.from('d2474e86c95b19b8bcfdb92bc12c9d44667cfa36d2474e86c95b19b8bcfdb92b', 'hex'), xt: 'urn:btmh:1220d2474e86c95b19b8bcfdb92bc12c9d44667cfa36d2474e86c95b19b8bcfdb92b', @@ -108,9 +108,9 @@ test('encode: select-only', t => { xt: 'urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36', so: [0, 2, 4, 6, 7, 8] } - const result = magnet.encode(obj) + const result = encode(obj) t.equal(result, 'magnet:?xt=urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36&so=0,2,4,6-8') - t.deepEqual(magnet.decode(result), { + t.deepEqual(decode(result), { xt: 'urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36', infoHash: 'd2474e86c95b19b8bcfdb92bc12c9d44667cfa36', infoHashBuffer: Buffer.from('d2474e86c95b19b8bcfdb92bc12c9d44667cfa36', 'hex'), @@ -128,9 +128,9 @@ test('encode: peer-address single value', t => { xt: 'urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36', 'x.pe': '123.213.32.10:47450' } - const result = magnet.encode(obj) + const result = encode(obj) t.equal(result, 'magnet:?xt=urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36&x.pe=123.213.32.10:47450') - t.deepEqual(magnet.decode(result), { + t.deepEqual(decode(result), { xt: 'urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36', 'x.pe': '123.213.32.10:47450', infoHash: 'd2474e86c95b19b8bcfdb92bc12c9d44667cfa36', @@ -147,9 +147,9 @@ test('encode: peer-address multiple values', t => { xt: 'urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36', 'x.pe': ['123.213.32.10:47450', '[2001:db8::2]:55013'] } - const result = magnet.encode(obj) + const result = encode(obj) t.equal(result, 'magnet:?xt=urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36&x.pe=123.213.32.10:47450&x.pe=[2001:db8::2]:55013') - t.deepEqual(magnet.decode(result), { + t.deepEqual(decode(result), { xt: 'urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36', 'x.pe': ['123.213.32.10:47450', '[2001:db8::2]:55013'], infoHash: 'd2474e86c95b19b8bcfdb92bc12c9d44667cfa36', @@ -166,7 +166,7 @@ test('encode: using publicKey', t => { const obj = { publicKey } - const result = magnet.encode(obj) + const result = encode(obj) t.equal(result, 'magnet:?xs=urn:btpk:9a36edf0988ddc1a0fc02d4e8652cce87a71aaac71fce936e650a597c0fb72e0') t.end() }) @@ -176,7 +176,7 @@ test('encode: using publicKeyBuffer', t => { const obj = { publicKeyBuffer } - const result = magnet.encode(obj) + const result = encode(obj) t.equal(result, 'magnet:?xs=urn:btpk:9a36edf0988ddc1a0fc02d4e8652cce87a71aaac71fce936e650a597c0fb72e0') t.end() })