@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.
Files changed (152) hide show
  1. package/dist/browser/address.d.cts +2 -2
  2. package/dist/browser/address.d.cts.map +1 -1
  3. package/dist/browser/address.d.mts +2 -2
  4. package/dist/browser/address.d.mts.map +1 -1
  5. package/dist/browser/address.d.ts +2 -2
  6. package/dist/browser/address.d.ts.map +1 -1
  7. package/dist/browser/hash.d.cts +0 -2
  8. package/dist/browser/hash.d.cts.map +1 -1
  9. package/dist/browser/hash.d.mts +0 -2
  10. package/dist/browser/hash.d.mts.map +1 -1
  11. package/dist/browser/hash.d.ts +0 -2
  12. package/dist/browser/hash.d.ts.map +1 -1
  13. package/dist/browser/hex/as.d.cts +5 -0
  14. package/dist/browser/hex/as.d.cts.map +1 -0
  15. package/dist/browser/hex/as.d.mts +5 -0
  16. package/dist/browser/hex/as.d.mts.map +1 -0
  17. package/dist/browser/hex/as.d.ts +5 -0
  18. package/dist/browser/hex/as.d.ts.map +1 -0
  19. package/dist/browser/hex/from.d.cts +7 -0
  20. package/dist/browser/hex/from.d.cts.map +1 -0
  21. package/dist/browser/hex/from.d.mts +7 -0
  22. package/dist/browser/hex/from.d.mts.map +1 -0
  23. package/dist/browser/hex/from.d.ts +7 -0
  24. package/dist/browser/hex/from.d.ts.map +1 -0
  25. package/dist/browser/hex/index.d.cts +8 -0
  26. package/dist/browser/hex/index.d.cts.map +1 -0
  27. package/dist/browser/hex/index.d.mts +8 -0
  28. package/dist/browser/hex/index.d.mts.map +1 -0
  29. package/dist/browser/hex/index.d.ts +8 -0
  30. package/dist/browser/hex/index.d.ts.map +1 -0
  31. package/dist/browser/hex/is.d.cts +3 -0
  32. package/dist/browser/hex/is.d.cts.map +1 -0
  33. package/dist/browser/hex/is.d.mts +3 -0
  34. package/dist/browser/hex/is.d.mts.map +1 -0
  35. package/dist/browser/hex/is.d.ts +3 -0
  36. package/dist/browser/hex/is.d.ts.map +1 -0
  37. package/dist/browser/hex/legacy.d.cts +4 -0
  38. package/dist/browser/hex/legacy.d.cts.map +1 -0
  39. package/dist/browser/hex/legacy.d.mts +4 -0
  40. package/dist/browser/hex/legacy.d.mts.map +1 -0
  41. package/dist/browser/hex/legacy.d.ts +4 -0
  42. package/dist/browser/hex/legacy.d.ts.map +1 -0
  43. package/dist/browser/hex/model.d.cts +7 -0
  44. package/dist/browser/hex/model.d.cts.map +1 -0
  45. package/dist/browser/hex/model.d.mts +7 -0
  46. package/dist/browser/hex/model.d.mts.map +1 -0
  47. package/dist/browser/hex/model.d.ts +7 -0
  48. package/dist/browser/hex/model.d.ts.map +1 -0
  49. package/dist/browser/hex/nibble.d.cts +3 -0
  50. package/dist/browser/hex/nibble.d.cts.map +1 -0
  51. package/dist/browser/hex/nibble.d.mts +3 -0
  52. package/dist/browser/hex/nibble.d.mts.map +1 -0
  53. package/dist/browser/hex/nibble.d.ts +3 -0
  54. package/dist/browser/hex/nibble.d.ts.map +1 -0
  55. package/dist/browser/hex/regex.d.cts +3 -0
  56. package/dist/browser/hex/regex.d.cts.map +1 -0
  57. package/dist/browser/hex/regex.d.mts +3 -0
  58. package/dist/browser/hex/regex.d.mts.map +1 -0
  59. package/dist/browser/hex/regex.d.ts +3 -0
  60. package/dist/browser/hex/regex.d.ts.map +1 -0
  61. package/dist/browser/index.cjs +96 -51
  62. package/dist/browser/index.cjs.map +1 -1
  63. package/dist/browser/index.js +96 -51
  64. package/dist/browser/index.js.map +1 -1
  65. package/dist/node/address.d.cts +2 -2
  66. package/dist/node/address.d.cts.map +1 -1
  67. package/dist/node/address.d.mts +2 -2
  68. package/dist/node/address.d.mts.map +1 -1
  69. package/dist/node/address.d.ts +2 -2
  70. package/dist/node/address.d.ts.map +1 -1
  71. package/dist/node/hash.d.cts +0 -2
  72. package/dist/node/hash.d.cts.map +1 -1
  73. package/dist/node/hash.d.mts +0 -2
  74. package/dist/node/hash.d.mts.map +1 -1
  75. package/dist/node/hash.d.ts +0 -2
  76. package/dist/node/hash.d.ts.map +1 -1
  77. package/dist/node/hex/as.d.cts +5 -0
  78. package/dist/node/hex/as.d.cts.map +1 -0
  79. package/dist/node/hex/as.d.mts +5 -0
  80. package/dist/node/hex/as.d.mts.map +1 -0
  81. package/dist/node/hex/as.d.ts +5 -0
  82. package/dist/node/hex/as.d.ts.map +1 -0
  83. package/dist/node/hex/from.d.cts +7 -0
  84. package/dist/node/hex/from.d.cts.map +1 -0
  85. package/dist/node/hex/from.d.mts +7 -0
  86. package/dist/node/hex/from.d.mts.map +1 -0
  87. package/dist/node/hex/from.d.ts +7 -0
  88. package/dist/node/hex/from.d.ts.map +1 -0
  89. package/dist/node/hex/index.d.cts +8 -0
  90. package/dist/node/hex/index.d.cts.map +1 -0
  91. package/dist/node/hex/index.d.mts +8 -0
  92. package/dist/node/hex/index.d.mts.map +1 -0
  93. package/dist/node/hex/index.d.ts +8 -0
  94. package/dist/node/hex/index.d.ts.map +1 -0
  95. package/dist/node/hex/is.d.cts +3 -0
  96. package/dist/node/hex/is.d.cts.map +1 -0
  97. package/dist/node/hex/is.d.mts +3 -0
  98. package/dist/node/hex/is.d.mts.map +1 -0
  99. package/dist/node/hex/is.d.ts +3 -0
  100. package/dist/node/hex/is.d.ts.map +1 -0
  101. package/dist/node/hex/legacy.d.cts +4 -0
  102. package/dist/node/hex/legacy.d.cts.map +1 -0
  103. package/dist/node/hex/legacy.d.mts +4 -0
  104. package/dist/node/hex/legacy.d.mts.map +1 -0
  105. package/dist/node/hex/legacy.d.ts +4 -0
  106. package/dist/node/hex/legacy.d.ts.map +1 -0
  107. package/dist/node/hex/model.d.cts +7 -0
  108. package/dist/node/hex/model.d.cts.map +1 -0
  109. package/dist/node/hex/model.d.mts +7 -0
  110. package/dist/node/hex/model.d.mts.map +1 -0
  111. package/dist/node/hex/model.d.ts +7 -0
  112. package/dist/node/hex/model.d.ts.map +1 -0
  113. package/dist/node/hex/nibble.d.cts +3 -0
  114. package/dist/node/hex/nibble.d.cts.map +1 -0
  115. package/dist/node/hex/nibble.d.mts +3 -0
  116. package/dist/node/hex/nibble.d.mts.map +1 -0
  117. package/dist/node/hex/nibble.d.ts +3 -0
  118. package/dist/node/hex/nibble.d.ts.map +1 -0
  119. package/dist/node/hex/regex.d.cts +3 -0
  120. package/dist/node/hex/regex.d.cts.map +1 -0
  121. package/dist/node/hex/regex.d.mts +3 -0
  122. package/dist/node/hex/regex.d.mts.map +1 -0
  123. package/dist/node/hex/regex.d.ts +3 -0
  124. package/dist/node/hex/regex.d.ts.map +1 -0
  125. package/dist/node/index.cjs +104 -53
  126. package/dist/node/index.cjs.map +1 -1
  127. package/dist/node/index.js +96 -51
  128. package/dist/node/index.js.map +1 -1
  129. package/package.json +2 -2
  130. package/src/address.ts +17 -9
  131. package/src/hash.ts +13 -17
  132. package/src/hex/as.ts +20 -0
  133. package/src/hex/from.ts +52 -0
  134. package/src/hex/index.ts +7 -0
  135. package/src/hex/is.ts +19 -0
  136. package/src/hex/legacy.ts +8 -0
  137. package/src/hex/model.ts +7 -0
  138. package/src/hex/nibble.ts +11 -0
  139. package/src/hex/regex.ts +2 -0
  140. package/dist/browser/hex.d.cts +0 -15
  141. package/dist/browser/hex.d.cts.map +0 -1
  142. package/dist/browser/hex.d.mts +0 -15
  143. package/dist/browser/hex.d.mts.map +0 -1
  144. package/dist/browser/hex.d.ts +0 -15
  145. package/dist/browser/hex.d.ts.map +0 -1
  146. package/dist/node/hex.d.cts +0 -15
  147. package/dist/node/hex.d.cts.map +0 -1
  148. package/dist/node/hex.d.mts +0 -15
  149. package/dist/node/hex.d.mts.map +0 -1
  150. package/dist/node/hex.d.ts +0 -15
  151. package/dist/node/hex.d.ts.map +0 -1
  152. package/src/hex.ts +0 -88
