@pezkuwi/util 14.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -0
- package/package.json +49 -0
- package/src/array/chunk.spec.ts +29 -0
- package/src/array/chunk.ts +35 -0
- package/src/array/filter.spec.ts +20 -0
- package/src/array/filter.ts +24 -0
- package/src/array/flatten.spec.ts +33 -0
- package/src/array/flatten.ts +51 -0
- package/src/array/index.ts +14 -0
- package/src/array/range.spec.ts +29 -0
- package/src/array/range.ts +31 -0
- package/src/array/shuffle.spec.ts +39 -0
- package/src/array/shuffle.ts +27 -0
- package/src/array/unzip.spec.ts +14 -0
- package/src/array/unzip.ts +18 -0
- package/src/array/zip.spec.ts +26 -0
- package/src/array/zip.ts +17 -0
- package/src/assert.spec.ts +40 -0
- package/src/assert.ts +50 -0
- package/src/bi/consts.ts +112 -0
- package/src/bi/helpers.ts +23 -0
- package/src/bi/index.ts +16 -0
- package/src/bi/max.spec.ts +32 -0
- package/src/bi/min.spec.ts +26 -0
- package/src/bi/min.ts +16 -0
- package/src/bi/sqrt.spec.ts +59 -0
- package/src/bi/sqrt.ts +43 -0
- package/src/bi/toBigInt.spec.ts +69 -0
- package/src/bi/toBigInt.ts +33 -0
- package/src/bi/toHex.spec.ts +56 -0
- package/src/bi/toHex.ts +16 -0
- package/src/bi/toU8a.spec.ts +99 -0
- package/src/bi/toU8a.ts +72 -0
- package/src/bn/bn.ts +6 -0
- package/src/bn/consts.spec.ts +38 -0
- package/src/bn/consts.ts +112 -0
- package/src/bn/fromHex.spec.ts +15 -0
- package/src/bn/fromHex.ts +4 -0
- package/src/bn/index.ts +18 -0
- package/src/bn/max.spec.ts +32 -0
- package/src/bn/min.spec.ts +26 -0
- package/src/bn/min.ts +36 -0
- package/src/bn/sqrt.spec.ts +37 -0
- package/src/bn/sqrt.ts +50 -0
- package/src/bn/toBn.spec.ts +53 -0
- package/src/bn/toBn.ts +43 -0
- package/src/bn/toHex.spec.ts +50 -0
- package/src/bn/toHex.ts +27 -0
- package/src/bn/toU8a.spec.ts +60 -0
- package/src/bn/toU8a.ts +45 -0
- package/src/buffer/index.ts +8 -0
- package/src/buffer/toU8a.spec.ts +20 -0
- package/src/buffer/toU8a.ts +20 -0
- package/src/bundle.ts +35 -0
- package/src/compact/addLength.spec.ts +14 -0
- package/src/compact/addLength.ts +24 -0
- package/src/compact/defaults.ts +7 -0
- package/src/compact/fromU8a.spec.ts +84 -0
- package/src/compact/fromU8a.ts +109 -0
- package/src/compact/index.ts +28 -0
- package/src/compact/stripLength.spec.ts +17 -0
- package/src/compact/stripLength.ts +26 -0
- package/src/compact/toU8a.spec.ts +59 -0
- package/src/compact/toU8a.ts +53 -0
- package/src/compact/types.ts +4 -0
- package/src/detectPackage.spec.ts +110 -0
- package/src/detectPackage.ts +138 -0
- package/src/extractTime.spec.ts +21 -0
- package/src/extractTime.ts +71 -0
- package/src/float/index.ts +4 -0
- package/src/float/toU8a.spec.ts +52 -0
- package/src/float/toU8a.ts +30 -0
- package/src/format/formatBalance.spec.ts +296 -0
- package/src/format/formatBalance.ts +177 -0
- package/src/format/formatDate.spec.ts +17 -0
- package/src/format/formatDate.ts +22 -0
- package/src/format/formatDecimal.spec.ts +28 -0
- package/src/format/formatDecimal.ts +22 -0
- package/src/format/formatElapsed.spec.ts +44 -0
- package/src/format/formatElapsed.ts +35 -0
- package/src/format/formatNumber.spec.ts +60 -0
- package/src/format/formatNumber.ts +29 -0
- package/src/format/getSeparator.spec.ts +53 -0
- package/src/format/getSeparator.ts +15 -0
- package/src/format/index.ts +9 -0
- package/src/format/si.ts +52 -0
- package/src/has.spec.ts +12 -0
- package/src/has.ts +38 -0
- package/src/hex/addPrefix.spec.ts +32 -0
- package/src/hex/addPrefix.ts +26 -0
- package/src/hex/fixLength.spec.ts +38 -0
- package/src/hex/fixLength.ts +36 -0
- package/src/hex/hasPrefix.spec.ts +32 -0
- package/src/hex/hasPrefix.ts +24 -0
- package/src/hex/index.ts +16 -0
- package/src/hex/stripPrefix.spec.ts +44 -0
- package/src/hex/stripPrefix.ts +30 -0
- package/src/hex/toBigInt.spec.ts +74 -0
- package/src/hex/toBigInt.ts +19 -0
- package/src/hex/toBn.spec.ts +74 -0
- package/src/hex/toBn.ts +40 -0
- package/src/hex/toNumber.spec.ts +20 -0
- package/src/hex/toNumber.ts +24 -0
- package/src/hex/toString.spec.ts +20 -0
- package/src/hex/toString.ts +25 -0
- package/src/hex/toU8a.spec.ts +76 -0
- package/src/hex/toU8a.ts +68 -0
- package/src/hex/toU8aBuffer.spec.ts +38 -0
- package/src/hex/toU8aBuffer.ts +52 -0
- package/src/index.spec.ts +12 -0
- package/src/index.ts +6 -0
- package/src/is/array.spec.ts +20 -0
- package/src/is/array.ts +10 -0
- package/src/is/ascii.spec.ts +49 -0
- package/src/is/ascii.ts +52 -0
- package/src/is/bigInt.spec.ts +26 -0
- package/src/is/bigInt.ts +20 -0
- package/src/is/bn.spec.ts +21 -0
- package/src/is/bn.ts +23 -0
- package/src/is/boolean.spec.ts +26 -0
- package/src/is/boolean.ts +20 -0
- package/src/is/buffer.spec.ts +26 -0
- package/src/is/buffer.ts +28 -0
- package/src/is/childClass.spec.ts +36 -0
- package/src/is/childClass.ts +29 -0
- package/src/is/class.spec.ts +37 -0
- package/src/is/class.ts +12 -0
- package/src/is/codec.spec.ts +52 -0
- package/src/is/codec.ts +26 -0
- package/src/is/compact.spec.ts +27 -0
- package/src/is/compact.ts +19 -0
- package/src/is/error.spec.ts +20 -0
- package/src/is/error.ts +23 -0
- package/src/is/function.spec.ts +20 -0
- package/src/is/function.ts +23 -0
- package/src/is/helpers.ts +23 -0
- package/src/is/hex.spec.ts +77 -0
- package/src/is/hex.ts +36 -0
- package/src/is/index.ts +36 -0
- package/src/is/instanceOf.spec.ts +48 -0
- package/src/is/instanceOf.ts +24 -0
- package/src/is/ip.spec.ts +50 -0
- package/src/is/ip.ts +56 -0
- package/src/is/jsonObject.spec.ts +51 -0
- package/src/is/jsonObject.ts +45 -0
- package/src/is/null.spec.ts +20 -0
- package/src/is/null.ts +20 -0
- package/src/is/number.spec.ts +20 -0
- package/src/is/number.ts +20 -0
- package/src/is/object.spec.ts +32 -0
- package/src/is/object.ts +24 -0
- package/src/is/observable.spec.ts +26 -0
- package/src/is/observable.ts +22 -0
- package/src/is/promise.spec.ts +32 -0
- package/src/is/promise.ts +6 -0
- package/src/is/riscv.spec.ts +36 -0
- package/src/is/riscv.ts +27 -0
- package/src/is/string.spec.ts +32 -0
- package/src/is/string.ts +22 -0
- package/src/is/testChain.spec.ts +25 -0
- package/src/is/testChain.ts +12 -0
- package/src/is/toBigInt.spec.ts +22 -0
- package/src/is/toBigInt.ts +8 -0
- package/src/is/toBn.spec.ts +25 -0
- package/src/is/toBn.ts +8 -0
- package/src/is/u8a.spec.ts +42 -0
- package/src/is/u8a.ts +25 -0
- package/src/is/undefined.spec.ts +23 -0
- package/src/is/undefined.ts +21 -0
- package/src/is/utf8.spec.ts +42 -0
- package/src/is/utf8.ts +207 -0
- package/src/is/wasm.spec.ts +20 -0
- package/src/is/wasm.ts +17 -0
- package/src/lazy.spec.ts +71 -0
- package/src/lazy.ts +63 -0
- package/src/logger.spec.ts +188 -0
- package/src/logger.ts +160 -0
- package/src/memoize.spec.ts +79 -0
- package/src/memoize.ts +49 -0
- package/src/mod.ts +4 -0
- package/src/nextTick.ts +26 -0
- package/src/noop.ts +16 -0
- package/src/number/index.ts +9 -0
- package/src/number/toHex.spec.ts +44 -0
- package/src/number/toHex.ts +27 -0
- package/src/number/toU8a.spec.ts +50 -0
- package/src/number/toU8a.ts +25 -0
- package/src/object/clear.spec.ts +14 -0
- package/src/object/clear.ts +16 -0
- package/src/object/copy.spec.ts +17 -0
- package/src/object/copy.ts +12 -0
- package/src/object/entries.spec.ts +20 -0
- package/src/object/entries.ts +12 -0
- package/src/object/index.ts +10 -0
- package/src/object/keys.spec.ts +19 -0
- package/src/object/keys.ts +10 -0
- package/src/object/property.spec.ts +149 -0
- package/src/object/property.ts +39 -0
- package/src/object/spread.spec.ts +36 -0
- package/src/object/spread.ts +38 -0
- package/src/object/values.spec.ts +19 -0
- package/src/object/values.ts +10 -0
- package/src/packageDetect.ts +13 -0
- package/src/packageInfo.ts +6 -0
- package/src/promisify.spec.ts +50 -0
- package/src/promisify.ts +30 -0
- package/src/string/camelCase.spec.ts +119 -0
- package/src/string/camelCase.ts +79 -0
- package/src/string/index.ts +12 -0
- package/src/string/lowerFirst.spec.ts +41 -0
- package/src/string/lowerFirst.ts +46 -0
- package/src/string/pascalCase.spec.ts +26 -0
- package/src/string/shorten.spec.ts +38 -0
- package/src/string/shorten.ts +24 -0
- package/src/string/toHex.spec.ts +26 -0
- package/src/string/toHex.ts +27 -0
- package/src/string/toU8a.spec.ts +31 -0
- package/src/string/toU8a.ts +28 -0
- package/src/string/upperFirst.spec.ts +41 -0
- package/src/stringify.spec.ts +33 -0
- package/src/stringify.ts +20 -0
- package/src/test/index.ts +4 -0
- package/src/test/performance.ts +92 -0
- package/src/types.ts +100 -0
- package/src/u8a/cmp.spec.ts +62 -0
- package/src/u8a/cmp.ts +50 -0
- package/src/u8a/concat.spec.ts +42 -0
- package/src/u8a/concat.ts +60 -0
- package/src/u8a/concatBuffer.ts +34 -0
- package/src/u8a/empty.spec.ts +46 -0
- package/src/u8a/empty.ts +22 -0
- package/src/u8a/eq.spec.ts +113 -0
- package/src/u8a/eq.ts +46 -0
- package/src/u8a/fixLength.spec.ts +34 -0
- package/src/u8a/fixLength.ts +34 -0
- package/src/u8a/index.ts +22 -0
- package/src/u8a/sorted.spec.ts +20 -0
- package/src/u8a/sorted.ts +22 -0
- package/src/u8a/toBigInt.spec.ts +106 -0
- package/src/u8a/toBigInt.ts +100 -0
- package/src/u8a/toBn.spec.ts +106 -0
- package/src/u8a/toBn.ts +101 -0
- package/src/u8a/toBuffer.spec.ts +20 -0
- package/src/u8a/toBuffer.ts +28 -0
- package/src/u8a/toFloat.spec.ts +86 -0
- package/src/u8a/toFloat.ts +26 -0
- package/src/u8a/toHex.spec.ts +94 -0
- package/src/u8a/toHex.ts +68 -0
- package/src/u8a/toHexBuffer.spec.ts +63 -0
- package/src/u8a/toHexBuffer.ts +30 -0
- package/src/u8a/toNumber.spec.ts +47 -0
- package/src/u8a/toNumber.ts +80 -0
- package/src/u8a/toString.spec.ts +36 -0
- package/src/u8a/toString.ts +26 -0
- package/src/u8a/toU8a.spec.ts +63 -0
- package/src/u8a/toU8a.ts +46 -0
- package/src/u8a/wrap.spec.ts +139 -0
- package/src/u8a/wrap.ts +65 -0
- package/tsconfig.build.json +19 -0
- package/tsconfig.spec.json +17 -0
package/src/hex/toU8a.ts
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
const CHR = '0123456789abcdef';
|
|
5
|
+
const U8 = new Uint8Array(256);
|
|
6
|
+
const U16 = new Uint8Array(256 * 256);
|
|
7
|
+
|
|
8
|
+
for (let i = 0, count = CHR.length; i < count; i++) {
|
|
9
|
+
U8[CHR[i].charCodeAt(0) | 0] = i | 0;
|
|
10
|
+
|
|
11
|
+
if (i > 9) {
|
|
12
|
+
U8[CHR[i].toUpperCase().charCodeAt(0) | 0] = i | 0;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
for (let i = 0; i < 256; i++) {
|
|
17
|
+
const s = i << 8;
|
|
18
|
+
|
|
19
|
+
for (let j = 0; j < 256; j++) {
|
|
20
|
+
U16[s | j] = (U8[i] << 4) | U8[j];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @name hexToU8a
|
|
26
|
+
* @summary Creates a Uint8Array object from a hex string.
|
|
27
|
+
* @description
|
|
28
|
+
* `null` inputs returns an empty `Uint8Array` result. Hex input values return the actual bytes value converted to a Uint8Array. Anything that is not a hex string (including the `0x` prefix) throws an error.
|
|
29
|
+
* @example
|
|
30
|
+
* <BR>
|
|
31
|
+
*
|
|
32
|
+
* ```javascript
|
|
33
|
+
* import { hexToU8a } from '@pezkuwi/util';
|
|
34
|
+
*
|
|
35
|
+
* hexToU8a('0x80001f'); // Uint8Array([0x80, 0x00, 0x1f])
|
|
36
|
+
* hexToU8a('0x80001f', 32); // Uint8Array([0x00, 0x80, 0x00, 0x1f])
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export function hexToU8a (value?: string | null, bitLength = -1): Uint8Array {
|
|
40
|
+
if (!value) {
|
|
41
|
+
return new Uint8Array();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
let s = value.startsWith('0x')
|
|
45
|
+
? 2
|
|
46
|
+
: 0;
|
|
47
|
+
|
|
48
|
+
const decLength = Math.ceil((value.length - s) / 2);
|
|
49
|
+
const endLength = Math.ceil(
|
|
50
|
+
bitLength === -1
|
|
51
|
+
? decLength
|
|
52
|
+
: bitLength / 8
|
|
53
|
+
);
|
|
54
|
+
const result = new Uint8Array(endLength);
|
|
55
|
+
const offset = endLength > decLength
|
|
56
|
+
? endLength - decLength
|
|
57
|
+
: 0;
|
|
58
|
+
|
|
59
|
+
for (let i = offset; i < endLength; i++, s += 2) {
|
|
60
|
+
// The big factor here is actually the string lookups. If we do
|
|
61
|
+
// HEX_TO_U16[value.substring()] we get an 10x slowdown. In the
|
|
62
|
+
// same vein using charCodeAt (as opposed to value[s] or value.charAt(s)) is
|
|
63
|
+
// also the faster operation by at least 2x with the character map above
|
|
64
|
+
result[i] = U16[(value.charCodeAt(s) << 8) | value.charCodeAt(s + 1)];
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
|
5
|
+
|
|
6
|
+
import { hexToU8a } from './toU8aBuffer.js';
|
|
7
|
+
|
|
8
|
+
describe('hexToU8a', (): void => {
|
|
9
|
+
it('returns an empty Uint8Array when null provided', (): void => {
|
|
10
|
+
expect(
|
|
11
|
+
hexToU8a(null)
|
|
12
|
+
).toHaveLength(0);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('returns a Uint8Array with the correct values', (): void => {
|
|
16
|
+
expect(
|
|
17
|
+
hexToU8a('0x80000a')
|
|
18
|
+
).toEqual(
|
|
19
|
+
new Uint8Array([128, 0, 10])
|
|
20
|
+
);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('returns a Uint8Array with the correct values (bitLength > provided)', (): void => {
|
|
24
|
+
expect(
|
|
25
|
+
hexToU8a('0x80000A', 64)
|
|
26
|
+
).toEqual(
|
|
27
|
+
new Uint8Array([0, 0, 0, 0, 0, 128, 0, 10])
|
|
28
|
+
);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it('returns a Uint8Array with the correct values (bitLength < provided)', (): void => {
|
|
32
|
+
expect(
|
|
33
|
+
hexToU8a('0x80000a', 16)
|
|
34
|
+
).toEqual(
|
|
35
|
+
new Uint8Array([128, 0])
|
|
36
|
+
);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @name hexToU8a
|
|
6
|
+
* @summary Creates a Uint8Array object from a hex string.
|
|
7
|
+
* @description
|
|
8
|
+
* `null` inputs returns an empty `Uint8Array` result. Hex input values return the actual bytes value converted to a Uint8Array. Anything that is not a hex string (including the `0x` prefix) throws an error.
|
|
9
|
+
* @example
|
|
10
|
+
* <BR>
|
|
11
|
+
*
|
|
12
|
+
* ```javascript
|
|
13
|
+
* import { hexToU8a } from '@pezkuwi/util';
|
|
14
|
+
*
|
|
15
|
+
* hexToU8a('0x80001f'); // Uint8Array([0x80, 0x00, 0x1f])
|
|
16
|
+
* hexToU8a('0x80001f', 32); // Uint8Array([0x00, 0x80, 0x00, 0x1f])
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export function hexToU8a (_value?: string | null, bitLength = -1): Uint8Array {
|
|
20
|
+
if (!_value) {
|
|
21
|
+
return new Uint8Array();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const value = _value.startsWith('0x')
|
|
25
|
+
? _value.substring(2)
|
|
26
|
+
: _value;
|
|
27
|
+
const buf = Buffer.from(value, 'hex');
|
|
28
|
+
const valLength = value.length / 2;
|
|
29
|
+
const resultLength = Math.ceil(
|
|
30
|
+
bitLength === -1
|
|
31
|
+
? valLength
|
|
32
|
+
: bitLength / 8
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
if (resultLength === valLength) {
|
|
36
|
+
return Uint8Array.from(buf);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const offset = resultLength > valLength
|
|
40
|
+
? resultLength - valLength
|
|
41
|
+
: 0;
|
|
42
|
+
|
|
43
|
+
if (offset) {
|
|
44
|
+
const u8a = new Uint8Array(resultLength);
|
|
45
|
+
|
|
46
|
+
u8a.set(buf, offset);
|
|
47
|
+
|
|
48
|
+
return u8a;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return Uint8Array.from(buf.subarray(0, resultLength));
|
|
52
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
|
5
|
+
|
|
6
|
+
import { assert } from './index.js';
|
|
7
|
+
|
|
8
|
+
describe('index', (): void => {
|
|
9
|
+
it('exports ok', (): void => {
|
|
10
|
+
expect(assert).toBeDefined();
|
|
11
|
+
});
|
|
12
|
+
});
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
|
5
|
+
|
|
6
|
+
import { isArray } from './index.js';
|
|
7
|
+
|
|
8
|
+
describe('isArray', (): void => {
|
|
9
|
+
it('is false on no value', (): void => {
|
|
10
|
+
expect(isArray()).toEqual(false);
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it('is false on non-array', (): void => {
|
|
14
|
+
expect(isArray(123)).toEqual(false);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('is true when Array is found', (): void => {
|
|
18
|
+
expect(isArray([1, 2, 3])).toEqual(true);
|
|
19
|
+
});
|
|
20
|
+
});
|
package/src/is/array.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @name isArray
|
|
6
|
+
* @summary Tests for a Array instance.
|
|
7
|
+
*/
|
|
8
|
+
export function isArray <T> (value?: unknown): value is T[] {
|
|
9
|
+
return Array.isArray(value);
|
|
10
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
|
5
|
+
|
|
6
|
+
import { stringToU8a } from '../string/index.js';
|
|
7
|
+
import { perf } from '../test/index.js';
|
|
8
|
+
import { isAscii } from './index.js';
|
|
9
|
+
|
|
10
|
+
describe('isAscii', (): void => {
|
|
11
|
+
it('returns true for an ASCII string', (): void => {
|
|
12
|
+
expect(isAscii('Hello World! Testing')).toEqual(true);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('returns false for an ASCII string (with formatters)', (): void => {
|
|
16
|
+
expect(isAscii('Hello\tWorld!\n\rTesting')).toEqual(false);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it('returns false on an non-ascii string', (): void => {
|
|
20
|
+
expect(isAscii('你好,世界')).toEqual(false);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('returns true for ASCII bytes', (): void => {
|
|
24
|
+
expect(isAscii(stringToU8a('Hello World! Testing'))).toEqual(true);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it('returns true for empty string inputs', (): void => {
|
|
28
|
+
expect(isAscii('')).toEqual(true);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it('returns true for empty U8a inputs', (): void => {
|
|
32
|
+
expect(isAscii(new Uint8Array())).toEqual(true);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it('returns false for empty undefined inputs', (): void => {
|
|
36
|
+
expect(isAscii()).toEqual(false);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it('returns false for non-printable characters', (): void => {
|
|
40
|
+
expect(isAscii(new Uint8Array([5]))).toEqual(false);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('returns false for hex input, non-ascii', (): void => {
|
|
44
|
+
expect(isAscii('0x010203')).toEqual(false);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
perf('isAscii (str)', 2_000_000, [['Hello World! Testing']], isAscii);
|
|
48
|
+
perf('isAscii (u8a)', 200_000, [[[stringToU8a('Hello World! Testing')]]], isAscii);
|
|
49
|
+
});
|
package/src/is/ascii.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import type { AnyString, U8aLike } from '../types.js';
|
|
5
|
+
|
|
6
|
+
import { u8aToU8a } from '../u8a/toU8a.js';
|
|
7
|
+
import { isHex } from './hex.js';
|
|
8
|
+
import { isString } from './string.js';
|
|
9
|
+
|
|
10
|
+
/** @internal */
|
|
11
|
+
function isAsciiStr (str: AnyString): boolean {
|
|
12
|
+
for (let i = 0, count = str.length; i < count; i++) {
|
|
13
|
+
const b = str.charCodeAt(i);
|
|
14
|
+
|
|
15
|
+
// check is inlined here, it is faster than making a call
|
|
16
|
+
if (b < 32 || b > 126) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** @internal */
|
|
25
|
+
function isAsciiBytes (u8a: Uint8Array | number[]): boolean {
|
|
26
|
+
for (let i = 0, count = u8a.length; i < count; i++) {
|
|
27
|
+
const b = u8a[i] | 0;
|
|
28
|
+
|
|
29
|
+
// check is inlined here, it is faster than making a call
|
|
30
|
+
if (b < 32 || b > 126) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @name isAscii
|
|
40
|
+
* @summary Tests if the input is printable ASCII
|
|
41
|
+
* @description
|
|
42
|
+
* Checks to see if the input string or Uint8Array is printable ASCII, 32-127 + formatters
|
|
43
|
+
*/
|
|
44
|
+
export function isAscii (value?: U8aLike | null): boolean {
|
|
45
|
+
return isString(value)
|
|
46
|
+
? isHex(value)
|
|
47
|
+
? isAsciiBytes(u8aToU8a(value))
|
|
48
|
+
: isAsciiStr(value)
|
|
49
|
+
: value
|
|
50
|
+
? isAsciiBytes(value)
|
|
51
|
+
: false;
|
|
52
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
|
5
|
+
|
|
6
|
+
import { isBigInt } from './index.js';
|
|
7
|
+
|
|
8
|
+
describe('isBigInt', (): void => {
|
|
9
|
+
it('returns true with a ...n value', (): void => {
|
|
10
|
+
expect(
|
|
11
|
+
isBigInt(123456n)
|
|
12
|
+
).toEqual(true);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('returns true with a BigInt(...) value', (): void => {
|
|
16
|
+
expect(
|
|
17
|
+
isBigInt(BigInt(123456))
|
|
18
|
+
).toEqual(true);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('returns false on non-BigInt values', (): void => {
|
|
22
|
+
expect(
|
|
23
|
+
isBigInt(0)
|
|
24
|
+
).toEqual(false);
|
|
25
|
+
});
|
|
26
|
+
});
|
package/src/is/bigInt.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @name isBigInt
|
|
6
|
+
* @summary Tests for a `BigInt` object instance.
|
|
7
|
+
* @description
|
|
8
|
+
* Checks to see if the input object is an instance of `BigInt`
|
|
9
|
+
* @example
|
|
10
|
+
* <BR>
|
|
11
|
+
*
|
|
12
|
+
* ```javascript
|
|
13
|
+
* import { isBigInt } from '@pezkuwi/util';
|
|
14
|
+
*
|
|
15
|
+
* console.log('isBigInt', isBigInt(123_456n)); // => true
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export function isBigInt (value: unknown): value is bigint {
|
|
19
|
+
return typeof value === 'bigint';
|
|
20
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
|
5
|
+
|
|
6
|
+
import { BN } from '../bn/index.js';
|
|
7
|
+
import { isBn } from './index.js';
|
|
8
|
+
|
|
9
|
+
describe('isBN', (): void => {
|
|
10
|
+
it('returns true when a BN value', (): void => {
|
|
11
|
+
expect(
|
|
12
|
+
isBn(new BN(123))
|
|
13
|
+
).toEqual(true);
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('returns false on non-BN values', (): void => {
|
|
17
|
+
expect(
|
|
18
|
+
isBn(0)
|
|
19
|
+
).toEqual(false);
|
|
20
|
+
});
|
|
21
|
+
});
|
package/src/is/bn.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { BN } from '../bn/bn.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @name isBn
|
|
8
|
+
* @summary Tests for a `BN` object instance.
|
|
9
|
+
* @description
|
|
10
|
+
* Checks to see if the input object is an instance of `BN` (bn.js).
|
|
11
|
+
* @example
|
|
12
|
+
* <BR>
|
|
13
|
+
*
|
|
14
|
+
* ```javascript
|
|
15
|
+
* import BN from 'bn.js';
|
|
16
|
+
* import { isBn } from '@pezkuwi/util';
|
|
17
|
+
*
|
|
18
|
+
* console.log('isBn', isBn(new BN(1))); // => true
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export function isBn (value: unknown): value is BN {
|
|
22
|
+
return BN.isBN(value);
|
|
23
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
|
5
|
+
|
|
6
|
+
import { isBoolean } from './index.js';
|
|
7
|
+
|
|
8
|
+
describe('isBoolean', (): void => {
|
|
9
|
+
it('returns true on false', (): void => {
|
|
10
|
+
expect(
|
|
11
|
+
isBoolean(false)
|
|
12
|
+
).toEqual(true);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('returns true on true', (): void => {
|
|
16
|
+
expect(
|
|
17
|
+
isBoolean(true)
|
|
18
|
+
).toEqual(true);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('returns false on invalid booleans', (): void => {
|
|
22
|
+
expect(
|
|
23
|
+
isBoolean('notABool')
|
|
24
|
+
).toEqual(false);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @name isBoolean
|
|
6
|
+
* @summary Tests for a boolean value.
|
|
7
|
+
* @description
|
|
8
|
+
* Checks to see if the input value is a JavaScript boolean.
|
|
9
|
+
* @example
|
|
10
|
+
* <BR>
|
|
11
|
+
*
|
|
12
|
+
* ```javascript
|
|
13
|
+
* import { isBoolean } from '@pezkuwi/util';
|
|
14
|
+
*
|
|
15
|
+
* isBoolean(false); // => true
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export function isBoolean (value: unknown): value is boolean {
|
|
19
|
+
return typeof value === 'boolean';
|
|
20
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
|
5
|
+
|
|
6
|
+
import { isBuffer } from './index.js';
|
|
7
|
+
|
|
8
|
+
describe('isBuffer', (): void => {
|
|
9
|
+
it('returns true when a Buffer value', (): void => {
|
|
10
|
+
expect(
|
|
11
|
+
isBuffer(Buffer.from([]))
|
|
12
|
+
).toEqual(true);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('returns false on non-Buffer values (number)', (): void => {
|
|
16
|
+
expect(
|
|
17
|
+
isBuffer(123)
|
|
18
|
+
).toEqual(false);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('returns false on non-Buffer values (null)', (): void => {
|
|
22
|
+
expect(
|
|
23
|
+
isBuffer(null)
|
|
24
|
+
).toEqual(false);
|
|
25
|
+
});
|
|
26
|
+
});
|
package/src/is/buffer.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import type { BufferClass, BufferObject } from '../types.js';
|
|
5
|
+
|
|
6
|
+
import { xglobal } from '@pezkuwi/x-global';
|
|
7
|
+
|
|
8
|
+
import { hasBuffer } from '../has.js';
|
|
9
|
+
import { isFunction } from './function.js';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @name isBuffer
|
|
13
|
+
* @summary Tests for a `Buffer` object instance.
|
|
14
|
+
* @description
|
|
15
|
+
* Checks to see if the input object is an instance of `Buffer`.
|
|
16
|
+
* @example
|
|
17
|
+
* <BR>
|
|
18
|
+
*
|
|
19
|
+
* ```javascript
|
|
20
|
+
* import { isBuffer } from '@pezkuwi/util';
|
|
21
|
+
*
|
|
22
|
+
* console.log('isBuffer', isBuffer(Buffer.from([]))); // => true
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export function isBuffer <T = BufferObject> (value: unknown): value is T {
|
|
26
|
+
// we do check a function first, since it is slightly faster than isBuffer itself
|
|
27
|
+
return hasBuffer && !!value && isFunction((value as unknown as BufferObject).readDoubleLE) && (xglobal.Buffer as unknown as BufferClass).isBuffer(value);
|
|
28
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
|
5
|
+
|
|
6
|
+
import { BN } from '../bn/index.js';
|
|
7
|
+
import { isChildClass } from './index.js';
|
|
8
|
+
|
|
9
|
+
describe('isChildClass', (): void => {
|
|
10
|
+
it('returns true when a Child value', (): void => {
|
|
11
|
+
expect(
|
|
12
|
+
isChildClass(BN, class Test extends BN {})
|
|
13
|
+
).toEqual(true);
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('returns false on non-Child values', (): void => {
|
|
17
|
+
expect(
|
|
18
|
+
isChildClass(BN, Uint8Array)
|
|
19
|
+
).toEqual(false);
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('returns false on undefined', (): void => {
|
|
23
|
+
expect(
|
|
24
|
+
isChildClass(BN)
|
|
25
|
+
).toEqual(false);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it('does TS magic, determining type', (): void => {
|
|
29
|
+
const T = (class extends BN {}) as unknown;
|
|
30
|
+
|
|
31
|
+
expect(
|
|
32
|
+
isChildClass(BN, T) &&
|
|
33
|
+
new T(12345).toNumber()
|
|
34
|
+
).toEqual(12345);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import type { Class } from '../types.js';
|
|
5
|
+
|
|
6
|
+
import { isClass } from './class.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @name isChildClass
|
|
10
|
+
* @summary Tests if the child extends the parent Class
|
|
11
|
+
* @description
|
|
12
|
+
* Checks to see if the child Class extends the parent Class
|
|
13
|
+
* @example
|
|
14
|
+
* <BR>
|
|
15
|
+
*
|
|
16
|
+
* ```javascript
|
|
17
|
+
* import { isChildClass } from '@pezkuwi/util';
|
|
18
|
+
*
|
|
19
|
+
* console.log('isChildClass', isChildClass(BN, BN); // => true
|
|
20
|
+
* console.log('isChildClass', isChildClass(BN, Uint8Array); // => false
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export function isChildClass <P extends Class> (Parent: P, Child?: unknown): Child is P {
|
|
24
|
+
// https://stackoverflow.com/questions/30993434/check-if-a-constructor-inherits-another-in-es6/30993664
|
|
25
|
+
return isClass(Child) && isClass(Parent)
|
|
26
|
+
// eslint-disable-next-line no-prototype-builtins
|
|
27
|
+
? Parent === Child || Parent.isPrototypeOf(Child)
|
|
28
|
+
: false;
|
|
29
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
|
5
|
+
|
|
6
|
+
import { BN } from '../bn/index.js';
|
|
7
|
+
import { isClass } from './index.js';
|
|
8
|
+
|
|
9
|
+
describe('isClass', (): void => {
|
|
10
|
+
it('returns false on a pure object', (): void => {
|
|
11
|
+
expect(isClass({})).toEqual(false);
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
it('returns false on instance values', (): void => {
|
|
15
|
+
expect(
|
|
16
|
+
isClass(new BN(1))
|
|
17
|
+
).toEqual(false);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('returns true when a class value', (): void => {
|
|
21
|
+
expect(
|
|
22
|
+
isClass(BN)
|
|
23
|
+
).toEqual(true);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('returns true on extends', (): void => {
|
|
27
|
+
expect(
|
|
28
|
+
isClass(class Test extends BN {})
|
|
29
|
+
).toEqual(true);
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it('returns true on built-ins', (): void => {
|
|
33
|
+
expect(
|
|
34
|
+
isClass(Uint8Array)
|
|
35
|
+
).toEqual(true);
|
|
36
|
+
});
|
|
37
|
+
});
|
package/src/is/class.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import type { Class } from '../types.js';
|
|
5
|
+
|
|
6
|
+
import { isOnFunction } from './helpers.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @name isClass
|
|
10
|
+
* Tests if the supplied argument is a Class
|
|
11
|
+
*/
|
|
12
|
+
export const isClass: <T extends Class> (value?: unknown) => value is T = /*#__PURE__*/ isOnFunction('isPrototypeOf', 'hasOwnProperty');
|