@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
package/package.json
CHANGED
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"esm"
|
|
39
39
|
],
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@xylabs/arraybuffer": "~2.13.
|
|
41
|
+
"@xylabs/arraybuffer": "~2.13.17"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@xylabs/ts-scripts-yarn3": "^3.2.10",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"url": "https://github.com/xylabs/sdk-js.git"
|
|
54
54
|
},
|
|
55
55
|
"sideEffects": false,
|
|
56
|
-
"version": "2.13.
|
|
56
|
+
"version": "2.13.17",
|
|
57
57
|
"packageManager": "yarn@3.3.1",
|
|
58
58
|
"type": "module"
|
|
59
59
|
}
|
package/src/address.ts
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import { AssertConfig, assertError } from './assert'
|
|
2
|
-
import {
|
|
2
|
+
import { bitsToNibbles, HexConfig, hexFrom, hexFromHexString, isHex } from './hex'
|
|
3
3
|
|
|
4
4
|
export const addressRegex = /0x[0-9a-f]+/i
|
|
5
5
|
|
|
6
6
|
export type Address = string
|
|
7
7
|
|
|
8
|
+
export const toAddress = (value: unknown, config: HexConfig = {}) => {
|
|
9
|
+
const { bitLength = 160, prefix = true } = config
|
|
10
|
+
return hexFrom(value, { bitLength, prefix, ...config })
|
|
11
|
+
}
|
|
12
|
+
|
|
8
13
|
export const isAddress = (value: unknown, bitLength = 160): value is Address => {
|
|
9
14
|
//Is it a string?
|
|
10
15
|
if (typeof value !== 'string') return false
|
|
@@ -22,12 +27,15 @@ export const isAddress = (value: unknown, bitLength = 160): value is Address =>
|
|
|
22
27
|
|
|
23
28
|
export function asAddress(value: unknown): Address | undefined
|
|
24
29
|
export function asAddress(value: unknown, assert: AssertConfig): Address
|
|
25
|
-
export function asAddress(value: unknown,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
export function asAddress(value: unknown, assert?: AssertConfig): Address | undefined {
|
|
31
|
+
let stringValue: string | undefined = undefined
|
|
32
|
+
|
|
33
|
+
switch (typeof value) {
|
|
34
|
+
case 'string':
|
|
35
|
+
stringValue = hexFromHexString(value, { prefix: true })
|
|
36
|
+
break
|
|
37
|
+
default:
|
|
38
|
+
return assert ? assertError(value, assert, `Unsupported type [${typeof value}]`) : undefined
|
|
39
|
+
}
|
|
40
|
+
return isAddress(stringValue) ? stringValue : assertError(value, assert, `Value is not an Address [${value}]`)
|
|
33
41
|
}
|
package/src/hash.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AssertConfig, assertError } from './assert'
|
|
2
|
-
import {
|
|
2
|
+
import { Hex, hexFromHexString, isHex } from './hex'
|
|
3
3
|
|
|
4
4
|
export type HashBitLength = 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096
|
|
5
5
|
export const HashBitLength: HashBitLength[] = [32, 64, 128, 256, 512, 1024, 2048, 4096]
|
|
@@ -10,24 +10,20 @@ export const isHashBitLength = (value: unknown): value is HashBitLength => {
|
|
|
10
10
|
|
|
11
11
|
export type Hash = Hex
|
|
12
12
|
export const isHash = (value: unknown, bitLength: HashBitLength = 256): value is Hash => {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const hex = asHex(value, bitLength)
|
|
16
|
-
if (!hex) return false
|
|
17
|
-
|
|
18
|
-
if (!isHashBitLength(nibblesToBits(hex.length))) return false
|
|
19
|
-
|
|
20
|
-
return true
|
|
13
|
+
return isHex(value, bitLength)
|
|
21
14
|
}
|
|
22
15
|
|
|
23
16
|
export function asHash(value: unknown): Hash | undefined
|
|
24
17
|
export function asHash(value: unknown, assert: AssertConfig): Hash
|
|
25
|
-
export function asHash(value: unknown,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
18
|
+
export function asHash(value: unknown, assert?: AssertConfig): Hash | undefined {
|
|
19
|
+
let stringValue: string | undefined = undefined
|
|
20
|
+
|
|
21
|
+
switch (typeof value) {
|
|
22
|
+
case 'string':
|
|
23
|
+
stringValue = hexFromHexString(value)
|
|
24
|
+
break
|
|
25
|
+
default:
|
|
26
|
+
return assert ? assertError(value, assert, `Unsupported type [${typeof value}]`) : undefined
|
|
27
|
+
}
|
|
28
|
+
return isHash(stringValue) ? stringValue : assertError(value, assert, `Value is not a Hash [${value}]`)
|
|
33
29
|
}
|
package/src/hex/as.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AssertConfig, assertError } from '../assert'
|
|
2
|
+
import { hexFromHexString } from './from'
|
|
3
|
+
import { isHex } from './is'
|
|
4
|
+
import { Hex } from './model'
|
|
5
|
+
|
|
6
|
+
export function asHex(value: unknown): Hex | undefined
|
|
7
|
+
export function asHex(value: unknown, assert: AssertConfig): Hex
|
|
8
|
+
export function asHex(value: unknown, assert?: AssertConfig): Hex | undefined {
|
|
9
|
+
let stringValue: string | undefined = undefined
|
|
10
|
+
|
|
11
|
+
switch (typeof value) {
|
|
12
|
+
case 'string':
|
|
13
|
+
stringValue = hexFromHexString(value)
|
|
14
|
+
break
|
|
15
|
+
default:
|
|
16
|
+
return assertError(value, assert, `Unsupported type [${typeof value}]`)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return isHex(stringValue) ? stringValue : assertError(value, assert, `Value is not Hex [${value}]`)
|
|
20
|
+
}
|
package/src/hex/from.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { isArrayBuffer } from '@xylabs/arraybuffer'
|
|
2
|
+
|
|
3
|
+
import { isHex } from './is'
|
|
4
|
+
import { HexConfig } from './model'
|
|
5
|
+
import { bitsToNibbles } from './nibble'
|
|
6
|
+
|
|
7
|
+
export const hexFromArrayBuffer = (buffer: ArrayBuffer, config?: HexConfig): string => {
|
|
8
|
+
const unPadded = [...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, '0')).join('')
|
|
9
|
+
return hexFromHexString(unPadded, config)
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const hexFromBigInt = (value: bigint, config: HexConfig = {}): string => {
|
|
13
|
+
const { bitLength } = config
|
|
14
|
+
const unPadded = value.toString(16)
|
|
15
|
+
const padded = bitLength === undefined ? unPadded : unPadded.padStart(bitsToNibbles(bitLength), '0')
|
|
16
|
+
return hexFromHexString(padded, config)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export const hexFromNumber = (value: number, config?: HexConfig): string => {
|
|
20
|
+
return hexFromBigInt(BigInt(value), config)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export const hexFromHexString = (value: string, config: HexConfig = {}): string => {
|
|
24
|
+
const { prefix = false, byteSize = 8 } = config
|
|
25
|
+
const nibbleBoundary = bitsToNibbles(byteSize)
|
|
26
|
+
const unPadded = (value.startsWith('0x') ? value.substring(2) : value).toLowerCase()
|
|
27
|
+
if (isHex(unPadded)) {
|
|
28
|
+
const padded = unPadded.padStart(unPadded.length + (unPadded.length % nibbleBoundary), '0')
|
|
29
|
+
return prefix ? `0x${padded}` : padded
|
|
30
|
+
} else {
|
|
31
|
+
throw Error('Received string is not a value hex')
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export const hexFrom = (value: unknown, config?: HexConfig): string => {
|
|
36
|
+
switch (typeof value) {
|
|
37
|
+
case 'string':
|
|
38
|
+
return hexFromHexString(value, config)
|
|
39
|
+
case 'bigint':
|
|
40
|
+
return hexFromBigInt(value, config)
|
|
41
|
+
case 'number':
|
|
42
|
+
return hexFromNumber(value, config)
|
|
43
|
+
case 'object':
|
|
44
|
+
if (isArrayBuffer(value)) {
|
|
45
|
+
return hexFromArrayBuffer(value, config)
|
|
46
|
+
} else {
|
|
47
|
+
throw Error('Invalid type: object !== ArrayBuffer')
|
|
48
|
+
}
|
|
49
|
+
default:
|
|
50
|
+
throw Error(`Invalid type: ${typeof value}`)
|
|
51
|
+
}
|
|
52
|
+
}
|
package/src/hex/index.ts
ADDED
package/src/hex/is.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { hexFromHexString } from './from'
|
|
2
|
+
import { Hex } from './model'
|
|
3
|
+
import { bitsToNibbles } from './nibble'
|
|
4
|
+
import { hexRegex } from './regex'
|
|
5
|
+
|
|
6
|
+
export const isHexZero = (value: string) => {
|
|
7
|
+
return BigInt(hexFromHexString(value, { prefix: true })) === 0n
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const isHex = (value: unknown, bitLength?: number): value is Hex => {
|
|
11
|
+
//Is it a string?
|
|
12
|
+
if (typeof value !== 'string') return false
|
|
13
|
+
|
|
14
|
+
//If a bitLength specified, does it conform?
|
|
15
|
+
if (bitLength !== undefined && value.length !== bitsToNibbles(bitLength)) return false
|
|
16
|
+
|
|
17
|
+
//Does it only has hex values?
|
|
18
|
+
return hexRegex.test(value)
|
|
19
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export const toHexLegacy = (buffer: ArrayBuffer) => {
|
|
2
|
+
return [...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, '0')).join('')
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
/** @deprecated use toHexLegacy instead */
|
|
6
|
+
export const toHex = (buffer: ArrayBuffer) => {
|
|
7
|
+
return toHexLegacy(buffer)
|
|
8
|
+
}
|
package/src/hex/model.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
//determine the number of nibbles for a given number of bits
|
|
2
|
+
export const bitsToNibbles = (value: number): number => {
|
|
3
|
+
const nibbles = value >> 2
|
|
4
|
+
if (value !== nibbles << 2) throw Error('Bits for nibbles must multiple of 4')
|
|
5
|
+
return nibbles
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
//determine the number of nibbles for a given number of bits
|
|
9
|
+
export const nibblesToBits = (value: number): number => {
|
|
10
|
+
return value << 2
|
|
11
|
+
}
|
package/src/hex/regex.ts
ADDED
package/dist/browser/hex.d.cts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { AssertConfig } from './assert';
|
|
2
|
-
export declare const hexRegex: RegExp;
|
|
3
|
-
export declare const hexRegexWithPrefix: RegExp;
|
|
4
|
-
export type Hex = string;
|
|
5
|
-
export declare const hexFrom: (buffer: ArrayBuffer) => string;
|
|
6
|
-
export declare const bitsToNibbles: (value: number) => number;
|
|
7
|
-
export declare const nibblesToBits: (value: number) => number;
|
|
8
|
-
export declare const isRoundNibble: (value: number) => boolean;
|
|
9
|
-
export declare const isHex: (value: unknown, bitLength?: number) => value is string;
|
|
10
|
-
export declare const toHex: (buffer: ArrayBuffer) => string;
|
|
11
|
-
export declare function asHex(value: unknown): Hex | undefined;
|
|
12
|
-
export declare function asHex(value: unknown, bitLength?: number): Hex | undefined;
|
|
13
|
-
export declare function asHex(value: unknown, assert: AssertConfig): Hex;
|
|
14
|
-
export declare function asHex(value: unknown, bitLength: number | undefined, assert?: AssertConfig): Hex;
|
|
15
|
-
//# sourceMappingURL=hex.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hex.d.ts","sourceRoot":"","sources":["../../src/hex.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAe,MAAM,UAAU,CAAA;AAEpD,eAAO,MAAM,QAAQ,QAAiB,CAAA;AACtC,eAAO,MAAM,kBAAkB,QAAkB,CAAA;AAEjD,MAAM,MAAM,GAAG,GAAG,MAAM,CAAA;AAExB,eAAO,MAAM,OAAO,WAAY,WAAW,WAE1C,CAAA;AAGD,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,MAI7C,CAAA;AAGD,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,MAE7C,CAAA;AAGD,eAAO,MAAM,aAAa,UAAW,MAAM,YAE1C,CAAA;AAED,eAAO,MAAM,KAAK,UAAW,OAAO,cAAc,MAAM,oBASvD,CAAA;AAED,eAAO,MAAM,KAAK,WAAY,WAAW,WAExC,CAAA;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,GAAG,SAAS,CAAA;AACtD,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAAA;AAC1E,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,GAAG,GAAG,CAAA;AAChE,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,GAAG,CAAA"}
|
package/dist/browser/hex.d.mts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { AssertConfig } from './assert';
|
|
2
|
-
export declare const hexRegex: RegExp;
|
|
3
|
-
export declare const hexRegexWithPrefix: RegExp;
|
|
4
|
-
export type Hex = string;
|
|
5
|
-
export declare const hexFrom: (buffer: ArrayBuffer) => string;
|
|
6
|
-
export declare const bitsToNibbles: (value: number) => number;
|
|
7
|
-
export declare const nibblesToBits: (value: number) => number;
|
|
8
|
-
export declare const isRoundNibble: (value: number) => boolean;
|
|
9
|
-
export declare const isHex: (value: unknown, bitLength?: number) => value is string;
|
|
10
|
-
export declare const toHex: (buffer: ArrayBuffer) => string;
|
|
11
|
-
export declare function asHex(value: unknown): Hex | undefined;
|
|
12
|
-
export declare function asHex(value: unknown, bitLength?: number): Hex | undefined;
|
|
13
|
-
export declare function asHex(value: unknown, assert: AssertConfig): Hex;
|
|
14
|
-
export declare function asHex(value: unknown, bitLength: number | undefined, assert?: AssertConfig): Hex;
|
|
15
|
-
//# sourceMappingURL=hex.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hex.d.ts","sourceRoot":"","sources":["../../src/hex.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAe,MAAM,UAAU,CAAA;AAEpD,eAAO,MAAM,QAAQ,QAAiB,CAAA;AACtC,eAAO,MAAM,kBAAkB,QAAkB,CAAA;AAEjD,MAAM,MAAM,GAAG,GAAG,MAAM,CAAA;AAExB,eAAO,MAAM,OAAO,WAAY,WAAW,WAE1C,CAAA;AAGD,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,MAI7C,CAAA;AAGD,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,MAE7C,CAAA;AAGD,eAAO,MAAM,aAAa,UAAW,MAAM,YAE1C,CAAA;AAED,eAAO,MAAM,KAAK,UAAW,OAAO,cAAc,MAAM,oBASvD,CAAA;AAED,eAAO,MAAM,KAAK,WAAY,WAAW,WAExC,CAAA;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,GAAG,SAAS,CAAA;AACtD,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAAA;AAC1E,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,GAAG,GAAG,CAAA;AAChE,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,GAAG,CAAA"}
|
package/dist/browser/hex.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { AssertConfig } from './assert';
|
|
2
|
-
export declare const hexRegex: RegExp;
|
|
3
|
-
export declare const hexRegexWithPrefix: RegExp;
|
|
4
|
-
export type Hex = string;
|
|
5
|
-
export declare const hexFrom: (buffer: ArrayBuffer) => string;
|
|
6
|
-
export declare const bitsToNibbles: (value: number) => number;
|
|
7
|
-
export declare const nibblesToBits: (value: number) => number;
|
|
8
|
-
export declare const isRoundNibble: (value: number) => boolean;
|
|
9
|
-
export declare const isHex: (value: unknown, bitLength?: number) => value is string;
|
|
10
|
-
export declare const toHex: (buffer: ArrayBuffer) => string;
|
|
11
|
-
export declare function asHex(value: unknown): Hex | undefined;
|
|
12
|
-
export declare function asHex(value: unknown, bitLength?: number): Hex | undefined;
|
|
13
|
-
export declare function asHex(value: unknown, assert: AssertConfig): Hex;
|
|
14
|
-
export declare function asHex(value: unknown, bitLength: number | undefined, assert?: AssertConfig): Hex;
|
|
15
|
-
//# sourceMappingURL=hex.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hex.d.ts","sourceRoot":"","sources":["../../src/hex.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAe,MAAM,UAAU,CAAA;AAEpD,eAAO,MAAM,QAAQ,QAAiB,CAAA;AACtC,eAAO,MAAM,kBAAkB,QAAkB,CAAA;AAEjD,MAAM,MAAM,GAAG,GAAG,MAAM,CAAA;AAExB,eAAO,MAAM,OAAO,WAAY,WAAW,WAE1C,CAAA;AAGD,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,MAI7C,CAAA;AAGD,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,MAE7C,CAAA;AAGD,eAAO,MAAM,aAAa,UAAW,MAAM,YAE1C,CAAA;AAED,eAAO,MAAM,KAAK,UAAW,OAAO,cAAc,MAAM,oBASvD,CAAA;AAED,eAAO,MAAM,KAAK,WAAY,WAAW,WAExC,CAAA;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,GAAG,SAAS,CAAA;AACtD,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAAA;AAC1E,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,GAAG,GAAG,CAAA;AAChE,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,GAAG,CAAA"}
|
package/dist/node/hex.d.cts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { AssertConfig } from './assert';
|
|
2
|
-
export declare const hexRegex: RegExp;
|
|
3
|
-
export declare const hexRegexWithPrefix: RegExp;
|
|
4
|
-
export type Hex = string;
|
|
5
|
-
export declare const hexFrom: (buffer: ArrayBuffer) => string;
|
|
6
|
-
export declare const bitsToNibbles: (value: number) => number;
|
|
7
|
-
export declare const nibblesToBits: (value: number) => number;
|
|
8
|
-
export declare const isRoundNibble: (value: number) => boolean;
|
|
9
|
-
export declare const isHex: (value: unknown, bitLength?: number) => value is string;
|
|
10
|
-
export declare const toHex: (buffer: ArrayBuffer) => string;
|
|
11
|
-
export declare function asHex(value: unknown): Hex | undefined;
|
|
12
|
-
export declare function asHex(value: unknown, bitLength?: number): Hex | undefined;
|
|
13
|
-
export declare function asHex(value: unknown, assert: AssertConfig): Hex;
|
|
14
|
-
export declare function asHex(value: unknown, bitLength: number | undefined, assert?: AssertConfig): Hex;
|
|
15
|
-
//# sourceMappingURL=hex.d.ts.map
|
package/dist/node/hex.d.cts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hex.d.ts","sourceRoot":"","sources":["../../src/hex.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAe,MAAM,UAAU,CAAA;AAEpD,eAAO,MAAM,QAAQ,QAAiB,CAAA;AACtC,eAAO,MAAM,kBAAkB,QAAkB,CAAA;AAEjD,MAAM,MAAM,GAAG,GAAG,MAAM,CAAA;AAExB,eAAO,MAAM,OAAO,WAAY,WAAW,WAE1C,CAAA;AAGD,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,MAI7C,CAAA;AAGD,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,MAE7C,CAAA;AAGD,eAAO,MAAM,aAAa,UAAW,MAAM,YAE1C,CAAA;AAED,eAAO,MAAM,KAAK,UAAW,OAAO,cAAc,MAAM,oBASvD,CAAA;AAED,eAAO,MAAM,KAAK,WAAY,WAAW,WAExC,CAAA;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,GAAG,SAAS,CAAA;AACtD,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAAA;AAC1E,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,GAAG,GAAG,CAAA;AAChE,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,GAAG,CAAA"}
|
package/dist/node/hex.d.mts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { AssertConfig } from './assert';
|
|
2
|
-
export declare const hexRegex: RegExp;
|
|
3
|
-
export declare const hexRegexWithPrefix: RegExp;
|
|
4
|
-
export type Hex = string;
|
|
5
|
-
export declare const hexFrom: (buffer: ArrayBuffer) => string;
|
|
6
|
-
export declare const bitsToNibbles: (value: number) => number;
|
|
7
|
-
export declare const nibblesToBits: (value: number) => number;
|
|
8
|
-
export declare const isRoundNibble: (value: number) => boolean;
|
|
9
|
-
export declare const isHex: (value: unknown, bitLength?: number) => value is string;
|
|
10
|
-
export declare const toHex: (buffer: ArrayBuffer) => string;
|
|
11
|
-
export declare function asHex(value: unknown): Hex | undefined;
|
|
12
|
-
export declare function asHex(value: unknown, bitLength?: number): Hex | undefined;
|
|
13
|
-
export declare function asHex(value: unknown, assert: AssertConfig): Hex;
|
|
14
|
-
export declare function asHex(value: unknown, bitLength: number | undefined, assert?: AssertConfig): Hex;
|
|
15
|
-
//# sourceMappingURL=hex.d.ts.map
|
package/dist/node/hex.d.mts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hex.d.ts","sourceRoot":"","sources":["../../src/hex.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAe,MAAM,UAAU,CAAA;AAEpD,eAAO,MAAM,QAAQ,QAAiB,CAAA;AACtC,eAAO,MAAM,kBAAkB,QAAkB,CAAA;AAEjD,MAAM,MAAM,GAAG,GAAG,MAAM,CAAA;AAExB,eAAO,MAAM,OAAO,WAAY,WAAW,WAE1C,CAAA;AAGD,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,MAI7C,CAAA;AAGD,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,MAE7C,CAAA;AAGD,eAAO,MAAM,aAAa,UAAW,MAAM,YAE1C,CAAA;AAED,eAAO,MAAM,KAAK,UAAW,OAAO,cAAc,MAAM,oBASvD,CAAA;AAED,eAAO,MAAM,KAAK,WAAY,WAAW,WAExC,CAAA;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,GAAG,SAAS,CAAA;AACtD,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAAA;AAC1E,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,GAAG,GAAG,CAAA;AAChE,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,GAAG,CAAA"}
|
package/dist/node/hex.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { AssertConfig } from './assert';
|
|
2
|
-
export declare const hexRegex: RegExp;
|
|
3
|
-
export declare const hexRegexWithPrefix: RegExp;
|
|
4
|
-
export type Hex = string;
|
|
5
|
-
export declare const hexFrom: (buffer: ArrayBuffer) => string;
|
|
6
|
-
export declare const bitsToNibbles: (value: number) => number;
|
|
7
|
-
export declare const nibblesToBits: (value: number) => number;
|
|
8
|
-
export declare const isRoundNibble: (value: number) => boolean;
|
|
9
|
-
export declare const isHex: (value: unknown, bitLength?: number) => value is string;
|
|
10
|
-
export declare const toHex: (buffer: ArrayBuffer) => string;
|
|
11
|
-
export declare function asHex(value: unknown): Hex | undefined;
|
|
12
|
-
export declare function asHex(value: unknown, bitLength?: number): Hex | undefined;
|
|
13
|
-
export declare function asHex(value: unknown, assert: AssertConfig): Hex;
|
|
14
|
-
export declare function asHex(value: unknown, bitLength: number | undefined, assert?: AssertConfig): Hex;
|
|
15
|
-
//# sourceMappingURL=hex.d.ts.map
|
package/dist/node/hex.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hex.d.ts","sourceRoot":"","sources":["../../src/hex.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAe,MAAM,UAAU,CAAA;AAEpD,eAAO,MAAM,QAAQ,QAAiB,CAAA;AACtC,eAAO,MAAM,kBAAkB,QAAkB,CAAA;AAEjD,MAAM,MAAM,GAAG,GAAG,MAAM,CAAA;AAExB,eAAO,MAAM,OAAO,WAAY,WAAW,WAE1C,CAAA;AAGD,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,MAI7C,CAAA;AAGD,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,MAE7C,CAAA;AAGD,eAAO,MAAM,aAAa,UAAW,MAAM,YAE1C,CAAA;AAED,eAAO,MAAM,KAAK,UAAW,OAAO,cAAc,MAAM,oBASvD,CAAA;AAED,eAAO,MAAM,KAAK,WAAY,WAAW,WAExC,CAAA;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,GAAG,SAAS,CAAA;AACtD,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAAA;AAC1E,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,GAAG,GAAG,CAAA;AAChE,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,GAAG,CAAA"}
|
package/src/hex.ts
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { isArrayBuffer } from '@xylabs/arraybuffer'
|
|
2
|
-
|
|
3
|
-
import { AssertConfig, assertError } from './assert'
|
|
4
|
-
|
|
5
|
-
export const hexRegex = /^[0-9a-f]+$/i
|
|
6
|
-
export const hexRegexWithPrefix = /0x[0-9a-f]+$/i
|
|
7
|
-
|
|
8
|
-
export type Hex = string
|
|
9
|
-
|
|
10
|
-
export const hexFrom = (buffer: ArrayBuffer) => {
|
|
11
|
-
return [...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, '0')).join('')
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
//determine the number of nibbles for a given number of bits
|
|
15
|
-
export const bitsToNibbles = (value: number): number => {
|
|
16
|
-
const nibbles = value >> 2
|
|
17
|
-
if (value !== nibbles << 2) throw Error('Bits for nibbles must multiple of 4')
|
|
18
|
-
return nibbles
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
//determine the number of nibbles for a given number of bits
|
|
22
|
-
export const nibblesToBits = (value: number): number => {
|
|
23
|
-
return value << 2
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
//are the number of bit a round nibble (factor of 4)?
|
|
27
|
-
export const isRoundNibble = (value: number) => {
|
|
28
|
-
return (value >> 2) << 2 === value
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export const isHex = (value: unknown, bitLength?: number): value is Hex => {
|
|
32
|
-
//Is it a string?
|
|
33
|
-
if (typeof value !== 'string') return false
|
|
34
|
-
|
|
35
|
-
//If a bitLength specified, does it conform?
|
|
36
|
-
if (bitLength !== undefined && value.length !== bitsToNibbles(bitLength)) return false
|
|
37
|
-
|
|
38
|
-
//Does it only has hex values?
|
|
39
|
-
return hexRegex.test(value)
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export const toHex = (buffer: ArrayBuffer) => {
|
|
43
|
-
return [...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, '0')).join('')
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export function asHex(value: unknown): Hex | undefined
|
|
47
|
-
export function asHex(value: unknown, bitLength?: number): Hex | undefined
|
|
48
|
-
export function asHex(value: unknown, assert: AssertConfig): Hex
|
|
49
|
-
export function asHex(value: unknown, bitLength: number | undefined, assert?: AssertConfig): Hex
|
|
50
|
-
export function asHex(value: unknown, assertOrBitLength?: AssertConfig | number, assertOnly?: AssertConfig): Hex | undefined {
|
|
51
|
-
const bitLength = typeof assertOrBitLength === 'number' ? assertOrBitLength : undefined
|
|
52
|
-
const assert = typeof assertOrBitLength !== 'number' ? assertOrBitLength : assertOnly
|
|
53
|
-
|
|
54
|
-
let stringValue: string | undefined = undefined
|
|
55
|
-
|
|
56
|
-
switch (typeof value) {
|
|
57
|
-
case 'string':
|
|
58
|
-
//remove the leading 0x if it is there
|
|
59
|
-
stringValue = hexRegexWithPrefix.test(value) ? value.substring(2) : value
|
|
60
|
-
break
|
|
61
|
-
case 'number':
|
|
62
|
-
if (value === Math.floor(value)) {
|
|
63
|
-
stringValue = value.toString(16)
|
|
64
|
-
} else {
|
|
65
|
-
return assertError(value, assert, 'Numbers must be whole')
|
|
66
|
-
}
|
|
67
|
-
break
|
|
68
|
-
case 'bigint':
|
|
69
|
-
stringValue = value.toString(16)
|
|
70
|
-
break
|
|
71
|
-
case 'object':
|
|
72
|
-
if (isArrayBuffer(value)) {
|
|
73
|
-
stringValue = hexFrom(value)
|
|
74
|
-
} else {
|
|
75
|
-
return assertError(value, assert, 'Unsupported object')
|
|
76
|
-
}
|
|
77
|
-
break
|
|
78
|
-
default:
|
|
79
|
-
return assertError(value, assert, `Unsupported type [${typeof value}]`)
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
//make it conform to the bit length if shorter
|
|
83
|
-
if (stringValue && bitLength) {
|
|
84
|
-
stringValue = stringValue.padStart(bitsToNibbles(bitLength), '0')
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
return isHex(stringValue, bitLength) ? stringValue.toLowerCase() : assertError(value, assert, 'Unable to convert to Hash')
|
|
88
|
-
}
|