@@ -0,0 +1,7 @@
1
+ export type Hex = string;
2
+ export interface HexConfig {
3
+ bitLength?: number;
4
+ byteSize?: number;
5
+ prefix?: boolean;
6
+ }
7
+ //# sourceMappingURL=model.d.ts.map
@@ -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,7 @@
1
+ export type Hex = string;
2
+ export interface HexConfig {
3
+ bitLength?: number;
4
+ byteSize?: number;
5
+ prefix?: boolean;
6
+ }
7
+ //# sourceMappingURL=model.d.ts.map
@@ -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,3 @@
1
+ export declare const bitsToNibbles: (value: number) => number;
2
+ export declare const nibblesToBits: (value: number) => number;
3
+ //# sourceMappingURL=nibble.d.ts.map
@@ -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,3 @@
1
+ export declare const bitsToNibbles: (value: number) => number;
2
+ export declare const nibblesToBits: (value: number) => number;
3
+ //# sourceMappingURL=nibble.d.ts.map
@@ -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,3 @@
1
+ export declare const bitsToNibbles: (value: number) => number;
2
+ export declare const nibblesToBits: (value: number) => number;
3
+ //# sourceMappingURL=nibble.d.ts.map
@@ -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,3 @@
1
+ export declare const hexRegex: RegExp;
2
+ export declare const hexRegexWithPrefix: RegExp;
3
+ //# sourceMappingURL=regex.d.ts.map
@@ -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,3 @@
1
+ export declare const hexRegex: RegExp;
2
+ export declare const hexRegexWithPrefix: RegExp;
3
+ //# sourceMappingURL=regex.d.ts.map
@@ -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,3 @@
1
+ export declare const hexRegex: RegExp;
2
+ export declare const hexRegexWithPrefix: RegExp;
3
+ //# sourceMappingURL=regex.d.ts.map
@@ -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"}
@@ -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
- isRoundNibble: () => isRoundNibble,
40
+ isHexZero: () => isHexZero,
37
41
  nibblesToBits: () => nibblesToBits,
