Skip to content

Commit 7c3478e

Browse files
authored
feat: use ipjs for build and publish (#32)
BREAKING CHANGE! Public exports have all changed to drop .js * fix: migrate all exports * doc: document change
1 parent 84a43d6 commit 7c3478e

28 files changed

+134
-167
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ which can greatly reduce dependencies and bundle size.
1414

1515
```js
1616
import { create } from 'multiformats'
17-
import sha2 from 'multiformats/hashes/sha2.js'
17+
import sha2 from 'multiformats/hashes/sha2'
1818
import dagcbor from '@ipld/dag-cbor'
1919
const { multihash, multicodec, CID } = create()
2020
multihash.add(sha2)
@@ -31,7 +31,7 @@ with the `Block` API.
3131

3232
```js
3333
// Import basics package with dep-free codecs, hashes, and base encodings
34-
import multiformats from 'multiformats/basics.js'
34+
import multiformats from 'multiformats/basics'
3535
import dagcbor from '@ipld/dag-cbor'
3636
import { create } from '@ipld/block' // Yet to be released Block interface
3737
multiformats.multicodec.add(dagcbor)

bases/base64.js

Lines changed: 0 additions & 51 deletions
This file was deleted.

basics.js

Lines changed: 0 additions & 13 deletions
This file was deleted.

package.json

Lines changed: 28 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -5,96 +5,54 @@
55
"main": "index.js",
66
"type": "module",
77
"scripts": {
8-
"build": "npx @mikeal/limbo test/test-*.js",
9-
"prepublishOnly": "npm run build",
8+
"build": "npx ipjs@latest build --tests",
9+
"publish": "npx ipjs@latest build && cd dist && npm publish",
1010
"lint": "standard",
11-
"test:cjs": "rm -rf dist && npm run build && mocha dist/cjs-node/test/test-*.cjs && npm run test:cjs:browser",
11+
"test:cjs": "npm run build && mocha dist/cjs/node-test/test-*.js && npm run test:cjs:browser",
1212
"test:node": "hundreds mocha test/test-*.js",
13-
"test:cjs:browser": "polendina --cleanup dist/cjs-browser/test/test-*.js",
13+
"test:cjs:browser": "polendina --cleanup dist/cjs/browser-test/test-*.js",
1414
"test": "npm run lint && npm run test:node && npm run test:cjs",
1515
"coverage": "c8 --reporter=html mocha test/test-*.js && npx st -d coverage -p 8080"
1616
},
1717
"keywords": [],
1818
"author": "Mikeal Rogers <[email protected]> (https://www.mikealrogers.com/)",
1919
"license": "(Apache-2.0 AND MIT)",
20-
"browser": {
21-
"./bases/_base64-browser.js": "./dist/cjs-browser/bases/_base64-browser.js",
22-
"./bases/base16.js": "./dist/cjs-browser/bases/base16.js",
23-
"./bases/base32.js": "./dist/cjs-browser/bases/base32.js",
24-
"./bases/base58.js": "./dist/cjs-browser/bases/base58.js",
25-
"./bases/base64.js": "./dist/cjs-browser/bases/base64.js",
26-
"./basics.js": "./dist/cjs-browser/basics.js",
27-
"./bytes.js": "./dist/cjs-browser/bytes.js",
28-
"./cid.js": "./dist/cjs-browser/cid.js",
29-
"./codecs/json.js": "./dist/cjs-browser/codecs/json.js",
30-
"./codecs/raw.js": "./dist/cjs-browser/codecs/raw.js",
31-
"./hashes/sha2-browser.js": "./dist/cjs-browser/hashes/sha2-browser.js",
32-
"./index.js": "./dist/cjs-browser/index.js",
33-
"./": "./dist/cjs-browser/index.js",
34-
"./legacy.js": "./dist/cjs-browser/legacy.js"
35-
},
3620
"exports": {
3721
".": {
38-
"import": "./index.js",
39-
"require": "./dist/cjs-node/index.cjs"
40-
},
41-
"./index.js": {
42-
"import": "./index.js",
43-
"require": "./dist/cjs-node/index.cjs"
44-
},
45-
"./basics.js": {
46-
"import": "./basics.js",
47-
"require": "./dist/cjs-node/basics.cjs"
48-
},
49-
"./bytes.js": {
50-
"import": "./bytes.js",
51-
"require": "./dist/cjs-node/bytes.cjs"
52-
},
53-
"./cid.js": {
54-
"import": "./cid.js",
55-
"require": "./dist/cjs-node/cid.cjs"
22+
"import": "./src/index.js"
5623
},
57-
"./legacy.js": {
58-
"import": "./legacy.js",
59-
"require": "./dist/cjs-node/legacy.cjs"
24+
"./basics": {
25+
"import": "./src/basics-import.js",
26+
"browser": "./src/basics-browser.js"
6027
},
61-
"./bases/_base64.js": {
62-
"browser": "./bases/_base64-browser.js",
63-
"import": "./bases/_base64.js",
64-
"require": "./dist/cjs-node/bases/_base64.cjs"
28+
"./cid": {
29+
"import": "./src/cid.js"
6530
},
66-
"./bases/base16.js": {
67-
"import": "./bases/base16.js",
68-
"require": "./dist/cjs-node/bases/base16.cjs"
31+
"./legacy": {
32+
"import": "./src/legacy.js"
6933
},
70-
"./bases/base32.js": {
71-
"import": "./bases/base32.js",
72-
"require": "./dist/cjs-node/bases/base32.cjs"
34+
"./bases/base16": {
35+
"import": "./src/bases/base16.js"
7336
},
74-
"./bases/base58.js": {
75-
"import": "./bases/base58.js",
76-
"require": "./dist/cjs-node/bases/base58.cjs"
37+
"./bases/base32": {
38+
"import": "./src/bases/base32.js"
7739
},
78-
"./bases/base64.js": {
79-
"import": "./bases/base64.js",
80-
"require": "./dist/cjs-node/bases/base64.cjs"
40+
"./bases/base58": {
41+
"import": "./src/bases/base58.js"
8142
},
82-
"./hashes/sha2.js": {
83-
"browser": "./hashes/sha2-browser.js",
84-
"import": "./hashes/sha2.js",
85-
"require": "./dist/cjs-node/hashes/sha2.cjs"
43+
"./bases/base64": {
44+
"import": "./src/bases/base64-import.js",
45+
"browser": "./src/bases/base64-browser.js"
8646
},
87-
"./codecs/json.js": {
88-
"import": "./codecs/json.js",
89-
"require": "./dist/cjs-node/codecs/json.cjs"
47+
"./hashes/sha2": {
48+
"browser": "./src/hashes/sha2-browser.js",
49+
"import": "./src/hashes/sha2.js"
9050
},
91-
"./codecs/raw.js": {
92-
"import": "./codecs/raw.js",
93-
"require": "./dist/cjs-node/codecs/raw.cjs"
51+
"./codecs/json": {
52+
"import": "./src/codecs/json.js"
9453
},
95-
"./": {
96-
"import": "./",
97-
"require": "./dist/cjs-node/index.cjs"
54+
"./codecs/raw": {
55+
"import": "./src/codecs/raw.js"
9856
}
9957
},
10058
"devDependencies": {

bases/base16.js renamed to src/bases/base16.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { fromHex, toHex } from 'multiformats/bytes.js'
1+
import { fromHex, toHex } from '../bytes.js'
22

33
const create = function base16 (alphabet) {
44
return {
File renamed without changes.

bases/base58.js renamed to src/bases/base58.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import baseX from 'base-x'
2-
import { coerce } from 'multiformats/bytes.js'
2+
import { coerce } from '../bytes.js'
33
import { Buffer } from 'buffer'
44

55
const wrap = obj => ({
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/* globals btoa, atob */
2+
import create from './base64.js'
23
const encode = b => btoa([].reduce.call(b, (p, c) => p + String.fromCharCode(c), ''))
34
const decode = str => Uint8Array.from(atob(str), c => c.charCodeAt(0))
45
const __browser = true
5-
export { encode, decode, __browser }
6+
export default create({ encode, decode, __browser })
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import { coerce } from 'multiformats/bytes.js'
1+
import { coerce } from '../bytes.js'
2+
import create from './base64.js'
23
const encode = o => Buffer.from(o).toString('base64')
34
const decode = s => coerce(Buffer.from(s, 'base64'))
45
const __browser = false
5-
export { encode, decode, __browser }
6+
export default create({ encode, decode, __browser })

src/bases/base64.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
export default b64 => {
2+
const create = alphabet => {
3+
// The alphabet is only used to know:
4+
// 1. If padding is enabled (must contain '=')
5+
// 2. If the output must be url-safe (must contain '-' and '_')
6+
// 3. If the input of the output function is valid
7+
// The alphabets from RFC 4648 are always used.
8+
const padding = alphabet.indexOf('=') > -1
9+
const url = alphabet.indexOf('-') > -1 && alphabet.indexOf('_') > -1
10+
11+
return {
12+
encode (input) {
13+
let output = b64.encode(input)
14+
15+
if (url) {
16+
output = output.replace(/\+/g, '-').replace(/\//g, '_')
17+
}
18+
19+
const pad = output.indexOf('=')
20+
if (pad > 0 && !padding) {
21+
output = output.substring(0, pad)
22+
}
23+
24+
return output
25+
},
26+
decode (input) {
27+
for (const char of input) {
28+
if (alphabet.indexOf(char) < 0) {
29+
throw new Error('invalid base64 character')
30+
}
31+
}
32+
33+
return b64.decode(input)
34+
}
35+
}
36+
}
37+
38+
const base64 = create('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/')
39+
const base64pad = create('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=')
40+
const base64url = create('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_')
41+
const base64urlpad = create('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=')
42+
43+
const ex = [
44+
{ prefix: 'm', name: 'base64', ...base64 },
45+
{ prefix: 'M', name: 'base64pad', ...base64pad },
46+
{ prefix: 'u', name: 'base64url', ...base64url },
47+
{ prefix: 'U', name: 'base64urlpad', ...base64urlpad }
48+
]
49+
ex.b64 = b64
50+
return ex
51+
}

0 commit comments

Comments
 (0)