@xylabs/hex 2.13.15 → 2.13.16
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/dist/browser/address.d.cts +2 -2
- package/dist/browser/address.d.cts.map +1 -1
- package/dist/browser/address.d.mts +2 -2
- package/dist/browser/address.d.mts.map +1 -1
- package/dist/browser/address.d.ts +2 -2
- package/dist/browser/address.d.ts.map +1 -1
- package/dist/browser/hash.d.cts +0 -2
- package/dist/browser/hash.d.cts.map +1 -1
- package/dist/browser/hash.d.mts +0 -2
- package/dist/browser/hash.d.mts.map +1 -1
- package/dist/browser/hash.d.ts +0 -2
- package/dist/browser/hash.d.ts.map +1 -1
- package/dist/browser/hex/as.d.cts +5 -0
- package/dist/browser/hex/as.d.cts.map +1 -0
- package/dist/browser/hex/as.d.mts +5 -0
- package/dist/browser/hex/as.d.mts.map +1 -0
- package/dist/browser/hex/as.d.ts +5 -0
- package/dist/browser/hex/as.d.ts.map +1 -0
- package/dist/browser/hex/from.d.cts +7 -0
- package/dist/browser/hex/from.d.cts.map +1 -0
- package/dist/browser/hex/from.d.mts +7 -0
- package/dist/browser/hex/from.d.mts.map +1 -0
- package/dist/browser/hex/from.d.ts +7 -0
- package/dist/browser/hex/from.d.ts.map +1 -0
- package/dist/browser/hex/index.d.cts +8 -0
- package/dist/browser/hex/index.d.cts.map +1 -0
- package/dist/browser/hex/index.d.mts +8 -0
- package/dist/browser/hex/index.d.mts.map +1 -0
- package/dist/browser/hex/index.d.ts +8 -0
- package/dist/browser/hex/index.d.ts.map +1 -0
- package/dist/browser/hex/is.d.cts +3 -0
- package/dist/browser/hex/is.d.cts.map +1 -0
- package/dist/browser/hex/is.d.mts +3 -0
- package/dist/browser/hex/is.d.mts.map +1 -0
- package/dist/browser/hex/is.d.ts +3 -0
- package/dist/browser/hex/is.d.ts.map +1 -0
- package/dist/browser/hex/legacy.d.cts +4 -0
- package/dist/browser/hex/legacy.d.cts.map +1 -0
- package/dist/browser/hex/legacy.d.mts +4 -0
- package/dist/browser/hex/legacy.d.mts.map +1 -0
- package/dist/browser/hex/legacy.d.ts +4 -0
- package/dist/browser/hex/legacy.d.ts.map +1 -0
- package/dist/browser/hex/model.d.cts +7 -0
- package/dist/browser/hex/model.d.cts.map +1 -0
- package/dist/browser/hex/model.d.mts +7 -0
- package/dist/browser/hex/model.d.mts.map +1 -0
- package/dist/browser/hex/model.d.ts +7 -0
- package/dist/browser/hex/model.d.ts.map +1 -0
- package/dist/browser/hex/nibble.d.cts +3 -0
- package/dist/browser/hex/nibble.d.cts.map +1 -0
- package/dist/browser/hex/nibble.d.mts +3 -0
- package/dist/browser/hex/nibble.d.mts.map +1 -0
- package/dist/browser/hex/nibble.d.ts +3 -0
- package/dist/browser/hex/nibble.d.ts.map +1 -0
- package/dist/browser/hex/regex.d.cts +3 -0
- package/dist/browser/hex/regex.d.cts.map +1 -0
- package/dist/browser/hex/regex.d.mts +3 -0
- package/dist/browser/hex/regex.d.mts.map +1 -0
- package/dist/browser/hex/regex.d.ts +3 -0
- package/dist/browser/hex/regex.d.ts.map +1 -0
- package/dist/browser/index.cjs +97 -51
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +97 -51
- package/dist/browser/index.js.map +1 -1
- package/dist/node/address.d.cts +2 -2
- package/dist/node/address.d.cts.map +1 -1
- package/dist/node/address.d.mts +2 -2
- package/dist/node/address.d.mts.map +1 -1
- package/dist/node/address.d.ts +2 -2
- package/dist/node/address.d.ts.map +1 -1
- package/dist/node/hash.d.cts +0 -2
- package/dist/node/hash.d.cts.map +1 -1
- package/dist/node/hash.d.mts +0 -2
- package/dist/node/hash.d.mts.map +1 -1
- package/dist/node/hash.d.ts +0 -2
- package/dist/node/hash.d.ts.map +1 -1
- package/dist/node/hex/as.d.cts +5 -0
- package/dist/node/hex/as.d.cts.map +1 -0
- package/dist/node/hex/as.d.mts +5 -0
- package/dist/node/hex/as.d.mts.map +1 -0
- package/dist/node/hex/as.d.ts +5 -0
- package/dist/node/hex/as.d.ts.map +1 -0
- package/dist/node/hex/from.d.cts +7 -0
- package/dist/node/hex/from.d.cts.map +1 -0
- package/dist/node/hex/from.d.mts +7 -0
- package/dist/node/hex/from.d.mts.map +1 -0
- package/dist/node/hex/from.d.ts +7 -0
- package/dist/node/hex/from.d.ts.map +1 -0
- package/dist/node/hex/index.d.cts +8 -0
- package/dist/node/hex/index.d.cts.map +1 -0
- package/dist/node/hex/index.d.mts +8 -0
- package/dist/node/hex/index.d.mts.map +1 -0
- package/dist/node/hex/index.d.ts +8 -0
- package/dist/node/hex/index.d.ts.map +1 -0
- package/dist/node/hex/is.d.cts +3 -0
- package/dist/node/hex/is.d.cts.map +1 -0
- package/dist/node/hex/is.d.mts +3 -0
- package/dist/node/hex/is.d.mts.map +1 -0
- package/dist/node/hex/is.d.ts +3 -0
- package/dist/node/hex/is.d.ts.map +1 -0
- package/dist/node/hex/legacy.d.cts +4 -0
- package/dist/node/hex/legacy.d.cts.map +1 -0
- package/dist/node/hex/legacy.d.mts +4 -0
- package/dist/node/hex/legacy.d.mts.map +1 -0
- package/dist/node/hex/legacy.d.ts +4 -0
- package/dist/node/hex/legacy.d.ts.map +1 -0
- package/dist/node/hex/model.d.cts +7 -0
- package/dist/node/hex/model.d.cts.map +1 -0
- package/dist/node/hex/model.d.mts +7 -0
- package/dist/node/hex/model.d.mts.map +1 -0
- package/dist/node/hex/model.d.ts +7 -0
- package/dist/node/hex/model.d.ts.map +1 -0
- package/dist/node/hex/nibble.d.cts +3 -0
- package/dist/node/hex/nibble.d.cts.map +1 -0
- package/dist/node/hex/nibble.d.mts +3 -0
- package/dist/node/hex/nibble.d.mts.map +1 -0
- package/dist/node/hex/nibble.d.ts +3 -0
- package/dist/node/hex/nibble.d.ts.map +1 -0
- package/dist/node/hex/regex.d.cts +3 -0
- package/dist/node/hex/regex.d.cts.map +1 -0
- package/dist/node/hex/regex.d.mts +3 -0
- package/dist/node/hex/regex.d.mts.map +1 -0
- package/dist/node/hex/regex.d.ts +3 -0
- package/dist/node/hex/regex.d.ts.map +1 -0
- package/dist/node/index.cjs +105 -53
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +97 -51
- package/dist/node/index.js.map +1 -1
- package/package.json +2 -2
- package/src/address.ts +17 -9
- package/src/hash.ts +13 -17
- package/src/hex/as.ts +20 -0
- package/src/hex/from.ts +52 -0
- package/src/hex/index.ts +7 -0
- package/src/hex/is.ts +21 -0
- package/src/hex/legacy.ts +8 -0
- package/src/hex/model.ts +7 -0
- package/src/hex/nibble.ts +11 -0
- package/src/hex/regex.ts +2 -0
- package/dist/browser/hex.d.cts +0 -15
- package/dist/browser/hex.d.cts.map +0 -1
- package/dist/browser/hex.d.mts +0 -15
- package/dist/browser/hex.d.mts.map +0 -1
- package/dist/browser/hex.d.ts +0 -15
- package/dist/browser/hex.d.ts.map +0 -1
- package/dist/node/hex.d.cts +0 -15
- package/dist/node/hex.d.cts.map +0 -1
- package/dist/node/hex.d.mts +0 -15
- package/dist/node/hex.d.mts.map +0 -1
- package/dist/node/hex.d.ts +0 -15
- package/dist/node/hex.d.ts.map +0 -1
- package/src/hex.ts +0 -88
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/hex/model.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG,GAAG,MAAM,CAAA;AAExB,MAAM,WAAW,SAAS;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/hex/model.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG,GAAG,MAAM,CAAA;AAExB,MAAM,WAAW,SAAS;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/hex/model.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG,GAAG,MAAM,CAAA;AAExB,MAAM,WAAW,SAAS;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nibble.d.ts","sourceRoot":"","sources":["../../../src/hex/nibble.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,MAI7C,CAAA;AAGD,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,MAE7C,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nibble.d.ts","sourceRoot":"","sources":["../../../src/hex/nibble.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,MAI7C,CAAA;AAGD,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,MAE7C,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nibble.d.ts","sourceRoot":"","sources":["../../../src/hex/nibble.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,MAI7C,CAAA;AAGD,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,MAE7C,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex.d.ts","sourceRoot":"","sources":["../../../src/hex/regex.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,QAAiB,CAAA;AACtC,eAAO,MAAM,kBAAkB,QAAkB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex.d.ts","sourceRoot":"","sources":["../../../src/hex/regex.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,QAAiB,CAAA;AACtC,eAAO,MAAM,kBAAkB,QAAkB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex.d.ts","sourceRoot":"","sources":["../../../src/hex/regex.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,QAAiB,CAAA;AACtC,eAAO,MAAM,kBAAkB,QAAkB,CAAA"}
|
package/dist/node/index.cjs
CHANGED
|
@@ -27,15 +27,21 @@ __export(src_exports, {
|
|
|
27
27
|
asHex: () => asHex,
|
|
28
28
|
bitsToNibbles: () => bitsToNibbles,
|
|
29
29
|
hexFrom: () => hexFrom,
|
|
30
|
+
hexFromArrayBuffer: () => hexFromArrayBuffer,
|
|
31
|
+
hexFromBigInt: () => hexFromBigInt,
|
|
32
|
+
hexFromHexString: () => hexFromHexString,
|
|
33
|
+
hexFromNumber: () => hexFromNumber,
|
|
30
34
|
hexRegex: () => hexRegex,
|
|
31
35
|
hexRegexWithPrefix: () => hexRegexWithPrefix,
|
|
32
36
|
isAddress: () => isAddress,
|
|
33
37
|
isHash: () => isHash,
|
|
34
38
|
isHashBitLength: () => isHashBitLength,
|
|
35
39
|
isHex: () => isHex,
|
|
36
|
-
|
|
40
|
+
isHexZero: () => isHexZero,
|
|
37
41
|
nibblesToBits: () => nibblesToBits,
|
|
38
|
-
|
|
42
|
+
toAddress: () => toAddress,
|
|
43
|
+
toHex: () => toHex,
|
|
44
|
+
toHexLegacy: () => toHexLegacy
|
|
39
45
|
});
|
|
40
46
|
module.exports = __toCommonJS(src_exports);
|
|
41
47
|
|
|
@@ -50,13 +56,10 @@ var assertError = (value, assert, defaultMessage) => {
|
|
|
50
56
|
return void 0;
|
|
51
57
|
};
|
|
52
58
|
|
|
53
|
-
// src/hex.ts
|
|
59
|
+
// src/hex/from.ts
|
|
54
60
|
var import_arraybuffer = require("@xylabs/arraybuffer");
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
var hexFrom = (buffer) => {
|
|
58
|
-
return [...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, "0")).join("");
|
|
59
|
-
};
|
|
61
|
+
|
|
62
|
+
// src/hex/nibble.ts
|
|
60
63
|
var bitsToNibbles = (value) => {
|
|
61
64
|
const nibbles = value >> 2;
|
|
62
65
|
if (value !== nibbles << 2)
|
|
@@ -66,55 +69,95 @@ var bitsToNibbles = (value) => {
|
|
|
66
69
|
var nibblesToBits = (value) => {
|
|
67
70
|
return value << 2;
|
|
68
71
|
};
|
|
69
|
-
|
|
70
|
-
|
|
72
|
+
|
|
73
|
+
// src/hex/regex.ts
|
|
74
|
+
var hexRegex = /^[0-9a-f]+$/i;
|
|
75
|
+
var hexRegexWithPrefix = /0x[0-9a-f]+$/i;
|
|
76
|
+
|
|
77
|
+
// src/hex/is.ts
|
|
78
|
+
var isHexZero = (value) => {
|
|
79
|
+
return BigInt(hexFromHexString(value, { prefix: true })) === 0n;
|
|
71
80
|
};
|
|
72
81
|
var isHex = (value, bitLength) => {
|
|
73
82
|
if (typeof value !== "string")
|
|
74
83
|
return false;
|
|
84
|
+
console.log(`BitLength: ${value.length << 2}|${bitLength}`);
|
|
75
85
|
if (bitLength !== void 0 && value.length !== bitsToNibbles(bitLength))
|
|
76
86
|
return false;
|
|
77
87
|
return hexRegex.test(value);
|
|
78
88
|
};
|
|
79
|
-
|
|
80
|
-
|
|
89
|
+
|
|
90
|
+
// src/hex/from.ts
|
|
91
|
+
var hexFromArrayBuffer = (buffer, config) => {
|
|
92
|
+
const unPadded = [...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, "0")).join("");
|
|
93
|
+
return hexFromHexString(unPadded, config);
|
|
81
94
|
};
|
|
82
|
-
|
|
83
|
-
const bitLength =
|
|
84
|
-
const
|
|
85
|
-
|
|
95
|
+
var hexFromBigInt = (value, config = {}) => {
|
|
96
|
+
const { bitLength } = config;
|
|
97
|
+
const unPadded = value.toString(16);
|
|
98
|
+
const padded = bitLength === void 0 ? unPadded : unPadded.padStart(bitsToNibbles(bitLength), "0");
|
|
99
|
+
return hexFromHexString(padded, config);
|
|
100
|
+
};
|
|
101
|
+
var hexFromNumber = (value, config) => {
|
|
102
|
+
return hexFromBigInt(BigInt(value), config);
|
|
103
|
+
};
|
|
104
|
+
var hexFromHexString = (value, config = {}) => {
|
|
105
|
+
const { prefix = false, byteSize = 8 } = config;
|
|
106
|
+
const nibbleBoundary = bitsToNibbles(byteSize);
|
|
107
|
+
const unPadded = (value.startsWith("0x") ? value.substring(2) : value).toLowerCase();
|
|
108
|
+
if (isHex(unPadded)) {
|
|
109
|
+
const padded = unPadded.padStart(unPadded.length + unPadded.length % nibbleBoundary, "0");
|
|
110
|
+
return prefix ? `0x${padded}` : padded;
|
|
111
|
+
} else {
|
|
112
|
+
throw Error("Received string is not a value hex");
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
var hexFrom = (value, config) => {
|
|
86
116
|
switch (typeof value) {
|
|
87
117
|
case "string":
|
|
88
|
-
|
|
89
|
-
break;
|
|
90
|
-
case "number":
|
|
91
|
-
if (value === Math.floor(value)) {
|
|
92
|
-
stringValue = value.toString(16);
|
|
93
|
-
} else {
|
|
94
|
-
return assertError(value, assert, "Numbers must be whole");
|
|
95
|
-
}
|
|
96
|
-
break;
|
|
118
|
+
return hexFromHexString(value, config);
|
|
97
119
|
case "bigint":
|
|
98
|
-
|
|
99
|
-
|
|
120
|
+
return hexFromBigInt(value, config);
|
|
121
|
+
case "number":
|
|
122
|
+
return hexFromNumber(value, config);
|
|
100
123
|
case "object":
|
|
101
124
|
if ((0, import_arraybuffer.isArrayBuffer)(value)) {
|
|
102
|
-
|
|
125
|
+
return hexFromArrayBuffer(value, config);
|
|
103
126
|
} else {
|
|
104
|
-
|
|
127
|
+
throw Error("Invalid type: object !== ArrayBuffer");
|
|
105
128
|
}
|
|
129
|
+
default:
|
|
130
|
+
throw Error(`Invalid type: ${typeof value}`);
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
// src/hex/as.ts
|
|
135
|
+
function asHex(value, assert) {
|
|
136
|
+
let stringValue = void 0;
|
|
137
|
+
switch (typeof value) {
|
|
138
|
+
case "string":
|
|
139
|
+
stringValue = hexFromHexString(value);
|
|
106
140
|
break;
|
|
107
141
|
default:
|
|
108
142
|
return assertError(value, assert, `Unsupported type [${typeof value}]`);
|
|
109
143
|
}
|
|
110
|
-
|
|
111
|
-
stringValue = stringValue.padStart(bitsToNibbles(bitLength), "0");
|
|
112
|
-
}
|
|
113
|
-
return isHex(stringValue, bitLength) ? stringValue.toLowerCase() : assertError(value, assert, "Unable to convert to Hash");
|
|
144
|
+
return isHex(stringValue) ? stringValue : assertError(value, assert, `Value is not Hex [${value}]`);
|
|
114
145
|
}
|
|
115
146
|
|
|
147
|
+
// src/hex/legacy.ts
|
|
148
|
+
var toHexLegacy = (buffer) => {
|
|
149
|
+
return [...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, "0")).join("");
|
|
150
|
+
};
|
|
151
|
+
var toHex = (buffer) => {
|
|
152
|
+
return toHexLegacy(buffer);
|
|
153
|
+
};
|
|
154
|
+
|
|
116
155
|
// src/address.ts
|
|
117
156
|
var addressRegex = /0x[0-9a-f]+/i;
|
|
157
|
+
var toAddress = (value, config = {}) => {
|
|
158
|
+
const { bitLength = 160, prefix = true } = config;
|
|
159
|
+
return hexFrom(value, { bitLength, prefix, ...config });
|
|
160
|
+
};
|
|
118
161
|
var isAddress = (value, bitLength = 160) => {
|
|
119
162
|
if (typeof value !== "string")
|
|
120
163
|
return false;
|
|
@@ -125,11 +168,16 @@ var isAddress = (value, bitLength = 160) => {
|
|
|
125
168
|
return false;
|
|
126
169
|
return isHex(valueHex, bitLength);
|
|
127
170
|
};
|
|
128
|
-
function asAddress(value,
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
171
|
+
function asAddress(value, assert) {
|
|
172
|
+
let stringValue = void 0;
|
|
173
|
+
switch (typeof value) {
|
|
174
|
+
case "string":
|
|
175
|
+
stringValue = hexFromHexString(value, { prefix: true });
|
|
176
|
+
break;
|
|
177
|
+
default:
|
|
178
|
+
return assert ? assertError(value, assert, `Unsupported type [${typeof value}]`) : void 0;
|
|
179
|
+
}
|
|
180
|
+
return isAddress(stringValue) ? stringValue : assertError(value, assert, `Value is not an Address [${value}]`);
|
|
133
181
|
}
|
|
134
182
|
|
|
135
183
|
// src/hash.ts
|
|
@@ -138,20 +186,18 @@ var isHashBitLength = (value) => {
|
|
|
138
186
|
return typeof value === "number" && HashBitLength.includes(value);
|
|
139
187
|
};
|
|
140
188
|
var isHash = (value, bitLength = 256) => {
|
|
141
|
-
|
|
142
|
-
return false;
|
|
143
|
-
const hex = asHex(value, bitLength);
|
|
144
|
-
if (!hex)
|
|
145
|
-
return false;
|
|
146
|
-
if (!isHashBitLength(nibblesToBits(hex.length)))
|
|
147
|
-
return false;
|
|
148
|
-
return true;
|
|
189
|
+
return isHex(value, bitLength);
|
|
149
190
|
};
|
|
150
|
-
function asHash(value,
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
191
|
+
function asHash(value, assert) {
|
|
192
|
+
let stringValue = void 0;
|
|
193
|
+
switch (typeof value) {
|
|
194
|
+
case "string":
|
|
195
|
+
stringValue = hexFromHexString(value);
|
|
196
|
+
break;
|
|
197
|
+
default:
|
|
198
|
+
return assert ? assertError(value, assert, `Unsupported type [${typeof value}]`) : void 0;
|
|
199
|
+
}
|
|
200
|
+
return isHash(stringValue) ? stringValue : assertError(value, assert, `Value is not a Hash [${value}]`);
|
|
155
201
|
}
|
|
156
202
|
// Annotate the CommonJS export names for ESM import in node:
|
|
157
203
|
0 && (module.exports = {
|
|
@@ -162,14 +208,20 @@ function asHash(value, assertOrBitLength, assertOnly) {
|
|
|
162
208
|
asHex,
|
|
163
209
|
bitsToNibbles,
|
|
164
210
|
hexFrom,
|
|
211
|
+
hexFromArrayBuffer,
|
|
212
|
+
hexFromBigInt,
|
|
213
|
+
hexFromHexString,
|
|
214
|
+
hexFromNumber,
|
|
165
215
|
hexRegex,
|
|
166
216
|
hexRegexWithPrefix,
|
|
167
217
|
isAddress,
|
|
168
218
|
isHash,
|
|
169
219
|
isHashBitLength,
|
|
170
220
|
isHex,
|
|
171
|
-
|
|
221
|
+
isHexZero,
|
|
172
222
|
nibblesToBits,
|
|
173
|
-
|
|
223
|
+
toAddress,
|
|
224
|
+
toHex,
|
|
225
|
+
toHexLegacy
|
|
174
226
|
});
|
|
175
227
|
//# sourceMappingURL=index.cjs.map
|
package/dist/node/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/assert.ts","../../src/hex.ts","../../src/address.ts","../../src/hash.ts"],"sourcesContent":["export * from './address'\nexport * from './hash'\nexport * from './hex'\n","export type AssertCallback = (value: unknown, message: string) => string | boolean\n\nexport type AssertConfig = string | AssertCallback | boolean\n\nexport const assertError = (value: unknown, assert: AssertConfig | undefined, defaultMessage: string) => {\n if (assert) {\n const assertString = typeof assert === 'string' ? assert : typeof assert === 'boolean' ? defaultMessage : assert(value, defaultMessage)\n if (assertString) {\n throw Error(assertString === true ? defaultMessage : assertString)\n }\n }\n return undefined\n}\n","import { isArrayBuffer } from '@xylabs/arraybuffer'\n\nimport { AssertConfig, assertError } from './assert'\n\nexport const hexRegex = /^[0-9a-f]+$/i\nexport const hexRegexWithPrefix = /0x[0-9a-f]+$/i\n\nexport type Hex = string\n\nexport const hexFrom = (buffer: ArrayBuffer) => {\n return [...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, '0')).join('')\n}\n\n//determine the number of nibbles for a given number of bits\nexport const bitsToNibbles = (value: number): number => {\n const nibbles = value >> 2\n if (value !== nibbles << 2) throw Error('Bits for nibbles must multiple of 4')\n return nibbles\n}\n\n//determine the number of nibbles for a given number of bits\nexport const nibblesToBits = (value: number): number => {\n return value << 2\n}\n\n//are the number of bit a round nibble (factor of 4)?\nexport const isRoundNibble = (value: number) => {\n return (value >> 2) << 2 === value\n}\n\nexport const isHex = (value: unknown, bitLength?: number): value is Hex => {\n //Is it a string?\n if (typeof value !== 'string') return false\n\n //If a bitLength specified, does it conform?\n if (bitLength !== undefined && value.length !== bitsToNibbles(bitLength)) return false\n\n //Does it only has hex values?\n return hexRegex.test(value)\n}\n\nexport const toHex = (buffer: ArrayBuffer) => {\n return [...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, '0')).join('')\n}\n\nexport function asHex(value: unknown): Hex | undefined\nexport function asHex(value: unknown, bitLength?: number): Hex | undefined\nexport function asHex(value: unknown, assert: AssertConfig): Hex\nexport function asHex(value: unknown, bitLength: number | undefined, assert?: AssertConfig): Hex\nexport function asHex(value: unknown, assertOrBitLength?: AssertConfig | number, assertOnly?: AssertConfig): Hex | undefined {\n const bitLength = typeof assertOrBitLength === 'number' ? assertOrBitLength : undefined\n const assert = typeof assertOrBitLength !== 'number' ? assertOrBitLength : assertOnly\n\n let stringValue: string | undefined = undefined\n\n switch (typeof value) {\n case 'string':\n //remove the leading 0x if it is there\n stringValue = hexRegexWithPrefix.test(value) ? value.substring(2) : value\n break\n case 'number':\n if (value === Math.floor(value)) {\n stringValue = value.toString(16)\n } else {\n return assertError(value, assert, 'Numbers must be whole')\n }\n break\n case 'bigint':\n stringValue = value.toString(16)\n break\n case 'object':\n if (isArrayBuffer(value)) {\n stringValue = hexFrom(value)\n } else {\n return assertError(value, assert, 'Unsupported object')\n }\n break\n default:\n return assertError(value, assert, `Unsupported type [${typeof value}]`)\n }\n\n //make it conform to the bit length if shorter\n if (stringValue && bitLength) {\n stringValue = stringValue.padStart(bitsToNibbles(bitLength), '0')\n }\n\n return isHex(stringValue, bitLength) ? stringValue.toLowerCase() : assertError(value, assert, 'Unable to convert to Hash')\n}\n","import { AssertConfig, assertError } from './assert'\nimport { asHex, bitsToNibbles, isHex } from './hex'\n\nexport const addressRegex = /0x[0-9a-f]+/i\n\nexport type Address = string\n\nexport const isAddress = (value: unknown, bitLength = 160): value is Address => {\n //Is it a string?\n if (typeof value !== 'string') return false\n\n //Does it only has hex values and leading 0x?\n if (!addressRegex.test(value)) return false\n\n const valueHex = value.substring(2)\n\n //If a bitLength specified, does it conform?\n if (bitLength !== undefined && valueHex.length !== bitsToNibbles(bitLength)) return false\n\n return isHex(valueHex, bitLength)\n}\n\nexport function asAddress(value: unknown): Address | undefined\nexport function asAddress(value: unknown, assert: AssertConfig): Address\nexport function asAddress(value: unknown, bitLength: number): Address | undefined\nexport function asAddress(value: unknown, bitLength: number, assert: AssertConfig): Address\nexport function asAddress(value: unknown, assertOrBitLength?: AssertConfig | number, assertOnly?: AssertConfig): Address | undefined {\n const bitLength = typeof assertOrBitLength === 'number' ? assertOrBitLength : 160\n const assert = typeof assertOrBitLength !== 'number' ? assertOrBitLength : assertOnly\n\n const result = `0x${asHex(value, bitLength, assert)}`\n return isAddress(result, bitLength) ? result : assertError(value, assert, 'Resulting value is not an Address')\n}\n","import { AssertConfig, assertError } from './assert'\nimport { asHex, Hex, isHex, nibblesToBits } from './hex'\n\nexport type HashBitLength = 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096\nexport const HashBitLength: HashBitLength[] = [32, 64, 128, 256, 512, 1024, 2048, 4096]\n\nexport const isHashBitLength = (value: unknown): value is HashBitLength => {\n return typeof value === 'number' && HashBitLength.includes(value as HashBitLength)\n}\n\nexport type Hash = Hex\nexport const isHash = (value: unknown, bitLength: HashBitLength = 256): value is Hash => {\n if (!isHex(value, bitLength)) return false\n\n const hex = asHex(value, bitLength)\n if (!hex) return false\n\n if (!isHashBitLength(nibblesToBits(hex.length))) return false\n\n return true\n}\n\nexport function asHash(value: unknown): Hash | undefined\nexport function asHash(value: unknown, assert: AssertConfig): Hash\nexport function asHash(value: unknown, bitLength?: HashBitLength): Hash | undefined\nexport function asHash(value: unknown, bitLength: HashBitLength | undefined, assert: AssertConfig): Hash\nexport function asHash(value: unknown, assertOrBitLength?: AssertConfig | HashBitLength, assertOnly?: AssertConfig): Hash | undefined {\n const bitLength: HashBitLength = typeof assertOrBitLength === 'number' ? assertOrBitLength : 256\n const assert = typeof assertOrBitLength !== 'number' ? assertOrBitLength : assertOnly\n\n const result = asHex(value, bitLength, assert)\n return isHash(result, bitLength) ? result : assertError(value, assert, 'Resulting value is not a Hash')\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/assert.ts","../../src/hex/from.ts","../../src/hex/nibble.ts","../../src/hex/regex.ts","../../src/hex/is.ts","../../src/hex/as.ts","../../src/hex/legacy.ts","../../src/address.ts","../../src/hash.ts"],"sourcesContent":["export * from './address'\nexport * from './hash'\nexport * from './hex'\n","export type AssertCallback = (value: unknown, message: string) => string | boolean\n\nexport type AssertConfig = string | AssertCallback | boolean\n\nexport const assertError = (value: unknown, assert: AssertConfig | undefined, defaultMessage: string) => {\n if (assert) {\n const assertString = typeof assert === 'string' ? assert : typeof assert === 'boolean' ? defaultMessage : assert(value, defaultMessage)\n if (assertString) {\n throw Error(assertString === true ? defaultMessage : assertString)\n }\n }\n return undefined\n}\n","import { isArrayBuffer } from '@xylabs/arraybuffer'\n\nimport { isHex } from './is'\nimport { HexConfig } from './model'\nimport { bitsToNibbles } from './nibble'\n\nexport const hexFromArrayBuffer = (buffer: ArrayBuffer, config?: HexConfig): string => {\n const unPadded = [...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, '0')).join('')\n return hexFromHexString(unPadded, config)\n}\n\nexport const hexFromBigInt = (value: bigint, config: HexConfig = {}): string => {\n const { bitLength } = config\n const unPadded = value.toString(16)\n const padded = bitLength === undefined ? unPadded : unPadded.padStart(bitsToNibbles(bitLength), '0')\n return hexFromHexString(padded, config)\n}\n\nexport const hexFromNumber = (value: number, config?: HexConfig): string => {\n return hexFromBigInt(BigInt(value), config)\n}\n\nexport const hexFromHexString = (value: string, config: HexConfig = {}): string => {\n const { prefix = false, byteSize = 8 } = config\n const nibbleBoundary = bitsToNibbles(byteSize)\n const unPadded = (value.startsWith('0x') ? value.substring(2) : value).toLowerCase()\n if (isHex(unPadded)) {\n const padded = unPadded.padStart(unPadded.length + (unPadded.length % nibbleBoundary), '0')\n return prefix ? `0x${padded}` : padded\n } else {\n throw Error('Received string is not a value hex')\n }\n}\n\nexport const hexFrom = (value: unknown, config?: HexConfig): string => {\n switch (typeof value) {\n case 'string':\n return hexFromHexString(value, config)\n case 'bigint':\n return hexFromBigInt(value, config)\n case 'number':\n return hexFromNumber(value, config)\n case 'object':\n if (isArrayBuffer(value)) {\n return hexFromArrayBuffer(value, config)\n } else {\n throw Error('Invalid type: object !== ArrayBuffer')\n }\n default:\n throw Error(`Invalid type: ${typeof value}`)\n }\n}\n","//determine the number of nibbles for a given number of bits\nexport const bitsToNibbles = (value: number): number => {\n const nibbles = value >> 2\n if (value !== nibbles << 2) throw Error('Bits for nibbles must multiple of 4')\n return nibbles\n}\n\n//determine the number of nibbles for a given number of bits\nexport const nibblesToBits = (value: number): number => {\n return value << 2\n}\n","export const hexRegex = /^[0-9a-f]+$/i\nexport const hexRegexWithPrefix = /0x[0-9a-f]+$/i\n","import { hexFromHexString } from './from'\nimport { Hex } from './model'\nimport { bitsToNibbles } from './nibble'\nimport { hexRegex } from './regex'\n\nexport const isHexZero = (value: string) => {\n return BigInt(hexFromHexString(value, { prefix: true })) === 0n\n}\n\nexport const isHex = (value: unknown, bitLength?: number): value is Hex => {\n //Is it a string?\n if (typeof value !== 'string') return false\n\n console.log(`BitLength: ${value.length << 2}|${bitLength}`)\n\n //If a bitLength specified, does it conform?\n if (bitLength !== undefined && value.length !== bitsToNibbles(bitLength)) return false\n\n //Does it only has hex values?\n return hexRegex.test(value)\n}\n","import { AssertConfig, assertError } from '../assert'\nimport { hexFromHexString } from './from'\nimport { isHex } from './is'\nimport { Hex } from './model'\n\nexport function asHex(value: unknown): Hex | undefined\nexport function asHex(value: unknown, assert: AssertConfig): Hex\nexport function asHex(value: unknown, assert?: AssertConfig): Hex | undefined {\n let stringValue: string | undefined = undefined\n\n switch (typeof value) {\n case 'string':\n stringValue = hexFromHexString(value)\n break\n default:\n return assertError(value, assert, `Unsupported type [${typeof value}]`)\n }\n\n return isHex(stringValue) ? stringValue : assertError(value, assert, `Value is not Hex [${value}]`)\n}\n","export const toHexLegacy = (buffer: ArrayBuffer) => {\n return [...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, '0')).join('')\n}\n\n/** @deprecated use toHexLegacy instead */\nexport const toHex = (buffer: ArrayBuffer) => {\n return toHexLegacy(buffer)\n}\n","import { AssertConfig, assertError } from './assert'\nimport { bitsToNibbles, HexConfig, hexFrom, hexFromHexString, isHex } from './hex'\n\nexport const addressRegex = /0x[0-9a-f]+/i\n\nexport type Address = string\n\nexport const toAddress = (value: unknown, config: HexConfig = {}) => {\n const { bitLength = 160, prefix = true } = config\n return hexFrom(value, { bitLength, prefix, ...config })\n}\n\nexport const isAddress = (value: unknown, bitLength = 160): value is Address => {\n //Is it a string?\n if (typeof value !== 'string') return false\n\n //Does it only has hex values and leading 0x?\n if (!addressRegex.test(value)) return false\n\n const valueHex = value.substring(2)\n\n //If a bitLength specified, does it conform?\n if (bitLength !== undefined && valueHex.length !== bitsToNibbles(bitLength)) return false\n\n return isHex(valueHex, bitLength)\n}\n\nexport function asAddress(value: unknown): Address | undefined\nexport function asAddress(value: unknown, assert: AssertConfig): Address\nexport function asAddress(value: unknown, assert?: AssertConfig): Address | undefined {\n let stringValue: string | undefined = undefined\n\n switch (typeof value) {\n case 'string':\n stringValue = hexFromHexString(value, { prefix: true })\n break\n default:\n return assert ? assertError(value, assert, `Unsupported type [${typeof value}]`) : undefined\n }\n return isAddress(stringValue) ? stringValue : assertError(value, assert, `Value is not an Address [${value}]`)\n}\n","import { AssertConfig, assertError } from './assert'\nimport { Hex, hexFromHexString, isHex } from './hex'\n\nexport type HashBitLength = 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096\nexport const HashBitLength: HashBitLength[] = [32, 64, 128, 256, 512, 1024, 2048, 4096]\n\nexport const isHashBitLength = (value: unknown): value is HashBitLength => {\n return typeof value === 'number' && HashBitLength.includes(value as HashBitLength)\n}\n\nexport type Hash = Hex\nexport const isHash = (value: unknown, bitLength: HashBitLength = 256): value is Hash => {\n return isHex(value, bitLength)\n}\n\nexport function asHash(value: unknown): Hash | undefined\nexport function asHash(value: unknown, assert: AssertConfig): Hash\nexport function asHash(value: unknown, assert?: AssertConfig): Hash | undefined {\n let stringValue: string | undefined = undefined\n\n switch (typeof value) {\n case 'string':\n stringValue = hexFromHexString(value)\n break\n default:\n return assert ? assertError(value, assert, `Unsupported type [${typeof value}]`) : undefined\n }\n return isHash(stringValue) ? stringValue : assertError(value, assert, `Value is not a Hash [${value}]`)\n}\n"],"mappings":"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","names":[]}
|
package/dist/node/index.js
CHANGED
|
@@ -9,13 +9,10 @@ var assertError = (value, assert, defaultMessage) => {
|
|
|
9
9
|
return void 0;
|
|
10
10
|
};
|
|
11
11
|
|
|
12
|
-
// src/hex.ts
|
|
12
|
+
// src/hex/from.ts
|
|
13
13
|
import { isArrayBuffer } from "@xylabs/arraybuffer";
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
var hexFrom = (buffer) => {
|
|
17
|
-
return [...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, "0")).join("");
|
|
18
|
-
};
|
|
14
|
+
|
|
15
|
+
// src/hex/nibble.ts
|
|
19
16
|
var bitsToNibbles = (value) => {
|
|
20
17
|
const nibbles = value >> 2;
|
|
21
18
|
if (value !== nibbles << 2)
|
|
@@ -25,55 +22,95 @@ var bitsToNibbles = (value) => {
|
|
|
25
22
|
var nibblesToBits = (value) => {
|
|
26
23
|
return value << 2;
|
|
27
24
|
};
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
|
|
26
|
+
// src/hex/regex.ts
|
|
27
|
+
var hexRegex = /^[0-9a-f]+$/i;
|
|
28
|
+
var hexRegexWithPrefix = /0x[0-9a-f]+$/i;
|
|
29
|
+
|
|
30
|
+
// src/hex/is.ts
|
|
31
|
+
var isHexZero = (value) => {
|
|
32
|
+
return BigInt(hexFromHexString(value, { prefix: true })) === 0n;
|
|
30
33
|
};
|
|
31
34
|
var isHex = (value, bitLength) => {
|
|
32
35
|
if (typeof value !== "string")
|
|
33
36
|
return false;
|
|
37
|
+
console.log(`BitLength: ${value.length << 2}|${bitLength}`);
|
|
34
38
|
if (bitLength !== void 0 && value.length !== bitsToNibbles(bitLength))
|
|
35
39
|
return false;
|
|
36
40
|
return hexRegex.test(value);
|
|
37
41
|
};
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
|
|
43
|
+
// src/hex/from.ts
|
|
44
|
+
var hexFromArrayBuffer = (buffer, config) => {
|
|
45
|
+
const unPadded = [...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, "0")).join("");
|
|
46
|
+
return hexFromHexString(unPadded, config);
|
|
40
47
|
};
|
|
41
|
-
|
|
42
|
-
const bitLength =
|
|
43
|
-
const
|
|
44
|
-
|
|
48
|
+
var hexFromBigInt = (value, config = {}) => {
|
|
49
|
+
const { bitLength } = config;
|
|
50
|
+
const unPadded = value.toString(16);
|
|
51
|
+
const padded = bitLength === void 0 ? unPadded : unPadded.padStart(bitsToNibbles(bitLength), "0");
|
|
52
|
+
return hexFromHexString(padded, config);
|
|
53
|
+
};
|
|
54
|
+
var hexFromNumber = (value, config) => {
|
|
55
|
+
return hexFromBigInt(BigInt(value), config);
|
|
56
|
+
};
|
|
57
|
+
var hexFromHexString = (value, config = {}) => {
|
|
58
|
+
const { prefix = false, byteSize = 8 } = config;
|
|
59
|
+
const nibbleBoundary = bitsToNibbles(byteSize);
|
|
60
|
+
const unPadded = (value.startsWith("0x") ? value.substring(2) : value).toLowerCase();
|
|
61
|
+
if (isHex(unPadded)) {
|
|
62
|
+
const padded = unPadded.padStart(unPadded.length + unPadded.length % nibbleBoundary, "0");
|
|
63
|
+
return prefix ? `0x${padded}` : padded;
|
|
64
|
+
} else {
|
|
65
|
+
throw Error("Received string is not a value hex");
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
var hexFrom = (value, config) => {
|
|
45
69
|
switch (typeof value) {
|
|
46
70
|
case "string":
|
|
47
|
-
|
|
48
|
-
break;
|
|
49
|
-
case "number":
|
|
50
|
-
if (value === Math.floor(value)) {
|
|
51
|
-
stringValue = value.toString(16);
|
|
52
|
-
} else {
|
|
53
|
-
return assertError(value, assert, "Numbers must be whole");
|
|
54
|
-
}
|
|
55
|
-
break;
|
|
71
|
+
return hexFromHexString(value, config);
|
|
56
72
|
case "bigint":
|
|
57
|
-
|
|
58
|
-
|
|
73
|
+
return hexFromBigInt(value, config);
|
|
74
|
+
case "number":
|
|
75
|
+
return hexFromNumber(value, config);
|
|
59
76
|
case "object":
|
|
60
77
|
if (isArrayBuffer(value)) {
|
|
61
|
-
|
|
78
|
+
return hexFromArrayBuffer(value, config);
|
|
62
79
|
} else {
|
|
63
|
-
|
|
80
|
+
throw Error("Invalid type: object !== ArrayBuffer");
|
|
64
81
|
}
|
|
82
|
+
default:
|
|
83
|
+
throw Error(`Invalid type: ${typeof value}`);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
// src/hex/as.ts
|
|
88
|
+
function asHex(value, assert) {
|
|
89
|
+
let stringValue = void 0;
|
|
90
|
+
switch (typeof value) {
|
|
91
|
+
case "string":
|
|
92
|
+
stringValue = hexFromHexString(value);
|
|
65
93
|
break;
|
|
66
94
|
default:
|
|
67
95
|
return assertError(value, assert, `Unsupported type [${typeof value}]`);
|
|
68
96
|
}
|
|
69
|
-
|
|
70
|
-
stringValue = stringValue.padStart(bitsToNibbles(bitLength), "0");
|
|
71
|
-
}
|
|
72
|
-
return isHex(stringValue, bitLength) ? stringValue.toLowerCase() : assertError(value, assert, "Unable to convert to Hash");
|
|
97
|
+
return isHex(stringValue) ? stringValue : assertError(value, assert, `Value is not Hex [${value}]`);
|
|
73
98
|
}
|
|
74
99
|
|
|
100
|
+
// src/hex/legacy.ts
|
|
101
|
+
var toHexLegacy = (buffer) => {
|
|
102
|
+
return [...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, "0")).join("");
|
|
103
|
+
};
|
|
104
|
+
var toHex = (buffer) => {
|
|
105
|
+
return toHexLegacy(buffer);
|
|
106
|
+
};
|
|
107
|
+
|
|
75
108
|
// src/address.ts
|
|
76
109
|
var addressRegex = /0x[0-9a-f]+/i;
|
|
110
|
+
var toAddress = (value, config = {}) => {
|
|
111
|
+
const { bitLength = 160, prefix = true } = config;
|
|
112
|
+
return hexFrom(value, { bitLength, prefix, ...config });
|
|
113
|
+
};
|
|
77
114
|
var isAddress = (value, bitLength = 160) => {
|
|
78
115
|
if (typeof value !== "string")
|
|
79
116
|
return false;
|
|
@@ -84,11 +121,16 @@ var isAddress = (value, bitLength = 160) => {
|
|
|
84
121
|
return false;
|
|
85
122
|
return isHex(valueHex, bitLength);
|
|
86
123
|
};
|
|
87
|
-
function asAddress(value,
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
124
|
+
function asAddress(value, assert) {
|
|
125
|
+
let stringValue = void 0;
|
|
126
|
+
switch (typeof value) {
|
|
127
|
+
case "string":
|
|
128
|
+
stringValue = hexFromHexString(value, { prefix: true });
|
|
129
|
+
break;
|
|
130
|
+
default:
|
|
131
|
+
return assert ? assertError(value, assert, `Unsupported type [${typeof value}]`) : void 0;
|
|
132
|
+
}
|
|
133
|
+
return isAddress(stringValue) ? stringValue : assertError(value, assert, `Value is not an Address [${value}]`);
|
|
92
134
|
}
|
|
93
135
|
|
|
94
136
|
// src/hash.ts
|
|
@@ -97,20 +139,18 @@ var isHashBitLength = (value) => {
|
|
|
97
139
|
return typeof value === "number" && HashBitLength.includes(value);
|
|
98
140
|
};
|
|
99
141
|
var isHash = (value, bitLength = 256) => {
|
|
100
|
-
|
|
101
|
-
return false;
|
|
102
|
-
const hex = asHex(value, bitLength);
|
|
103
|
-
if (!hex)
|
|
104
|
-
return false;
|
|
105
|
-
if (!isHashBitLength(nibblesToBits(hex.length)))
|
|
106
|
-
return false;
|
|
107
|
-
return true;
|
|
142
|
+
return isHex(value, bitLength);
|
|
108
143
|
};
|
|
109
|
-
function asHash(value,
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
144
|
+
function asHash(value, assert) {
|
|
145
|
+
let stringValue = void 0;
|
|
146
|
+
switch (typeof value) {
|
|
147
|
+
case "string":
|
|
148
|
+
stringValue = hexFromHexString(value);
|
|
149
|
+
break;
|
|
150
|
+
default:
|
|
151
|
+
return assert ? assertError(value, assert, `Unsupported type [${typeof value}]`) : void 0;
|
|
152
|
+
}
|
|
153
|
+
return isHash(stringValue) ? stringValue : assertError(value, assert, `Value is not a Hash [${value}]`);
|
|
114
154
|
}
|
|
115
155
|
export {
|
|
116
156
|
HashBitLength,
|
|
@@ -120,14 +160,20 @@ export {
|
|
|
120
160
|
asHex,
|
|
121
161
|
bitsToNibbles,
|
|
122
162
|
hexFrom,
|
|
163
|
+
hexFromArrayBuffer,
|
|
164
|
+
hexFromBigInt,
|
|
165
|
+
hexFromHexString,
|
|
166
|
+
hexFromNumber,
|
|
123
167
|
hexRegex,
|
|
124
168
|
hexRegexWithPrefix,
|
|
125
169
|
isAddress,
|
|
126
170
|
isHash,
|
|
127
171
|
isHashBitLength,
|
|
128
172
|
isHex,
|
|
129
|
-
|
|
173
|
+
isHexZero,
|
|
130
174
|
nibblesToBits,
|
|
131
|
-
|
|
175
|
+
toAddress,
|
|
176
|
+
toHex,
|
|
177
|
+
toHexLegacy
|
|
132
178
|
};
|
|
133
179
|
//# sourceMappingURL=index.js.map
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/assert.ts","../../src/hex.ts","../../src/address.ts","../../src/hash.ts"],"sourcesContent":["export type AssertCallback = (value: unknown, message: string) => string | boolean\n\nexport type AssertConfig = string | AssertCallback | boolean\n\nexport const assertError = (value: unknown, assert: AssertConfig | undefined, defaultMessage: string) => {\n if (assert) {\n const assertString = typeof assert === 'string' ? assert : typeof assert === 'boolean' ? defaultMessage : assert(value, defaultMessage)\n if (assertString) {\n throw Error(assertString === true ? defaultMessage : assertString)\n }\n }\n return undefined\n}\n","import { isArrayBuffer } from '@xylabs/arraybuffer'\n\nimport { AssertConfig, assertError } from './assert'\n\nexport const hexRegex = /^[0-9a-f]+$/i\nexport const hexRegexWithPrefix = /0x[0-9a-f]+$/i\n\nexport type Hex = string\n\nexport const hexFrom = (buffer: ArrayBuffer) => {\n return [...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, '0')).join('')\n}\n\n//determine the number of nibbles for a given number of bits\nexport const bitsToNibbles = (value: number): number => {\n const nibbles = value >> 2\n if (value !== nibbles << 2) throw Error('Bits for nibbles must multiple of 4')\n return nibbles\n}\n\n//determine the number of nibbles for a given number of bits\nexport const nibblesToBits = (value: number): number => {\n return value << 2\n}\n\n//are the number of bit a round nibble (factor of 4)?\nexport const isRoundNibble = (value: number) => {\n return (value >> 2) << 2 === value\n}\n\nexport const isHex = (value: unknown, bitLength?: number): value is Hex => {\n //Is it a string?\n if (typeof value !== 'string') return false\n\n //If a bitLength specified, does it conform?\n if (bitLength !== undefined && value.length !== bitsToNibbles(bitLength)) return false\n\n //Does it only has hex values?\n return hexRegex.test(value)\n}\n\nexport const toHex = (buffer: ArrayBuffer) => {\n return [...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, '0')).join('')\n}\n\nexport function asHex(value: unknown): Hex | undefined\nexport function asHex(value: unknown, bitLength?: number): Hex | undefined\nexport function asHex(value: unknown, assert: AssertConfig): Hex\nexport function asHex(value: unknown, bitLength: number | undefined, assert?: AssertConfig): Hex\nexport function asHex(value: unknown, assertOrBitLength?: AssertConfig | number, assertOnly?: AssertConfig): Hex | undefined {\n const bitLength = typeof assertOrBitLength === 'number' ? assertOrBitLength : undefined\n const assert = typeof assertOrBitLength !== 'number' ? assertOrBitLength : assertOnly\n\n let stringValue: string | undefined = undefined\n\n switch (typeof value) {\n case 'string':\n //remove the leading 0x if it is there\n stringValue = hexRegexWithPrefix.test(value) ? value.substring(2) : value\n break\n case 'number':\n if (value === Math.floor(value)) {\n stringValue = value.toString(16)\n } else {\n return assertError(value, assert, 'Numbers must be whole')\n }\n break\n case 'bigint':\n stringValue = value.toString(16)\n break\n case 'object':\n if (isArrayBuffer(value)) {\n stringValue = hexFrom(value)\n } else {\n return assertError(value, assert, 'Unsupported object')\n }\n break\n default:\n return assertError(value, assert, `Unsupported type [${typeof value}]`)\n }\n\n //make it conform to the bit length if shorter\n if (stringValue && bitLength) {\n stringValue = stringValue.padStart(bitsToNibbles(bitLength), '0')\n }\n\n return isHex(stringValue, bitLength) ? stringValue.toLowerCase() : assertError(value, assert, 'Unable to convert to Hash')\n}\n","import { AssertConfig, assertError } from './assert'\nimport { asHex, bitsToNibbles, isHex } from './hex'\n\nexport const addressRegex = /0x[0-9a-f]+/i\n\nexport type Address = string\n\nexport const isAddress = (value: unknown, bitLength = 160): value is Address => {\n //Is it a string?\n if (typeof value !== 'string') return false\n\n //Does it only has hex values and leading 0x?\n if (!addressRegex.test(value)) return false\n\n const valueHex = value.substring(2)\n\n //If a bitLength specified, does it conform?\n if (bitLength !== undefined && valueHex.length !== bitsToNibbles(bitLength)) return false\n\n return isHex(valueHex, bitLength)\n}\n\nexport function asAddress(value: unknown): Address | undefined\nexport function asAddress(value: unknown, assert: AssertConfig): Address\nexport function asAddress(value: unknown, bitLength: number): Address | undefined\nexport function asAddress(value: unknown, bitLength: number, assert: AssertConfig): Address\nexport function asAddress(value: unknown, assertOrBitLength?: AssertConfig | number, assertOnly?: AssertConfig): Address | undefined {\n const bitLength = typeof assertOrBitLength === 'number' ? assertOrBitLength : 160\n const assert = typeof assertOrBitLength !== 'number' ? assertOrBitLength : assertOnly\n\n const result = `0x${asHex(value, bitLength, assert)}`\n return isAddress(result, bitLength) ? result : assertError(value, assert, 'Resulting value is not an Address')\n}\n","import { AssertConfig, assertError } from './assert'\nimport { asHex, Hex, isHex, nibblesToBits } from './hex'\n\nexport type HashBitLength = 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096\nexport const HashBitLength: HashBitLength[] = [32, 64, 128, 256, 512, 1024, 2048, 4096]\n\nexport const isHashBitLength = (value: unknown): value is HashBitLength => {\n return typeof value === 'number' && HashBitLength.includes(value as HashBitLength)\n}\n\nexport type Hash = Hex\nexport const isHash = (value: unknown, bitLength: HashBitLength = 256): value is Hash => {\n if (!isHex(value, bitLength)) return false\n\n const hex = asHex(value, bitLength)\n if (!hex) return false\n\n if (!isHashBitLength(nibblesToBits(hex.length))) return false\n\n return true\n}\n\nexport function asHash(value: unknown): Hash | undefined\nexport function asHash(value: unknown, assert: AssertConfig): Hash\nexport function asHash(value: unknown, bitLength?: HashBitLength): Hash | undefined\nexport function asHash(value: unknown, bitLength: HashBitLength | undefined, assert: AssertConfig): Hash\nexport function asHash(value: unknown, assertOrBitLength?: AssertConfig | HashBitLength, assertOnly?: AssertConfig): Hash | undefined {\n const bitLength: HashBitLength = typeof assertOrBitLength === 'number' ? assertOrBitLength : 256\n const assert = typeof assertOrBitLength !== 'number' ? assertOrBitLength : assertOnly\n\n const result = asHex(value, bitLength, assert)\n return isHash(result, bitLength) ? result : assertError(value, assert, 'Resulting value is not a Hash')\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/assert.ts","../../src/hex/from.ts","../../src/hex/nibble.ts","../../src/hex/regex.ts","../../src/hex/is.ts","../../src/hex/as.ts","../../src/hex/legacy.ts","../../src/address.ts","../../src/hash.ts"],"sourcesContent":["export type AssertCallback = (value: unknown, message: string) => string | boolean\n\nexport type AssertConfig = string | AssertCallback | boolean\n\nexport const assertError = (value: unknown, assert: AssertConfig | undefined, defaultMessage: string) => {\n if (assert) {\n const assertString = typeof assert === 'string' ? assert : typeof assert === 'boolean' ? defaultMessage : assert(value, defaultMessage)\n if (assertString) {\n throw Error(assertString === true ? defaultMessage : assertString)\n }\n }\n return undefined\n}\n","import { isArrayBuffer } from '@xylabs/arraybuffer'\n\nimport { isHex } from './is'\nimport { HexConfig } from './model'\nimport { bitsToNibbles } from './nibble'\n\nexport const hexFromArrayBuffer = (buffer: ArrayBuffer, config?: HexConfig): string => {\n const unPadded = [...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, '0')).join('')\n return hexFromHexString(unPadded, config)\n}\n\nexport const hexFromBigInt = (value: bigint, config: HexConfig = {}): string => {\n const { bitLength } = config\n const unPadded = value.toString(16)\n const padded = bitLength === undefined ? unPadded : unPadded.padStart(bitsToNibbles(bitLength), '0')\n return hexFromHexString(padded, config)\n}\n\nexport const hexFromNumber = (value: number, config?: HexConfig): string => {\n return hexFromBigInt(BigInt(value), config)\n}\n\nexport const hexFromHexString = (value: string, config: HexConfig = {}): string => {\n const { prefix = false, byteSize = 8 } = config\n const nibbleBoundary = bitsToNibbles(byteSize)\n const unPadded = (value.startsWith('0x') ? value.substring(2) : value).toLowerCase()\n if (isHex(unPadded)) {\n const padded = unPadded.padStart(unPadded.length + (unPadded.length % nibbleBoundary), '0')\n return prefix ? `0x${padded}` : padded\n } else {\n throw Error('Received string is not a value hex')\n }\n}\n\nexport const hexFrom = (value: unknown, config?: HexConfig): string => {\n switch (typeof value) {\n case 'string':\n return hexFromHexString(value, config)\n case 'bigint':\n return hexFromBigInt(value, config)\n case 'number':\n return hexFromNumber(value, config)\n case 'object':\n if (isArrayBuffer(value)) {\n return hexFromArrayBuffer(value, config)\n } else {\n throw Error('Invalid type: object !== ArrayBuffer')\n }\n default:\n throw Error(`Invalid type: ${typeof value}`)\n }\n}\n","//determine the number of nibbles for a given number of bits\nexport const bitsToNibbles = (value: number): number => {\n const nibbles = value >> 2\n if (value !== nibbles << 2) throw Error('Bits for nibbles must multiple of 4')\n return nibbles\n}\n\n//determine the number of nibbles for a given number of bits\nexport const nibblesToBits = (value: number): number => {\n return value << 2\n}\n","export const hexRegex = /^[0-9a-f]+$/i\nexport const hexRegexWithPrefix = /0x[0-9a-f]+$/i\n","import { hexFromHexString } from './from'\nimport { Hex } from './model'\nimport { bitsToNibbles } from './nibble'\nimport { hexRegex } from './regex'\n\nexport const isHexZero = (value: string) => {\n return BigInt(hexFromHexString(value, { prefix: true })) === 0n\n}\n\nexport const isHex = (value: unknown, bitLength?: number): value is Hex => {\n //Is it a string?\n if (typeof value !== 'string') return false\n\n console.log(`BitLength: ${value.length << 2}|${bitLength}`)\n\n //If a bitLength specified, does it conform?\n if (bitLength !== undefined && value.length !== bitsToNibbles(bitLength)) return false\n\n //Does it only has hex values?\n return hexRegex.test(value)\n}\n","import { AssertConfig, assertError } from '../assert'\nimport { hexFromHexString } from './from'\nimport { isHex } from './is'\nimport { Hex } from './model'\n\nexport function asHex(value: unknown): Hex | undefined\nexport function asHex(value: unknown, assert: AssertConfig): Hex\nexport function asHex(value: unknown, assert?: AssertConfig): Hex | undefined {\n let stringValue: string | undefined = undefined\n\n switch (typeof value) {\n case 'string':\n stringValue = hexFromHexString(value)\n break\n default:\n return assertError(value, assert, `Unsupported type [${typeof value}]`)\n }\n\n return isHex(stringValue) ? stringValue : assertError(value, assert, `Value is not Hex [${value}]`)\n}\n","export const toHexLegacy = (buffer: ArrayBuffer) => {\n return [...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, '0')).join('')\n}\n\n/** @deprecated use toHexLegacy instead */\nexport const toHex = (buffer: ArrayBuffer) => {\n return toHexLegacy(buffer)\n}\n","import { AssertConfig, assertError } from './assert'\nimport { bitsToNibbles, HexConfig, hexFrom, hexFromHexString, isHex } from './hex'\n\nexport const addressRegex = /0x[0-9a-f]+/i\n\nexport type Address = string\n\nexport const toAddress = (value: unknown, config: HexConfig = {}) => {\n const { bitLength = 160, prefix = true } = config\n return hexFrom(value, { bitLength, prefix, ...config })\n}\n\nexport const isAddress = (value: unknown, bitLength = 160): value is Address => {\n //Is it a string?\n if (typeof value !== 'string') return false\n\n //Does it only has hex values and leading 0x?\n if (!addressRegex.test(value)) return false\n\n const valueHex = value.substring(2)\n\n //If a bitLength specified, does it conform?\n if (bitLength !== undefined && valueHex.length !== bitsToNibbles(bitLength)) return false\n\n return isHex(valueHex, bitLength)\n}\n\nexport function asAddress(value: unknown): Address | undefined\nexport function asAddress(value: unknown, assert: AssertConfig): Address\nexport function asAddress(value: unknown, assert?: AssertConfig): Address | undefined {\n let stringValue: string | undefined = undefined\n\n switch (typeof value) {\n case 'string':\n stringValue = hexFromHexString(value, { prefix: true })\n break\n default:\n return assert ? assertError(value, assert, `Unsupported type [${typeof value}]`) : undefined\n }\n return isAddress(stringValue) ? stringValue : assertError(value, assert, `Value is not an Address [${value}]`)\n}\n","import { AssertConfig, assertError } from './assert'\nimport { Hex, hexFromHexString, isHex } from './hex'\n\nexport type HashBitLength = 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096\nexport const HashBitLength: HashBitLength[] = [32, 64, 128, 256, 512, 1024, 2048, 4096]\n\nexport const isHashBitLength = (value: unknown): value is HashBitLength => {\n return typeof value === 'number' && HashBitLength.includes(value as HashBitLength)\n}\n\nexport type Hash = Hex\nexport const isHash = (value: unknown, bitLength: HashBitLength = 256): value is Hash => {\n return isHex(value, bitLength)\n}\n\nexport function asHash(value: unknown): Hash | undefined\nexport function asHash(value: unknown, assert: AssertConfig): Hash\nexport function asHash(value: unknown, assert?: AssertConfig): Hash | undefined {\n let stringValue: string | undefined = undefined\n\n switch (typeof value) {\n case 'string':\n stringValue = hexFromHexString(value)\n break\n default:\n return assert ? assertError(value, assert, `Unsupported type [${typeof value}]`) : undefined\n }\n return isHash(stringValue) ? stringValue : assertError(value, assert, `Value is not a Hash [${value}]`)\n}\n"],"mappings":"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","names":[]}
|