38
- toHex: () => toHex
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
- var hexRegex = /^[0-9a-f]+$/i;
56
- var hexRegexWithPrefix = /0x[0-9a-f]+$/i;
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
- var isRoundNibble = (value) => {
70
- return value >> 2 << 2 === value;
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
- var toHex = (buffer) => {
80
- return [...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, "0")).join("");
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
- function asHex(value, assertOrBitLength, assertOnly) {
83
- const bitLength = typeof assertOrBitLength === "number" ? assertOrBitLength : void 0;
84
- const assert = typeof assertOrBitLength !== "number" ? assertOrBitLength : assertOnly;
85
- let stringValue = void 0;
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
- stringValue = hexRegexWithPrefix.test(value) ? value.substring(2) : value;
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
- stringValue = value.toString(16);
99
- break;
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
- stringValue = hexFrom(value);
124
+ return hexFromArrayBuffer(value, config);
103
125
  } else {
104
- return assertError(value, assert, "Unsupported object");
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
- if (stringValue && bitLength) {
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, assertOrBitLength, assertOnly) {
129
- const bitLength = typeof assertOrBitLength === "number" ? assertOrBitLength : 160;
130
- const assert = typeof assertOrBitLength !== "number" ? assertOrBitLength : assertOnly;
131
- const result = `0x${asHex(value, bitLength, assert)}`;
132
- return isAddress(result, bitLength) ? result : assertError(value, assert, "Resulting value is not an Address");
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
- if (!isHex(value, bitLength))
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, assertOrBitLength, assertOnly) {
151
- const bitLength = typeof assertOrBitLength === "number" ? assertOrBitLength : 256;
152
- const assert = typeof assertOrBitLength !== "number" ? assertOrBitLength : assertOnly;
153
- const result = asHex(value, bitLength, assert);
154
- return isHash(result, bitLength) ? result : assertError(value, assert, "Resulting value is not a Hash");
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
- isRoundNibble,
220
+ isHexZero,
172
221
  nibblesToBits,
173
- toHex
222
+ toAddress,
223
+ toHex,
224
+ toHexLegacy
174
225
  });
175
226
  //# sourceMappingURL=index.cjs.map
@@ -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":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACIO,IAAM,cAAc,CAAC,OAAgB,QAAkC,mBAA2B;AACvG,MAAI,QAAQ;AACV,UAAM,eAAe,OAAO,WAAW,WAAW,SAAS,OAAO,WAAW,YAAY,iBAAiB,OAAO,OAAO,cAAc;AACtI,QAAI,cAAc;AAChB,YAAM,MAAM,iBAAiB,OAAO,iBAAiB,YAAY;AAAA,IACnE;AAAA,EACF;AACA,SAAO;AACT;;;ACZA,yBAA8B;;;ACCvB,IAAM,gBAAgB,CAAC,UAA0B;AACtD,QAAM,UAAU,SAAS;AACzB,MAAI,UAAU,WAAW;AAAG,UAAM,MAAM,qCAAqC;AAC7E,SAAO;AACT;AAGO,IAAM,gBAAgB,CAAC,UAA0B;AACtD,SAAO,SAAS;AAClB;;;ACVO,IAAM,WAAW;AACjB,IAAM,qBAAqB;;;ACI3B,IAAM,YAAY,CAAC,UAAkB;AAC1C,SAAO,OAAO,iBAAiB,OAAO,EAAE,QAAQ,KAAK,CAAC,CAAC,MAAM;AAC/D;AAEO,IAAM,QAAQ,CAAC,OAAgB,cAAqC;AAEzE,MAAI,OAAO,UAAU;AAAU,WAAO;AAGtC,MAAI,cAAc,UAAa,MAAM,WAAW,cAAc,SAAS;AAAG,WAAO;AAGjF,SAAO,SAAS,KAAK,KAAK;AAC5B;;;AHZO,IAAM,qBAAqB,CAAC,QAAqB,WAA+B;AACrF,QAAM,WAAW,CAAC,GAAG,IAAI,WAAW,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAChG,SAAO,iBAAiB,UAAU,MAAM;AAC1C;AAEO,IAAM,gBAAgB,CAAC,OAAe,SAAoB,CAAC,MAAc;AAC9E,QAAM,EAAE,UAAU,IAAI;AACtB,QAAM,WAAW,MAAM,SAAS,EAAE;AAClC,QAAM,SAAS,cAAc,SAAY,WAAW,SAAS,SAAS,cAAc,SAAS,GAAG,GAAG;AACnG,SAAO,iBAAiB,QAAQ,MAAM;AACxC;AAEO,IAAM,gBAAgB,CAAC,OAAe,WAA+B;AAC1E,SAAO,cAAc,OAAO,KAAK,GAAG,MAAM;AAC5C;AAEO,IAAM,mBAAmB,CAAC,OAAe,SAAoB,CAAC,MAAc;AACjF,QAAM,EAAE,SAAS,OAAO,WAAW,EAAE,IAAI;AACzC,QAAM,iBAAiB,cAAc,QAAQ;AAC7C,QAAM,YAAY,MAAM,WAAW,IAAI,IAAI,MAAM,UAAU,CAAC,IAAI,OAAO,YAAY;AACnF,MAAI,MAAM,QAAQ,GAAG;AACnB,UAAM,SAAS,SAAS,SAAS,SAAS,SAAU,SAAS,SAAS,gBAAiB,GAAG;AAC1F,WAAO,SAAS,KAAK,MAAM,KAAK;AAAA,EAClC,OAAO;AACL,UAAM,MAAM,oCAAoC;AAAA,EAClD;AACF;AAEO,IAAM,UAAU,CAAC,OAAgB,WAA+B;AACrE,UAAQ,OAAO,OAAO;AAAA,IACpB,KAAK;AACH,aAAO,iBAAiB,OAAO,MAAM;AAAA,IACvC,KAAK;AACH,aAAO,cAAc,OAAO,MAAM;AAAA,IACpC,KAAK;AACH,aAAO,cAAc,OAAO,MAAM;AAAA,IACpC,KAAK;AACH,cAAI,kCAAc,KAAK,GAAG;AACxB,eAAO,mBAAmB,OAAO,MAAM;AAAA,MACzC,OAAO;AACL,cAAM,MAAM,sCAAsC;AAAA,MACpD;AAAA,IACF;AACE,YAAM,MAAM,iBAAiB,OAAO,KAAK,EAAE;AAAA,EAC/C;AACF;;;AI5CO,SAAS,MAAM,OAAgB,QAAwC;AAC5E,MAAI,cAAkC;AAEtC,UAAQ,OAAO,OAAO;AAAA,IACpB,KAAK;AACH,oBAAc,iBAAiB,KAAK;AACpC;AAAA,IACF;AACE,aAAO,YAAY,OAAO,QAAQ,qBAAqB,OAAO,KAAK,GAAG;AAAA,EAC1E;AAEA,SAAO,MAAM,WAAW,IAAI,cAAc,YAAY,OAAO,QAAQ,qBAAqB,KAAK,GAAG;AACpG;;;ACnBO,IAAM,cAAc,CAAC,WAAwB;AAClD,SAAO,CAAC,GAAG,IAAI,WAAW,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AACxF;AAGO,IAAM,QAAQ,CAAC,WAAwB;AAC5C,SAAO,YAAY,MAAM;AAC3B;;;ACJO,IAAM,eAAe;AAIrB,IAAM,YAAY,CAAC,OAAgB,SAAoB,CAAC,MAAM;AACnE,QAAM,EAAE,YAAY,KAAK,SAAS,KAAK,IAAI;AAC3C,SAAO,QAAQ,OAAO,EAAE,WAAW,QAAQ,GAAG,OAAO,CAAC;AACxD;AAEO,IAAM,YAAY,CAAC,OAAgB,YAAY,QAA0B;AAE9E,MAAI,OAAO,UAAU;AAAU,WAAO;AAGtC,MAAI,CAAC,aAAa,KAAK,KAAK;AAAG,WAAO;AAEtC,QAAM,WAAW,MAAM,UAAU,CAAC;AAGlC,MAAI,cAAc,UAAa,SAAS,WAAW,cAAc,SAAS;AAAG,WAAO;AAEpF,SAAO,MAAM,UAAU,SAAS;AAClC;AAIO,SAAS,UAAU,OAAgB,QAA4C;AACpF,MAAI,cAAkC;AAEtC,UAAQ,OAAO,OAAO;AAAA,IACpB,KAAK;AACH,oBAAc,iBAAiB,OAAO,EAAE,QAAQ,KAAK,CAAC;AACtD;AAAA,IACF;AACE,aAAO,SAAS,YAAY,OAAO,QAAQ,qBAAqB,OAAO,KAAK,GAAG,IAAI;AAAA,EACvF;AACA,SAAO,UAAU,WAAW,IAAI,cAAc,YAAY,OAAO,QAAQ,4BAA4B,KAAK,GAAG;AAC/G;;;ACpCO,IAAM,gBAAiC,CAAC,IAAI,IAAI,KAAK,KAAK,KAAK,MAAM,MAAM,IAAI;AAE/E,IAAM,kBAAkB,CAAC,UAA2C;AACzE,SAAO,OAAO,UAAU,YAAY,cAAc,SAAS,KAAsB;AACnF;AAGO,IAAM,SAAS,CAAC,OAAgB,YAA2B,QAAuB;AACvF,SAAO,MAAM,OAAO,SAAS;AAC/B;AAIO,SAAS,OAAO,OAAgB,QAAyC;AAC9E,MAAI,cAAkC;AAEtC,UAAQ,OAAO,OAAO;AAAA,IACpB,KAAK;AACH,oBAAc,iBAAiB,KAAK;AACpC;AAAA,IACF;AACE,aAAO,SAAS,YAAY,OAAO,QAAQ,qBAAqB,OAAO,KAAK,GAAG,IAAI;AAAA,EACvF;AACA,SAAO,OAAO,WAAW,IAAI,cAAc,YAAY,OAAO,QAAQ,wBAAwB,KAAK,GAAG;AACxG;","names":[]}
@@ -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
- var hexRegex = /^[0-9a-f]+$/i;
15
- var hexRegexWithPrefix = /0x[0-9a-f]+$/i;
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
- var isRoundNibble = (value) => {
29
- return value >> 2 << 2 === value;
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
- var toHex = (buffer) => {
39
- return [...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, "0")).join("");
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
- function asHex(value, assertOrBitLength, assertOnly) {
42
- const bitLength = typeof assertOrBitLength === "number" ? assertOrBitLength : void 0;
43
- const assert = typeof assertOrBitLength !== "number" ? assertOrBitLength : assertOnly;
44
- let stringValue = void 0;
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
- stringValue = hexRegexWithPrefix.test(value) ? value.substring(2) : value;
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
- stringValue = value.toString(16);
58
- break;
72
+ return hexFromBigInt(value, config);
73
+ case "number":
74
+ return hexFromNumber(value, config);
59
75
  case "object":
60
76
  if (isArrayBuffer(value)) {
61
- stringValue = hexFrom(value);
77
+ return hexFromArrayBuffer(value, config);
62
78
  } else {
63
- return assertError(value, assert, "Unsupported object");
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
- if (stringValue && bitLength) {
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, assertOrBitLength, assertOnly) {
88
- const bitLength = typeof assertOrBitLength === "number" ? assertOrBitLength : 160;
89
- const assert = typeof assertOrBitLength !== "number" ? assertOrBitLength : assertOnly;
90
- const result = `0x${asHex(value, bitLength, assert)}`;
91
- return isAddress(result, bitLength) ? result : assertError(value, assert, "Resulting value is not an Address");
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
- if (!isHex(value, bitLength))
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, assertOrBitLength, assertOnly) {
110
- const bitLength = typeof assertOrBitLength === "number" ? assertOrBitLength : 256;
111
- const assert = typeof assertOrBitLength !== "number" ? assertOrBitLength : assertOnly;
112
- const result = asHex(value, bitLength, assert);
113
- return isHash(result, bitLength) ? result : assertError(value, assert, "Resulting value is not a Hash");
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
- isRoundNibble,
172
+ isHexZero,
130
173
  nibblesToBits,
131
- toHex
174
+ toAddress,
175
+ toHex,
176
+ toHexLegacy
132
177
  };
133
178
  //# sourceMappingURL=index.js.map
@@ -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":[]}