From f2029a6501a69e4fe98f817072efdedb3d81c1b4 Mon Sep 17 00:00:00 2001 From: Rod Vagg Date: Wed, 31 Mar 2021 17:19:35 +1100 Subject: [PATCH 1/9] Revert "fix: remove 'prepare' script" This reverts commit 88044bed255d1446fac8fee261939835f5c5e400. --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index b3ccc680..7c9296ee 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,8 @@ "test:ts": "npm run build:types && npm run test --prefix test/ts-use", "test": "npm run lint && npm run test:node && npm run test:cjs && npm run test:ts", "test:node-v12": "mocha test/test-*.js && npm run test:cjs", - "coverage": "c8 --reporter=html mocha test/test-*.js && npm_config_yes=true npx st -d coverage -p 8080" + "coverage": "c8 --reporter=html mocha test/test-*.js && npm_config_yes=true npx st -d coverage -p 8080", + "prepare": "tsc --build" }, "c8": { "exclude": [ From 8624dffc404ba41c7c06471f82dc9059cccda2d5 Mon Sep 17 00:00:00 2001 From: Rod Vagg Date: Wed, 31 Mar 2021 17:19:40 +1100 Subject: [PATCH 2/9] Revert "chore: git ignore test/ts-use/tsconfig.tsbuildinfo" This reverts commit 50e17c81fdb23881e22c98afe03daa5e76a63f64. --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 52ee7db2..9eb050f9 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,3 @@ node_modules .DS_Store yarn.lock types -test/ts-use/tsconfig.tsbuildinfo From 2f8dd17852da7aeaa76a4d1a0dfe779810f433c6 Mon Sep 17 00:00:00 2001 From: Rod Vagg Date: Wed, 31 Mar 2021 17:19:41 +1100 Subject: [PATCH 3/9] Revert "chore: build:copy script to ensure dist/ setup" This reverts commit 7aa0d8e8200904a13a2dd9a5bfa3e7c996e72dd5. --- package.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 7c9296ee..d3847cab 100644 --- a/package.json +++ b/package.json @@ -7,9 +7,8 @@ "type": "module", "scripts": { "build": "npm run build:js && npm run build:types", - "build:js": "npm_config_yes=true ipjs build --tests --main && npm run build:copy", - "build:copy": "cp -a tsconfig.json src vendor test dist/", - "build:types": "npm run build:copy && cd dist && tsc --build", + "build:js": "npm_config_yes=true ipjs build --tests --main", + "build:types": "cp tsconfig.json dist && cp -a src vendor dist/ && cd dist && tsc --build", "build:vendor": "npm run build:vendor:varint && npm run build:vendor:base-x", "build:vendor:varint": "npx brrp -x varint > vendor/varint.js", "build:vendor:base-x": "npx brrp -x @multiformats/base-x > vendor/base-x.js", From adf4239de0bfb685a161709297b1dc101f9dc613 Mon Sep 17 00:00:00 2001 From: Rod Vagg Date: Wed, 31 Mar 2021 17:19:42 +1100 Subject: [PATCH 4/9] Revert "fix: type mapping" This reverts commit 761849124c53fbecf71812d2d843b7c4e196b05e. --- .gitignore | 1 - package.json | 12 ++++-------- test/ts-use/tsconfig.json | 4 +--- tsconfig.json | 3 +-- 4 files changed, 6 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index 9eb050f9..594cec7c 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,3 @@ package-lock.json node_modules .DS_Store yarn.lock -types diff --git a/package.json b/package.json index d3847cab..e8766581 100644 --- a/package.json +++ b/package.json @@ -8,21 +8,20 @@ "scripts": { "build": "npm run build:js && npm run build:types", "build:js": "npm_config_yes=true ipjs build --tests --main", - "build:types": "cp tsconfig.json dist && cp -a src vendor dist/ && cd dist && tsc --build", + "build:types": "cp tsconfig.json dist && cp -a src vendor dist/ && cd dist && tsc --emitDeclarationOnly --declarationDir types", "build:vendor": "npm run build:vendor:varint && npm run build:vendor:base-x", "build:vendor:varint": "npx brrp -x varint > vendor/varint.js", "build:vendor:base-x": "npx brrp -x @multiformats/base-x > vendor/base-x.js", "publish": "npm_config_yes=true ipjs publish", "lint": "standard", - "check": "tsc --build --noErrorTruncation", + "check": "tsc --noEmit --noErrorTruncation", "test:cjs": "npm run build:js && mocha dist/cjs/node-test/test-*.js && npm run test:cjs:browser", "test:node": "hundreds mocha test/test-*.js", "test:cjs:browser": "polendina --page --worker --serviceworker --cleanup dist/cjs/browser-test/test-*.js", "test:ts": "npm run build:types && npm run test --prefix test/ts-use", "test": "npm run lint && npm run test:node && npm run test:cjs && npm run test:ts", "test:node-v12": "mocha test/test-*.js && npm run test:cjs", - "coverage": "c8 --reporter=html mocha test/test-*.js && npm_config_yes=true npx st -d coverage -p 8080", - "prepare": "tsc --build" + "coverage": "c8 --reporter=html mocha test/test-*.js && npm_config_yes=true npx st -d coverage -p 8080" }, "c8": { "exclude": [ @@ -120,10 +119,7 @@ "homepage": "https://github.com/multiformats/js-multiformats#readme", "typesVersions": { "*": { - "*": [ - "types/*" - ], - "types/*": [ + "multiformats/*": [ "types/*" ] } diff --git a/test/ts-use/tsconfig.json b/test/ts-use/tsconfig.json index ff147598..d73a2b15 100644 --- a/test/ts-use/tsconfig.json +++ b/test/ts-use/tsconfig.json @@ -1,9 +1,7 @@ { "compilerOptions": { "strict": true, - "moduleResolution": "node", "noImplicitAny": true, - "skipLibCheck": true, - "incremental": true + "skipLibCheck": true } } diff --git a/tsconfig.json b/tsconfig.json index 2634e3f1..4ce54b0e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -20,8 +20,7 @@ "moduleResolution": "node", "declaration": true, "declarationMap": true, - "emitDeclarationOnly": true, - "outDir": "types", + "outDir": "dist", "skipLibCheck": true, "stripInternal": true, "resolveJsonModule": true, From 6f425b810a6b439a9378304a74948cc314db62df Mon Sep 17 00:00:00 2001 From: Rod Vagg Date: Wed, 31 Mar 2021 17:19:43 +1100 Subject: [PATCH 5/9] Revert "fix: types mapping" This reverts commit c07a22872d15778669e0c014650a099b92667e32. --- package.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e8766581..6bf540ac 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,6 @@ "version": "0.0.0-dev", "description": "Interface for multihash, multicodec, multibase and CID", "main": "./src/index.js", - "types": "./types/index.d.ts", "type": "module", "scripts": { "build": "npm run build:js && npm run build:types", @@ -119,8 +118,11 @@ "homepage": "https://github.com/multiformats/js-multiformats#readme", "typesVersions": { "*": { - "multiformats/*": [ + "*": [ "types/*" + ], + "cjs/src/index.js": [ + "types/index.d.ts" ] } } From b82bc9fbe3d208ce365379699bb3242e258671c8 Mon Sep 17 00:00:00 2001 From: Rod Vagg Date: Wed, 31 Mar 2021 17:19:43 +1100 Subject: [PATCH 6/9] Revert "feat!: publish with "main", distribute src & TS map to src" This reverts commit bbf5fa4bdf47676eee9d43a636ebbcc7e4fb074d. --- package.json | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 6bf540ac..ab701515 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,8 @@ "type": "module", "scripts": { "build": "npm run build:js && npm run build:types", - "build:js": "npm_config_yes=true ipjs build --tests --main", - "build:types": "cp tsconfig.json dist && cp -a src vendor dist/ && cd dist && tsc --emitDeclarationOnly --declarationDir types", + "build:js": "npm_config_yes=true ipjs build --tests", + "build:types": "tsc --emitDeclarationOnly --declarationDir dist/types", "build:vendor": "npm run build:vendor:varint && npm run build:vendor:base-x", "build:vendor:varint": "npx brrp -x varint > vendor/varint.js", "build:vendor:base-x": "npx brrp -x @multiformats/base-x > vendor/base-x.js", @@ -120,9 +120,6 @@ "*": { "*": [ "types/*" - ], - "cjs/src/index.js": [ - "types/index.d.ts" ] } } From db659118e05a557b9256e9b17fac47600d8e7c6b Mon Sep 17 00:00:00 2001 From: Rod Vagg Date: Wed, 31 Mar 2021 17:19:44 +1100 Subject: [PATCH 7/9] Revert "chore: update deps" This reverts commit 96561fc09a2801618625da327d518ac7b3fcfb18. --- package.json | 21 +++++++++++---------- src/bases/base32.js | 2 +- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index ab701515..5e7ed5f0 100644 --- a/package.json +++ b/package.json @@ -84,16 +84,16 @@ } }, "devDependencies": { - "@types/node": "^14.14.37", - "@typescript-eslint/eslint-plugin": "^4.20.0", - "@typescript-eslint/parser": "^4.20.0", - "c8": "^7.6.0", + "@types/node": "14.14.3", + "@typescript-eslint/eslint-plugin": "^4.6.0", + "@typescript-eslint/parser": "^4.6.0", + "c8": "^7.3.5", "hundreds": "0.0.9", - "ipjs": "^5.0.0", - "mocha": "^8.3.2", + "ipjs": "^3.4.4", + "mocha": "^8.2.0", "polendina": "^1.1.0", - "standard": "^16.0.3", - "typescript": "^4.2.3" + "standard": "^15.0.0", + "typescript": "^4.0.3" }, "standard": { "ignore": [ @@ -102,8 +102,9 @@ ] }, "dependencies": { - "buffer": "^6.0.3", - "cids": "^1.1.6" + "buffer": "^5.6.1", + "cids": "^1.0.2", + "lodash.transform": "^4.6.0" }, "directories": { "test": "test" diff --git a/src/bases/base32.js b/src/bases/base32.js index 19edce27..0857a23c 100644 --- a/src/bases/base32.js +++ b/src/bases/base32.js @@ -5,7 +5,7 @@ import { withAlphabet } from './base.js' * @param {input} alphabet */ function decode (input, alphabet) { - input = input.replace(/=/g, '') + input = input.replace(new RegExp('=', 'g'), '') const length = input.length let bits = 0 From 3dc8b8a831b88e43cc3f9c070680d20fb160f095 Mon Sep 17 00:00:00 2001 From: Rod Vagg Date: Wed, 31 Mar 2021 17:19:45 +1100 Subject: [PATCH 8/9] Revert "feat!: named exports instead of default exports" This reverts commit cea9063c7c2b3f76bfd7b69efd7ca5c54eb613be. --- README.md | 4 ++-- src/basics.js | 4 ++-- src/bytes.js | 3 +-- src/cid.js | 2 +- src/codecs/codec.js | 51 +++++++++++++++++++++++++++++++++++------ src/codecs/interface.ts | 5 +--- src/codecs/json.js | 2 +- src/codecs/raw.js | 12 +++++++--- src/hashes/identity.js | 2 +- src/index.js | 2 +- src/legacy.js | 5 ++-- test/test-block.js | 2 +- test/test-legacy.js | 8 +++---- test/test-multicodec.js | 4 ++-- test/test-multihash.js | 2 +- test/ts-use/src/main.ts | 2 +- 16 files changed, 75 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index 36c55794..37ba16df 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,8 @@ Library provides implementations for most basics and many others can be found in ## Interfaces ```js -import { CID } from 'multiformats/cid' -import * as json from 'multiformats/codecs/json' +import CID from 'multiformats/cid' +import json from 'multiformats/codecs/json' import { sha256 } from 'multiformats/hashes/sha2' const bytes = json.encode({ hello: 'world' }) diff --git a/src/basics.js b/src/basics.js index 8c183b3d..66974a19 100644 --- a/src/basics.js +++ b/src/basics.js @@ -4,8 +4,8 @@ import * as base32 from './bases/base32.js' import * as base58 from './bases/base58.js' import * as sha2 from './hashes/sha2.js' -import * as raw from './codecs/raw.js' -import * as json from './codecs/json.js' +import raw from './codecs/raw.js' +import json from './codecs/json.js' import { CID, hasher, digest, varint, bytes } from './index.js' diff --git a/src/bytes.js b/src/bytes.js index a10ce3ec..6774d44a 100644 --- a/src/bytes.js +++ b/src/bytes.js @@ -33,8 +33,7 @@ const equals = (aa, bb) => { } /** - * @param {ArrayBufferView|ArrayBuffer|Uint8Array} o - * @returns {Uint8Array} + * @param {ArrayBufferView|ArrayBuffer} o */ const coerce = o => { if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') return o diff --git a/src/cid.js b/src/cid.js index 57b47fa0..cd5fbb54 100644 --- a/src/cid.js +++ b/src/cid.js @@ -18,7 +18,7 @@ import { coerce } from './bytes.js' * @typedef {import('./bases/interface').MultibaseDecoder} MultibaseDecoder */ -export class CID { +export default class CID { /** * @param {0|1} version * @param {number} code diff --git a/src/codecs/codec.js b/src/codecs/codec.js index c1bd94aa..5dd08675 100644 --- a/src/codecs/codec.js +++ b/src/codecs/codec.js @@ -10,14 +10,9 @@ * @param {Code} options.code * @param {(data:T) => Uint8Array} options.encode * @param {(bytes:Uint8Array) => T} options.decode - * @returns {import('./interface').BlockCodec} */ -export const codec = ({ name, code, decode, encode }) => { - const decoder = new Decoder(name, code, decode) - const encoder = new Encoder(name, code, encode) - - return { name, code, decode, encode, decoder, encoder } -} +export const codec = ({ name, code, decode, encode }) => + new Codec(name, code, encode, decode) /** * @template {number} Code @@ -69,3 +64,45 @@ export class Decoder { this.decode = decode } } + +/** + * @template {number} Code + * @template T + * @typedef {import('./interface').BlockCodec} BlockCodec + */ + +/** + * @class + * @template {string} Name + * @template {number} Code + * @template T + * @implements {BlockCodec} + */ +export class Codec { + /** + * @param {Name} name + * @param {Code} code + * @param {(data:T) => Uint8Array} encode + * @param {(bytes:Uint8Array) => T} decode + */ + constructor (name, code, encode, decode) { + this.name = name + this.code = code + this.encode = encode + this.decode = decode + } + + get decoder () { + const { name, code, decode } = this + const decoder = new Decoder(name, code, decode) + Object.defineProperty(this, 'decoder', { value: decoder }) + return decoder + } + + get encoder () { + const { name, code, encode } = this + const encoder = new Encoder(name, code, encode) + Object.defineProperty(this, 'encoder', { value: encoder }) + return encoder + } +} diff --git a/src/codecs/interface.ts b/src/codecs/interface.ts index e7a98b52..3474ff38 100644 --- a/src/codecs/interface.ts +++ b/src/codecs/interface.ts @@ -20,10 +20,7 @@ export interface BlockDecoder { * separate those capabilties as sender requires encoder and receiver * requires decoder. */ -export interface BlockCodec extends BlockEncoder, BlockDecoder { - encoder: BlockEncoder, - decoder: BlockDecoder -} +export interface BlockCodec extends BlockEncoder, BlockDecoder { } // This just a hack to retain type information abouth the data that diff --git a/src/codecs/json.js b/src/codecs/json.js index 09ea2a09..c0bc11de 100644 --- a/src/codecs/json.js +++ b/src/codecs/json.js @@ -2,7 +2,7 @@ import { codec } from './codec.js' -export const { name, code, decode, encode, decoder, encoder } = codec({ +export default codec({ name: 'json', code: 0x0200, encode: json => new TextEncoder().encode(JSON.stringify(json)), diff --git a/src/codecs/raw.js b/src/codecs/raw.js index f2ee233f..b17fe69c 100644 --- a/src/codecs/raw.js +++ b/src/codecs/raw.js @@ -3,9 +3,15 @@ import { coerce } from '../bytes.js' import { codec } from './codec.js' -export const { name, code, decode, encode, decoder, encoder } = codec({ +/** + * @param {Uint8Array} bytes + * @returns {Uint8Array} + */ +const raw = (bytes) => coerce(bytes) + +export default codec({ name: 'raw', code: 85, - decode: coerce, - encode: coerce + decode: raw, + encode: raw }) diff --git a/src/hashes/identity.js b/src/hashes/identity.js index 1a928578..700cb7cc 100644 --- a/src/hashes/identity.js +++ b/src/hashes/identity.js @@ -3,7 +3,7 @@ import { from } from './hasher.js' import { coerce } from '../bytes.js' -export const identity = from({ +export default from({ name: 'identity', code: 0x0, encode: (input) => coerce(input) diff --git a/src/index.js b/src/index.js index 15931971..989edc65 100644 --- a/src/index.js +++ b/src/index.js @@ -1,4 +1,4 @@ -import { CID } from './cid.js' +import CID from './cid.js' import * as varint from './varint.js' import * as bytes from './bytes.js' import * as hasher from './hashes/hasher.js' diff --git a/src/legacy.js b/src/legacy.js index 9ce81e4e..c179e8e1 100644 --- a/src/legacy.js +++ b/src/legacy.js @@ -1,7 +1,7 @@ import OldCID from 'cids' import * as bytes from './bytes.js' import { Buffer } from 'buffer' -import { CID } from './cid.js' +import CID from './cid.js' /** * @template {number} Code @@ -11,7 +11,7 @@ import { CID } from './cid.js' * @param {Object} options.hashes */ -export const legacy = (codec, { hashes }) => { +const legacy = (codec, { hashes }) => { /** * @param {*} obj */ @@ -139,6 +139,7 @@ export const legacy = (codec, { hashes }) => { return { defaultHashAlg, codec: codec.code, util, resolver } } +export default legacy /** * @typedef {import('./hashes/interface').MultihashHasher} MultihashHasher */ diff --git a/test/test-block.js b/test/test-block.js index a7be1999..8521b170 100644 --- a/test/test-block.js +++ b/test/test-block.js @@ -1,5 +1,5 @@ /* globals describe, it */ -import * as codec from 'multiformats/codecs/json' +import codec from 'multiformats/codecs/json' import { sha256 as hasher } from 'multiformats/hashes/sha2' import * as main from 'multiformats/block' import { CID, bytes } from 'multiformats' diff --git a/test/test-legacy.js b/test/test-legacy.js index 4e0468d0..e856cbc8 100644 --- a/test/test-legacy.js +++ b/test/test-legacy.js @@ -1,12 +1,12 @@ /* globals before, describe, it */ import { Buffer } from 'buffer' import assert from 'assert' -import { legacy } from 'multiformats/legacy' -import * as rawCodec from 'multiformats/codecs/raw' -import * as jsonCodec from 'multiformats/codecs/json' +import legacy from 'multiformats/legacy' +import rawCodec from 'multiformats/codecs/raw' +import jsonCodec from 'multiformats/codecs/json' import { sha256, sha512 } from 'multiformats/hashes/sha2' import { codec } from 'multiformats/codecs/codec' -import { CID } from 'multiformats/cid' +import CID from 'multiformats/cid' const same = assert.deepStrictEqual const test = it diff --git a/test/test-multicodec.js b/test/test-multicodec.js index 38668b69..3ab9b44a 100644 --- a/test/test-multicodec.js +++ b/test/test-multicodec.js @@ -1,8 +1,8 @@ /* globals describe, it */ import * as bytes from '../src/bytes.js' import assert from 'assert' -import * as raw from 'multiformats/codecs/raw' -import * as json from 'multiformats/codecs/json' +import raw from 'multiformats/codecs/raw' +import json from 'multiformats/codecs/json' import { codec } from 'multiformats/codecs/codec' const same = assert.deepStrictEqual const test = it diff --git a/test/test-multihash.js b/test/test-multihash.js index f11c8135..6ebef024 100644 --- a/test/test-multihash.js +++ b/test/test-multihash.js @@ -5,7 +5,7 @@ import valid from './fixtures/valid-multihash.js' import invalid from './fixtures/invalid-multihash.js' import crypto from 'crypto' import { sha256, sha512, __browser } from 'multiformats/hashes/sha2' -import { identity } from 'multiformats/hashes/identity' +import identity from 'multiformats/hashes/identity' import { decode as decodeDigest, create as createDigest } from 'multiformats/hashes/digest' const test = it const encode = name => data => coerce(crypto.createHash(name).update(data).digest()) diff --git a/test/ts-use/src/main.ts b/test/ts-use/src/main.ts index d57c5688..cbb376e9 100644 --- a/test/ts-use/src/main.ts +++ b/test/ts-use/src/main.ts @@ -1,6 +1,6 @@ import * as Block from 'multiformats/block' import { sha256 } from 'multiformats/hashes/sha2' -import * as json from 'multiformats/codecs/json' +import json from 'multiformats/codecs/json' const main = async () => { const block = await Block.encode({ From e919db177cb823ec2b45cb7ad8d8e87aa8f03f1f Mon Sep 17 00:00:00 2001 From: Rod Vagg Date: Wed, 31 Mar 2021 17:20:16 +1100 Subject: [PATCH 9/9] chore: bump for patch publish --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 37ba16df..58e33bba 100644 --- a/README.md +++ b/README.md @@ -196,3 +196,4 @@ Licensed under either of ### Contribution Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions. +