@leofcoin/codec-format-interface 1.7.14 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -10
- package/exports/README.md +8 -0
- package/exports/basic-interface.d.ts +4 -0
- package/exports/basic-interface.js +68 -14
- package/exports/basic-interface.js.map +1 -0
- package/exports/cjs/basic-interface.js +185 -0
- package/exports/cjs/basic-interface.js.map +1 -0
- package/exports/cjs/codec-format-interface.js +197 -0
- package/exports/cjs/codec-format-interface.js.map +1 -0
- package/exports/cjs/codec-hash.js +147 -0
- package/exports/cjs/codec-hash.js.map +1 -0
- package/exports/cjs/codec.js +114 -0
- package/exports/cjs/codec.js.map +1 -0
- package/exports/cjs/index.js +41 -0
- package/exports/cjs/index.js.map +1 -0
- package/exports/codec-format-interface.d.ts +5 -1
- package/exports/codec-format-interface.js +46 -8
- package/exports/codec-format-interface.js.map +1 -0
- package/exports/codec-hash.d.ts +6 -6
- package/exports/codec-hash.js +54 -58
- package/exports/codec-hash.js.map +1 -0
- package/exports/codec.js +1 -0
- package/exports/codec.js.map +1 -0
- package/exports/index.d.ts +15 -0
- package/exports/index.js +14 -0
- package/exports/index.js.map +1 -0
- package/exports/json-interface.d.ts +1 -1
- package/package.json +4 -3
package/exports/codec-hash.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import varint from 'varint';
|
|
2
|
-
import
|
|
2
|
+
import { createSHA512, createSHA384, createSHA256, createSHA224, createSHA1 } from 'hash-wasm';
|
|
3
|
+
import BasicInterface from './basic-interface.js';
|
|
3
4
|
import Codec from './codec.js';
|
|
4
5
|
import '@vandeurenglenn/base32';
|
|
5
6
|
import '@vandeurenglenn/base58';
|
|
@@ -8,11 +9,36 @@ import '@vandeurenglenn/proto-array';
|
|
|
8
9
|
import '@vandeurenglenn/typed-array-utils';
|
|
9
10
|
import '@leofcoin/codecs';
|
|
10
11
|
|
|
12
|
+
const createHasher = (hashVariant) => {
|
|
13
|
+
switch (hashVariant) {
|
|
14
|
+
case 1:
|
|
15
|
+
return createSHA1();
|
|
16
|
+
case 224:
|
|
17
|
+
return createSHA224();
|
|
18
|
+
case 256:
|
|
19
|
+
return createSHA256();
|
|
20
|
+
case 384:
|
|
21
|
+
return createSHA384();
|
|
22
|
+
case 512:
|
|
23
|
+
return createSHA512();
|
|
24
|
+
default:
|
|
25
|
+
throw new Error(`unsupported hash variant: ${hashVariant}`);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const digestBuffer = async (hashVariant, buffer) => {
|
|
29
|
+
const view = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);
|
|
30
|
+
const hasher = await createHasher(hashVariant);
|
|
31
|
+
hasher.init();
|
|
32
|
+
hasher.update(view);
|
|
33
|
+
const digest = hasher.digest('binary');
|
|
34
|
+
return digest instanceof Uint8Array ? digest : new Uint8Array(digest);
|
|
35
|
+
};
|
|
11
36
|
class CodecHash extends BasicInterface {
|
|
12
37
|
codec;
|
|
13
38
|
discoCodec;
|
|
14
39
|
size;
|
|
15
|
-
|
|
40
|
+
codecs;
|
|
41
|
+
constructor(options = { name: 'disco-hash', codecs: {} }) {
|
|
16
42
|
super();
|
|
17
43
|
if (options?.name)
|
|
18
44
|
this.name = options.name;
|
|
@@ -20,33 +46,24 @@ class CodecHash extends BasicInterface {
|
|
|
20
46
|
this.name = 'disco-hash';
|
|
21
47
|
if (options?.codecs)
|
|
22
48
|
this.codecs = options.codecs;
|
|
23
|
-
return this.init(buffer);
|
|
24
49
|
}
|
|
25
50
|
async init(uint8Array) {
|
|
26
51
|
if (uint8Array) {
|
|
27
|
-
if (uint8Array instanceof Uint8Array) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
52
|
+
if (!(uint8Array instanceof Uint8Array)) {
|
|
53
|
+
throw new Error('CodecHash only supports Uint8Array input');
|
|
54
|
+
}
|
|
55
|
+
// For large buffers, only check first bytes for codec prefix
|
|
56
|
+
// Codec prefixes are small (varint encoded), so 100 bytes is more than enough
|
|
57
|
+
const checkBuffer = uint8Array.length > 100 ? uint8Array.subarray(0, 100) : uint8Array;
|
|
58
|
+
this.discoCodec = new Codec(checkBuffer);
|
|
59
|
+
const name = this.discoCodec.name;
|
|
60
|
+
if (name) {
|
|
61
|
+
this.name = name;
|
|
62
|
+
this.decode(uint8Array);
|
|
37
63
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
await this.fromHex(uint8Array);
|
|
41
|
-
if (this.isBase32(uint8Array))
|
|
42
|
-
await this.fromBs32(uint8Array);
|
|
43
|
-
else if (this.isBase58(uint8Array))
|
|
44
|
-
await this.fromBs58(uint8Array);
|
|
45
|
-
else
|
|
46
|
-
throw new Error(`unsupported string ${uint8Array}`);
|
|
64
|
+
else {
|
|
65
|
+
await this.encode(uint8Array);
|
|
47
66
|
}
|
|
48
|
-
else if (typeof uint8Array === 'object')
|
|
49
|
-
await this.fromJSON(uint8Array);
|
|
50
67
|
}
|
|
51
68
|
return this;
|
|
52
69
|
}
|
|
@@ -66,34 +83,19 @@ class CodecHash extends BasicInterface {
|
|
|
66
83
|
get hash() {
|
|
67
84
|
return this.encoded;
|
|
68
85
|
}
|
|
69
|
-
fromJSON(json) {
|
|
70
|
-
return this.encode(new TextEncoder().encode(JSON.stringify(json, jsonStringifyBigInt)));
|
|
71
|
-
}
|
|
72
86
|
async encode(buffer, name) {
|
|
73
87
|
if (!this.name && name)
|
|
74
88
|
this.name = name;
|
|
75
89
|
if (!buffer)
|
|
76
|
-
buffer
|
|
90
|
+
throw new Error('buffer is required for encoding');
|
|
77
91
|
this.discoCodec = new Codec(this.name);
|
|
78
|
-
this.discoCodec.fromName(this.name);
|
|
79
92
|
let hashAlg = this.discoCodec.hashAlg;
|
|
80
93
|
const hashVariant = Number(hashAlg.split('-')[hashAlg.split('-').length - 1]);
|
|
81
94
|
if (hashAlg.includes('dbl')) {
|
|
82
95
|
hashAlg = hashAlg.replace('dbl-', '');
|
|
83
|
-
|
|
84
|
-
// await hasher.init()
|
|
85
|
-
// hasher.update(buffer)
|
|
86
|
-
// buffer = hasher.digest('binary')
|
|
87
|
-
buffer = await crypto.subtle.digest(`SHA-${hashVariant}`, buffer);
|
|
88
|
-
}
|
|
89
|
-
// const hasher = await createKeccak(hashVariant)
|
|
90
|
-
// await hasher.init()
|
|
91
|
-
// hasher.update(buffer)
|
|
92
|
-
// this.digest = hasher.digest('binary')
|
|
93
|
-
this.digest = await crypto.subtle.digest(`SHA-${hashVariant}`, buffer);
|
|
94
|
-
if (this.digest instanceof ArrayBuffer) {
|
|
95
|
-
this.digest = new Uint8Array(this.digest);
|
|
96
|
+
buffer = await digestBuffer(hashVariant, buffer);
|
|
96
97
|
}
|
|
98
|
+
this.digest = await digestBuffer(hashVariant, buffer);
|
|
97
99
|
this.size = this.digest.length;
|
|
98
100
|
this.codec = this.discoCodec.encode();
|
|
99
101
|
this.codec = this.discoCodec.codecBuffer;
|
|
@@ -104,23 +106,16 @@ class CodecHash extends BasicInterface {
|
|
|
104
106
|
return this.encoded;
|
|
105
107
|
}
|
|
106
108
|
async validate(buffer) {
|
|
107
|
-
if (
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
await this.encode(buffer);
|
|
114
|
-
}
|
|
109
|
+
if (!(buffer instanceof Uint8Array)) {
|
|
110
|
+
throw new Error('CodecHash only supports Uint8Array input');
|
|
111
|
+
}
|
|
112
|
+
const codec = varint.decode(buffer);
|
|
113
|
+
if (this.codecs[codec]) {
|
|
114
|
+
this.decode(buffer);
|
|
115
115
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
this.fromHex(buffer);
|
|
119
|
-
if (this.isBase32(buffer))
|
|
120
|
-
this.fromBs32(buffer);
|
|
116
|
+
else {
|
|
117
|
+
await this.encode(buffer);
|
|
121
118
|
}
|
|
122
|
-
if (typeof buffer === 'object')
|
|
123
|
-
this.fromJSON(buffer);
|
|
124
119
|
}
|
|
125
120
|
decode(buffer) {
|
|
126
121
|
this.encoded = buffer;
|
|
@@ -131,7 +126,7 @@ class CodecHash extends BasicInterface {
|
|
|
131
126
|
this.size = varint.decode(buffer);
|
|
132
127
|
this.digest = buffer.slice(varint.decode.bytes);
|
|
133
128
|
if (this.digest.length !== this.size) {
|
|
134
|
-
throw new Error(`hash length inconsistent: 0x${this.encoded.toString(
|
|
129
|
+
throw new Error(`hash length inconsistent: 0x${this.encoded.toString()}`);
|
|
135
130
|
}
|
|
136
131
|
// const discoCodec = new Codec(codec, this.codecs)
|
|
137
132
|
this.name = this.discoCodec.name;
|
|
@@ -147,3 +142,4 @@ class CodecHash extends BasicInterface {
|
|
|
147
142
|
}
|
|
148
143
|
|
|
149
144
|
export { CodecHash as default };
|
|
145
|
+
//# sourceMappingURL=codec-hash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec-hash.js","sources":["../src/codec-hash.ts"],"sourcesContent":["import varint from 'varint'\nimport { createSHA1, createSHA224, createSHA256, createSHA384, createSHA512 } from 'hash-wasm'\nimport BasicInterface from './basic-interface.js'\nimport Codec from './codec.js'\n\nconst createHasher = (hashVariant: number) => {\n switch (hashVariant) {\n case 1:\n return createSHA1()\n case 224:\n return createSHA224()\n case 256:\n return createSHA256()\n case 384:\n return createSHA384()\n case 512:\n return createSHA512()\n default:\n throw new Error(`unsupported hash variant: ${hashVariant}`)\n }\n}\n\nconst digestBuffer = async (\n hashVariant: number,\n buffer: ArrayBuffer | Uint8Array\n): Promise<Uint8Array> => {\n const view = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer)\n const hasher = await createHasher(hashVariant)\n hasher.init()\n hasher.update(view)\n const digest = hasher.digest('binary')\n return digest instanceof Uint8Array ? digest : new Uint8Array(digest)\n}\n\ntype CodecHashOptions = {\n name?: string\n codecs?: object\n}\n\nexport default class CodecHash extends BasicInterface {\n codec: Uint8Array\n discoCodec: Codec\n size: number\n codecs: object\n constructor(options: CodecHashOptions = { name: 'disco-hash', codecs: {} }) {\n super()\n if (options?.name) this.name = options.name\n else this.name = 'disco-hash'\n if (options?.codecs) this.codecs = options.codecs\n }\n\n async init(uint8Array: Uint8Array) {\n if (uint8Array) {\n if (!(uint8Array instanceof Uint8Array)) {\n throw new Error('CodecHash only supports Uint8Array input')\n }\n // For large buffers, only check first bytes for codec prefix\n // Codec prefixes are small (varint encoded), so 100 bytes is more than enough\n const checkBuffer = uint8Array.length > 100 ? uint8Array.subarray(0, 100) : uint8Array\n this.discoCodec = new Codec(checkBuffer)\n const name = this.discoCodec.name\n\n if (name) {\n this.name = name\n this.decode(uint8Array)\n } else {\n await this.encode(uint8Array)\n }\n }\n return this\n }\n get prefix() {\n const length = this.length\n const uint8Array = new Uint8Array(length.length + this.discoCodec.codecBuffer.length)\n uint8Array.set(length)\n uint8Array.set(this.discoCodec.codecBuffer, length.length)\n\n return uint8Array\n }\n\n get length() {\n return varint.encode(this.size)\n }\n\n get buffer() {\n return this.encoded\n }\n\n get hash() {\n return this.encoded\n }\n\n async encode(buffer, name?) {\n if (!this.name && name) this.name = name\n if (!buffer) throw new Error('buffer is required for encoding')\n this.discoCodec = new Codec(this.name)\n let hashAlg = this.discoCodec.hashAlg\n const hashVariant = Number(hashAlg.split('-')[hashAlg.split('-').length - 1])\n\n if (hashAlg.includes('dbl')) {\n hashAlg = hashAlg.replace('dbl-', '')\n buffer = await digestBuffer(hashVariant, buffer)\n }\n this.digest = await digestBuffer(hashVariant, buffer)\n\n this.size = this.digest.length\n\n this.codec = this.discoCodec.encode()\n this.codec = this.discoCodec.codecBuffer\n const uint8Array = new Uint8Array(this.digest.length + this.prefix.length)\n uint8Array.set(this.prefix)\n uint8Array.set(this.digest, this.prefix.length)\n\n this.encoded = uint8Array\n\n return this.encoded\n }\n\n async validate(buffer: Uint8Array) {\n if (!(buffer instanceof Uint8Array)) {\n throw new Error('CodecHash only supports Uint8Array input')\n }\n const codec = varint.decode(buffer)\n if (this.codecs[codec]) {\n this.decode(buffer)\n } else {\n await this.encode(buffer)\n }\n }\n\n decode(buffer) {\n this.encoded = buffer\n const codec = varint.decode(buffer)\n\n this.discoCodec = new Codec(codec, this.codecs)\n // TODO: validate codec\n buffer = buffer.slice(varint.decode.bytes)\n this.size = varint.decode(buffer)\n this.digest = buffer.slice(varint.decode.bytes)\n if (this.digest.length !== this.size) {\n throw new Error(`hash length inconsistent: 0x${this.encoded.toString()}`)\n }\n\n // const discoCodec = new Codec(codec, this.codecs)\n\n this.name = this.discoCodec.name\n\n this.size = this.digest.length\n\n return {\n codec: this.codec,\n name: this.name,\n size: this.size,\n length: this.length,\n digest: this.digest\n }\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAKA,MAAM,YAAY,GAAG,CAAC,WAAmB,KAAI;IAC3C,QAAQ,WAAW;AACjB,QAAA,KAAK,CAAC;YACJ,OAAO,UAAU,EAAE;AACrB,QAAA,KAAK,GAAG;YACN,OAAO,YAAY,EAAE;AACvB,QAAA,KAAK,GAAG;YACN,OAAO,YAAY,EAAE;AACvB,QAAA,KAAK,GAAG;YACN,OAAO,YAAY,EAAE;AACvB,QAAA,KAAK,GAAG;YACN,OAAO,YAAY,EAAE;AACvB,QAAA;AACE,YAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,WAAW,CAAA,CAAE,CAAC;;AAEjE,CAAC;AAED,MAAM,YAAY,GAAG,OACnB,WAAmB,EACnB,MAAgC,KACT;AACvB,IAAA,MAAM,IAAI,GAAG,MAAM,YAAY,UAAU,GAAG,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC;AAC3E,IAAA,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC;IAC9C,MAAM,CAAC,IAAI,EAAE;AACb,IAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IACnB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;AACtC,IAAA,OAAO,MAAM,YAAY,UAAU,GAAG,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC;AACvE,CAAC;AAOa,MAAO,SAAU,SAAQ,cAAc,CAAA;AACnD,IAAA,KAAK;AACL,IAAA,UAAU;AACV,IAAA,IAAI;AACJ,IAAA,MAAM;IACN,WAAA,CAAY,OAAA,GAA4B,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,EAAA;AACxE,QAAA,KAAK,EAAE;QACP,IAAI,OAAO,EAAE,IAAI;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;;AACtC,YAAA,IAAI,CAAC,IAAI,GAAG,YAAY;QAC7B,IAAI,OAAO,EAAE,MAAM;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;IACnD;IAEA,MAAM,IAAI,CAAC,UAAsB,EAAA;QAC/B,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,EAAE,UAAU,YAAY,UAAU,CAAC,EAAE;AACvC,gBAAA,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC;YAC7D;;;YAGA,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,GAAG,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,UAAU;YACtF,IAAI,CAAC,UAAU,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC;AACxC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI;YAEjC,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,gBAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;YACzB;iBAAO;AACL,gBAAA,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;YAC/B;QACF;AACA,QAAA,OAAO,IAAI;IACb;AACA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;AAC1B,QAAA,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC;AACrF,QAAA,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;AACtB,QAAA,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC;AAE1D,QAAA,OAAO,UAAU;IACnB;AAEA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IACjC;AAEA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;IACrB;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,OAAO;IACrB;AAEA,IAAA,MAAM,MAAM,CAAC,MAAM,EAAE,IAAK,EAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AACxC,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC;QAC/D,IAAI,CAAC,UAAU,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACtC,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO;QACrC,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAE7E,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YAC3B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACrC,MAAM,GAAG,MAAM,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC;QAClD;QACA,IAAI,CAAC,MAAM,GAAG,MAAM,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC;QAErD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;QAE9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;QACrC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW;AACxC,QAAA,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAC1E,QAAA,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AAC3B,QAAA,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAE/C,QAAA,IAAI,CAAC,OAAO,GAAG,UAAU;QAEzB,OAAO,IAAI,CAAC,OAAO;IACrB;IAEA,MAAM,QAAQ,CAAC,MAAkB,EAAA;AAC/B,QAAA,IAAI,EAAE,MAAM,YAAY,UAAU,CAAC,EAAE;AACnC,YAAA,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC;QAC7D;QACA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AACnC,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QACrB;aAAO;AACL,YAAA,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC3B;IACF;AAEA,IAAA,MAAM,CAAC,MAAM,EAAA;AACX,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;QACrB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AAEnC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;;QAE/C,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAC/C,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,EAAE;AACpC,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,4BAAA,EAA+B,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAA,CAAE,CAAC;QAC3E;;QAIA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI;QAEhC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;QAE9B,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC;SACd;IACH;AACD;;;;"}
|
package/exports/codec.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.js","sources":["../src/codec.ts"],"sourcesContent":["import varint from 'varint';\nimport { utils as codecUtils} from '@leofcoin/codecs'\nimport BasicInterface from './basic-interface.js'\n\nexport default class Codec extends BasicInterface {\n codecBuffer: Uint8Array\n codec: number\n hashAlg: string\n\n constructor(buffer: string | number | object | Uint8Array | ArrayBuffer) {\n super()\n if (buffer) {\n if (buffer instanceof Uint8Array) {\n const codec = varint.decode(buffer);\n const name = this.getCodecName(codec)\n if (name) {\n this.name = name\n this.encoded = buffer\n this.decode(buffer)\n } else {\n this.encode(Number(new TextDecoder().decode(buffer)))\n }\n } else if (buffer instanceof ArrayBuffer) {\n const codec = varint.decode(buffer);\n const name = this.getCodecName(codec)\n if (name) {\n this.name = name\n this.decode(buffer as Uint8Array)\n } else {\n this.encode(Number(new TextDecoder().decode(new Uint8Array(buffer))))\n }\n } else if (typeof buffer === 'string') {\n if (codecUtils.getCodec(buffer)) this.fromName(buffer)\n else if (this.isHex(buffer)) this.fromHex(buffer)\n else if (this.isBase32(buffer)) this.fromBs32(buffer)\n else if (this.isBase58(buffer)) this.fromBs58(buffer)\n else this.fromString(buffer)\n }\n if (!isNaN(buffer as number)) if (codecUtils.getCodec(buffer as number)) this.fromCodec(buffer as number)\n }\n }\n\n fromEncoded(encoded: Uint8Array): object {\n const codec = varint.decode(encoded);\n const name = this.getCodecName(codec)\n this.name = name\n this.encoded = encoded\n return this.decode(encoded)\n }\n\n getCodec(name: string): number {\n return codecUtils.getCodec(name)\n }\n\n getCodecName(codec: number): string {\n return codecUtils.getCodecName(codec)\n }\n\n getHashAlg(name: string): string {\n return codecUtils.getHashAlg(name)\n }\n\n fromCodec(codec: number) {\n this.name = this.getCodecName(codec)\n this.hashAlg = this.getHashAlg(this.name)\n this.codec = this.getCodec(this.name)\n this.codecBuffer = varint.encode(this.codec)\n this.decoded = {\n name: this.name,\n hashAlg: this.hashAlg,\n codec: this.codec,\n codecBuffer: this.codecBuffer\n }\n }\n\n fromName(name: string) {\n const codec = this.getCodec(name)\n this.name = name\n this.codec = codec\n this.hashAlg = this.getHashAlg(name)\n this.codecBuffer = varint.encode(this.codec)\n this.decoded = {\n name: this.name,\n hashAlg: this.hashAlg,\n codec: this.codec,\n codecBuffer: this.codecBuffer\n }\n }\n\n decode(encoded?: Uint8Array): object {\n encoded = encoded || this.encoded\n const codec = varint.decode(encoded);\n this.fromCodec(codec)\n return this.decoded\n }\n\n encode(codec?: number): Uint8Array {\n codec = codec || this.codec \n this.encoded = varint.encode(codec)\n return this.encoded\n }\n}\n"],"names":["codecUtils"],"mappings":"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"}
|
package/exports/index.d.ts
CHANGED
|
@@ -2,8 +2,23 @@ import basicInterface from './basic-interface.js';
|
|
|
2
2
|
import formatInterface from './codec-format-interface.js';
|
|
3
3
|
import codecHash from './codec-hash.js';
|
|
4
4
|
import codec from './codec.js';
|
|
5
|
+
/**
|
|
6
|
+
* Codecs utility from @leofcoin/codecs
|
|
7
|
+
*/
|
|
5
8
|
export { codecs } from '@leofcoin/codecs';
|
|
9
|
+
/**
|
|
10
|
+
* Basic interface for codecs
|
|
11
|
+
*/
|
|
6
12
|
export declare const BasicInterface: typeof basicInterface;
|
|
13
|
+
/**
|
|
14
|
+
* Interface for defining codec formats
|
|
15
|
+
*/
|
|
7
16
|
export declare const FormatInterface: typeof formatInterface;
|
|
17
|
+
/**
|
|
18
|
+
* Codec hash utility class
|
|
19
|
+
*/
|
|
8
20
|
export declare const CodecHash: typeof codecHash;
|
|
21
|
+
/**
|
|
22
|
+
* Codec utility class
|
|
23
|
+
*/
|
|
9
24
|
export declare const Codec: typeof codec;
|
package/exports/index.js
CHANGED
|
@@ -9,10 +9,24 @@ import '@vandeurenglenn/is-hex';
|
|
|
9
9
|
import '@vandeurenglenn/proto-array';
|
|
10
10
|
import '@vandeurenglenn/typed-array-utils';
|
|
11
11
|
import 'varint';
|
|
12
|
+
import 'hash-wasm';
|
|
12
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Basic interface for codecs
|
|
16
|
+
*/
|
|
13
17
|
const BasicInterface = BasicInterface$1;
|
|
18
|
+
/**
|
|
19
|
+
* Interface for defining codec formats
|
|
20
|
+
*/
|
|
14
21
|
const FormatInterface = FormatInterface$1;
|
|
22
|
+
/**
|
|
23
|
+
* Codec hash utility class
|
|
24
|
+
*/
|
|
15
25
|
const CodecHash = CodecHash$1;
|
|
26
|
+
/**
|
|
27
|
+
* Codec utility class
|
|
28
|
+
*/
|
|
16
29
|
const Codec = Codec$1;
|
|
17
30
|
|
|
18
31
|
export { BasicInterface, Codec, CodecHash, FormatInterface };
|
|
32
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import basicInterface from './basic-interface.js'\nimport formatInterface from './codec-format-interface.js'\nimport codecHash from './codec-hash.js'\nimport codec from './codec.js'\n\n/**\n * Codecs utility from @leofcoin/codecs\n */\nexport { codecs } from '@leofcoin/codecs'\n\n/**\n * Basic interface for codecs\n */\nexport const BasicInterface = basicInterface\n\n/**\n * Interface for defining codec formats\n */\nexport const FormatInterface = formatInterface\n\n/**\n * Codec hash utility class\n */\nexport const CodecHash = codecHash\n\n/**\n * Codec utility class\n */\nexport const Codec = codec\n"],"names":["basicInterface","formatInterface","codecHash","codec"],"mappings":";;;;;;;;;;;;;AAUA;;AAEG;AACI,MAAM,cAAc,GAAGA;AAE9B;;AAEG;AACI,MAAM,eAAe,GAAGC;AAE/B;;AAEG;AACI,MAAM,SAAS,GAAGC;AAEzB;;AAEG;AACI,MAAM,KAAK,GAAGC;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@leofcoin/codec-format-interface",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -39,9 +39,10 @@
|
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@rollup/plugin-typescript": "^12.3.0",
|
|
41
41
|
"@types/varint": "^6.0.3",
|
|
42
|
-
"
|
|
42
|
+
"prettier": "^3.8.1",
|
|
43
|
+
"rollup": "^4.56.0",
|
|
43
44
|
"tape": "^5.9.0",
|
|
44
|
-
"tinybench": "^
|
|
45
|
+
"tinybench": "^6.0.0",
|
|
45
46
|
"tslib": "^2.8.1"
|
|
46
47
|
}
|
|
47
48
|
}
|