@xylabs/hex 2.13.15 → 2.13.17
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 +96 -51
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +96 -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 +104 -53
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +96 -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 +19 -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":"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,8 +69,14 @@ 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")
|
|
@@ -76,45 +85,78 @@ var isHex = (value, bitLength) => {
|
|
|
76
85
|
return false;
|
|
77
86
|
return hexRegex.test(value);
|
|
78
87
|
};
|
|
79
|
-
|
|
80
|
-
|
|
88
|
+
|
|
89
|
+
// src/hex/from.ts
|
|
90
|
+
var hexFromArrayBuffer = (buffer, config) => {
|
|
91
|
+
const unPadded = [...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, "0")).join("");
|
|
92
|
+
return hexFromHexString(unPadded, config);
|
|
81
93
|
};
|
|
82
|
-
|
|
83
|
-
const bitLength =
|
|
84
|
-
const
|
|
85
|
-
|
|
94
|
+
var hexFromBigInt = (value, config = {}) => {
|
|
95
|
+
const { bitLength } = config;
|
|
96
|
+
const unPadded = value.toString(16);
|
|
97
|
+
const padded = bitLength === void 0 ? unPadded : unPadded.padStart(bitsToNibbles(bitLength), "0");
|
|
98
|
+
return hexFromHexString(padded, config);
|
|
99
|
+
};
|
|
100
|
+
var hexFromNumber = (value, config) => {
|
|
101
|
+
return hexFromBigInt(BigInt(value), config);
|
|
102
|
+
};
|
|
103
|
+
var hexFromHexString = (value, config = {}) => {
|
|
104
|
+
const { prefix = false, byteSize = 8 } = config;
|
|
105
|
+
const nibbleBoundary = bitsToNibbles(byteSize);
|
|
106
|
+
const unPadded = (value.startsWith("0x") ? value.substring(2) : value).toLowerCase();
|
|
107
|
+
if (isHex(unPadded)) {
|
|
108
|
+
const padded = unPadded.padStart(unPadded.length + unPadded.length % nibbleBoundary, "0");
|
|
109
|
+
return prefix ? `0x${padded}` : padded;
|
|
110
|
+
} else {
|
|
111
|
+
throw Error("Received string is not a value hex");
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
var hexFrom = (value, config) => {
|
|
86
115
|
switch (typeof value) {
|
|
87
116
|
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;
|
|
117
|
+
return hexFromHexString(value, config);
|
|
97
118
|
case "bigint":
|
|
98
|
-
|
|
99
|
-
|
|
119
|
+
return hexFromBigInt(value, config);
|
|
120
|
+
case "number":
|
|
121
|
+
return hexFromNumber(value, config);
|
|
100
122
|
case "object":
|
|
101
123
|
if ((0, import_arraybuffer.isArrayBuffer)(value)) {
|
|
102
|
-
|
|
124
|
+
return hexFromArrayBuffer(value, config);
|
|
103
125
|
} else {
|
|
104
|
-
|
|
126
|
+
throw Error("Invalid type: object !== ArrayBuffer");
|
|
105
127
|
}
|
|
128
|
+
default:
|
|
129
|
+
throw Error(`Invalid type: ${typeof value}`);
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
// src/hex/as.ts
|
|
134
|
+
function asHex(value, assert) {
|
|
135
|
+
let stringValue = void 0;
|
|
136
|
+
switch (typeof value) {
|
|
137
|
+
case "string":
|
|
138
|
+
stringValue = hexFromHexString(value);
|
|
106
139
|
break;
|
|
107
140
|
default:
|
|
108
141
|
return assertError(value, assert, `Unsupported type [${typeof value}]`);
|
|
109
142
|
}
|
|
110
|
-
|
|
111
|
-
stringValue = stringValue.padStart(bitsToNibbles(bitLength), "0");
|
|
112
|
-
}
|
|
113
|
-
return isHex(stringValue, bitLength) ? stringValue.toLowerCase() : assertError(value, assert, "Unable to convert to Hash");
|
|
143
|
+
return isHex(stringValue) ? stringValue : assertError(value, assert, `Value is not Hex [${value}]`);
|
|
114
144
|
}
|
|
115
145
|
|
|
146
|
+
// src/hex/legacy.ts
|
|
147
|
+
var toHexLegacy = (buffer) => {
|
|
148
|
+
return [...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, "0")).join("");
|
|
149
|
+
};
|
|
150
|
+
var toHex = (buffer) => {
|
|
151
|
+
return toHexLegacy(buffer);
|
|
152
|
+
};
|
|
153
|
+
|
|
116
154
|
// src/address.ts
|
|
117
155
|
var addressRegex = /0x[0-9a-f]+/i;
|
|
156
|
+
var toAddress = (value, config = {}) => {
|
|
157
|
+
const { bitLength = 160, prefix = true } = config;
|
|
158
|
+
return hexFrom(value, { bitLength, prefix, ...config });
|
|
159
|
+
};
|
|
118
160
|
var isAddress = (value, bitLength = 160) => {
|
|
119
161
|
if (typeof value !== "string")
|
|
120
162
|
return false;
|
|
@@ -125,11 +167,16 @@ var isAddress = (value, bitLength = 160) => {
|
|
|
125
167
|
return false;
|
|
126
168
|
return isHex(valueHex, bitLength);
|
|
127
169
|
};
|
|
128
|
-
function asAddress(value,
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
170
|
+
function asAddress(value, assert) {
|
|
171
|
+
let stringValue = void 0;
|
|
172
|
+
switch (typeof value) {
|
|
173
|
+
case "string":
|
|
174
|
+
stringValue = hexFromHexString(value, { prefix: true });
|
|
175
|
+
break;
|
|
176
|
+
default:
|
|
177
|
+
return assert ? assertError(value, assert, `Unsupported type [${typeof value}]`) : void 0;
|
|
178
|
+
}
|
|
179
|
+
return isAddress(stringValue) ? stringValue : assertError(value, assert, `Value is not an Address [${value}]`);
|
|
133
180
|
}
|
|
134
181
|
|
|
135
182
|
// src/hash.ts
|
|
@@ -138,20 +185,18 @@ var isHashBitLength = (value) => {
|
|
|
138
185
|
return typeof value === "number" && HashBitLength.includes(value);
|
|
139
186
|
};
|
|
140
187
|
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;
|
|
188
|
+
return isHex(value, bitLength);
|
|
149
189
|
};
|
|
150
|
-
function asHash(value,
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
190
|
+
function asHash(value, assert) {
|
|
191
|
+
let stringValue = void 0;
|
|
192
|
+
switch (typeof value) {
|
|
193
|
+
case "string":
|
|
194
|
+
stringValue = hexFromHexString(value);
|
|
195
|
+
break;
|
|
196
|
+
default:
|
|
197
|
+
return assert ? assertError(value, assert, `Unsupported type [${typeof value}]`) : void 0;
|
|
198
|
+
}
|
|
199
|
+
return isHash(stringValue) ? stringValue : assertError(value, assert, `Value is not a Hash [${value}]`);
|
|
155
200
|
}
|
|
156
201
|
// Annotate the CommonJS export names for ESM import in node:
|
|
157
202
|
0 && (module.exports = {
|
|
@@ -162,14 +207,20 @@ function asHash(value, assertOrBitLength, assertOnly) {
|
|
|
162
207
|
asHex,
|
|
163
208
|
bitsToNibbles,
|
|
164
209
|
hexFrom,
|
|
210
|
+
hexFromArrayBuffer,
|
|
211
|
+
hexFromBigInt,
|
|
212
|
+
hexFromHexString,
|
|
213
|
+
hexFromNumber,
|
|
165
214
|
hexRegex,
|
|
166
215
|
hexRegexWithPrefix,
|
|
167
216
|
isAddress,
|
|
168
217
|
isHash,
|
|
169
218
|
isHashBitLength,
|
|
170
219
|
isHex,
|
|
171
|
-
|
|
220
|
+
isHexZero,
|
|
172
221
|
nibblesToBits,
|
|
173
|
-
|
|
222
|
+
toAddress,
|
|
223
|
+
toHex,
|
|
224
|
+
toHexLegacy
|
|
174
225
|
});
|
|
175
226
|
//# 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 //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,8 +22,14 @@ 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")
|
|
@@ -35,45 +38,78 @@ var isHex = (value, bitLength) => {
|
|
|
35
38
|
return false;
|
|
36
39
|
return hexRegex.test(value);
|
|
37
40
|
};
|
|
38
|
-
|
|
39
|
-
|
|
41
|
+
|
|
42
|
+
// src/hex/from.ts
|
|
43
|
+
var hexFromArrayBuffer = (buffer, config) => {
|
|
44
|
+
const unPadded = [...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, "0")).join("");
|
|
45
|
+
return hexFromHexString(unPadded, config);
|
|
40
46
|
};
|
|
41
|
-
|
|
42
|
-
const bitLength =
|
|
43
|
-
const
|
|
44
|
-
|
|
47
|
+
var hexFromBigInt = (value, config = {}) => {
|
|
48
|
+
const { bitLength } = config;
|
|
49
|
+
const unPadded = value.toString(16);
|
|
50
|
+
const padded = bitLength === void 0 ? unPadded : unPadded.padStart(bitsToNibbles(bitLength), "0");
|
|
51
|
+
return hexFromHexString(padded, config);
|
|
52
|
+
};
|
|
53
|
+
var hexFromNumber = (value, config) => {
|
|
54
|
+
return hexFromBigInt(BigInt(value), config);
|
|
55
|
+
};
|
|
56
|
+
var hexFromHexString = (value, config = {}) => {
|
|
57
|
+
const { prefix = false, byteSize = 8 } = config;
|
|
58
|
+
const nibbleBoundary = bitsToNibbles(byteSize);
|
|
59
|
+
const unPadded = (value.startsWith("0x") ? value.substring(2) : value).toLowerCase();
|
|
60
|
+
if (isHex(unPadded)) {
|
|
61
|
+
const padded = unPadded.padStart(unPadded.length + unPadded.length % nibbleBoundary, "0");
|
|
62
|
+
return prefix ? `0x${padded}` : padded;
|
|
63
|
+
} else {
|
|
64
|
+
throw Error("Received string is not a value hex");
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
var hexFrom = (value, config) => {
|
|
45
68
|
switch (typeof value) {
|
|
46
69
|
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;
|
|
70
|
+
return hexFromHexString(value, config);
|
|
56
71
|
case "bigint":
|
|
57
|
-
|
|
58
|
-
|
|
72
|
+
return hexFromBigInt(value, config);
|
|
73
|
+
case "number":
|
|
74
|
+
return hexFromNumber(value, config);
|
|
59
75
|
case "object":
|
|
60
76
|
if (isArrayBuffer(value)) {
|
|
61
|
-
|
|
77
|
+
return hexFromArrayBuffer(value, config);
|
|
62
78
|
} else {
|
|
63
|
-
|
|
79
|
+
throw Error("Invalid type: object !== ArrayBuffer");
|
|
64
80
|
}
|
|
81
|
+
default:
|
|
82
|
+
throw Error(`Invalid type: ${typeof value}`);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
// src/hex/as.ts
|
|
87
|
+
function asHex(value, assert) {
|
|
88
|
+
let stringValue = void 0;
|
|
89
|
+
switch (typeof value) {
|
|
90
|
+
case "string":
|
|
91
|
+
stringValue = hexFromHexString(value);
|
|
65
92
|
break;
|
|
66
93
|
default:
|
|
67
94
|
return assertError(value, assert, `Unsupported type [${typeof value}]`);
|
|
68
95
|
}
|
|
69
|
-
|
|
70
|
-
stringValue = stringValue.padStart(bitsToNibbles(bitLength), "0");
|
|
71
|
-
}
|
|
72
|
-
return isHex(stringValue, bitLength) ? stringValue.toLowerCase() : assertError(value, assert, "Unable to convert to Hash");
|
|
96
|
+
return isHex(stringValue) ? stringValue : assertError(value, assert, `Value is not Hex [${value}]`);
|
|
73
97
|
}
|
|
74
98
|
|
|
99
|
+
// src/hex/legacy.ts
|
|
100
|
+
var toHexLegacy = (buffer) => {
|
|
101
|
+
return [...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, "0")).join("");
|
|
102
|
+
};
|
|
103
|
+
var toHex = (buffer) => {
|
|
104
|
+
return toHexLegacy(buffer);
|
|
105
|
+
};
|
|
106
|
+
|
|
75
107
|
// src/address.ts
|
|
76
108
|
var addressRegex = /0x[0-9a-f]+/i;
|
|
109
|
+
var toAddress = (value, config = {}) => {
|
|
110
|
+
const { bitLength = 160, prefix = true } = config;
|
|
111
|
+
return hexFrom(value, { bitLength, prefix, ...config });
|
|
112
|
+
};
|
|
77
113
|
var isAddress = (value, bitLength = 160) => {
|
|
78
114
|
if (typeof value !== "string")
|
|
79
115
|
return false;
|
|
@@ -84,11 +120,16 @@ var isAddress = (value, bitLength = 160) => {
|
|
|
84
120
|
return false;
|
|
85
121
|
return isHex(valueHex, bitLength);
|
|
86
122
|
};
|
|
87
|
-
function asAddress(value,
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
123
|
+
function asAddress(value, assert) {
|
|
124
|
+
let stringValue = void 0;
|
|
125
|
+
switch (typeof value) {
|
|
126
|
+
case "string":
|
|
127
|
+
stringValue = hexFromHexString(value, { prefix: true });
|
|
128
|
+
break;
|
|
129
|
+
default:
|
|
130
|
+
return assert ? assertError(value, assert, `Unsupported type [${typeof value}]`) : void 0;
|
|
131
|
+
}
|
|
132
|
+
return isAddress(stringValue) ? stringValue : assertError(value, assert, `Value is not an Address [${value}]`);
|
|
92
133
|
}
|
|
93
134
|
|
|
94
135
|
// src/hash.ts
|
|
@@ -97,20 +138,18 @@ var isHashBitLength = (value) => {
|
|
|
97
138
|
return typeof value === "number" && HashBitLength.includes(value);
|
|
98
139
|
};
|
|
99
140
|
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;
|
|
141
|
+
return isHex(value, bitLength);
|
|
108
142
|
};
|
|
109
|
-
function asHash(value,
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
143
|
+
function asHash(value, assert) {
|
|
144
|
+
let stringValue = void 0;
|
|
145
|
+
switch (typeof value) {
|
|
146
|
+
case "string":
|
|
147
|
+
stringValue = hexFromHexString(value);
|
|
148
|
+
break;
|
|
149
|
+
default:
|
|
150
|
+
return assert ? assertError(value, assert, `Unsupported type [${typeof value}]`) : void 0;
|
|
151
|
+
}
|
|
152
|
+
return isHash(stringValue) ? stringValue : assertError(value, assert, `Value is not a Hash [${value}]`);
|
|
114
153
|
}
|
|
115
154
|
export {
|
|
116
155
|
HashBitLength,
|
|
@@ -120,14 +159,20 @@ export {
|
|
|
120
159
|
asHex,
|
|
121
160
|
bitsToNibbles,
|
|
122
161
|
hexFrom,
|
|
162
|
+
hexFromArrayBuffer,
|
|
163
|
+
hexFromBigInt,
|
|
164
|
+
hexFromHexString,
|
|
165
|
+
hexFromNumber,
|
|
123
166
|
hexRegex,
|
|
124
167
|
hexRegexWithPrefix,
|
|
125
168
|
isAddress,
|
|
126
169
|
isHash,
|
|
127
170
|
isHashBitLength,
|
|
128
171
|
isHex,
|
|
129
|
-
|
|
172
|
+
isHexZero,
|
|
130
173
|
nibblesToBits,
|
|
131
|
-
|
|
174
|
+
toAddress,
|
|
175
|
+
toHex,
|
|
176
|
+
toHexLegacy
|
|
132
177
|
};
|
|
133
178
|
//# 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 //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":[]}
|