@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.
Files changed (260) hide show
  1. package/README.md +17 -0
  2. package/package.json +49 -0
  3. package/src/array/chunk.spec.ts +29 -0
  4. package/src/array/chunk.ts +35 -0
  5. package/src/array/filter.spec.ts +20 -0
  6. package/src/array/filter.ts +24 -0
  7. package/src/array/flatten.spec.ts +33 -0
  8. package/src/array/flatten.ts +51 -0
  9. package/src/array/index.ts +14 -0
  10. package/src/array/range.spec.ts +29 -0
  11. package/src/array/range.ts +31 -0
  12. package/src/array/shuffle.spec.ts +39 -0
  13. package/src/array/shuffle.ts +27 -0
  14. package/src/array/unzip.spec.ts +14 -0
  15. package/src/array/unzip.ts +18 -0
  16. package/src/array/zip.spec.ts +26 -0
  17. package/src/array/zip.ts +17 -0
  18. package/src/assert.spec.ts +40 -0
  19. package/src/assert.ts +50 -0
  20. package/src/bi/consts.ts +112 -0
  21. package/src/bi/helpers.ts +23 -0
  22. package/src/bi/index.ts +16 -0
  23. package/src/bi/max.spec.ts +32 -0
  24. package/src/bi/min.spec.ts +26 -0
  25. package/src/bi/min.ts +16 -0
  26. package/src/bi/sqrt.spec.ts +59 -0
  27. package/src/bi/sqrt.ts +43 -0
  28. package/src/bi/toBigInt.spec.ts +69 -0
  29. package/src/bi/toBigInt.ts +33 -0
  30. package/src/bi/toHex.spec.ts +56 -0
  31. package/src/bi/toHex.ts +16 -0
  32. package/src/bi/toU8a.spec.ts +99 -0
  33. package/src/bi/toU8a.ts +72 -0
  34. package/src/bn/bn.ts +6 -0
  35. package/src/bn/consts.spec.ts +38 -0
  36. package/src/bn/consts.ts +112 -0
  37. package/src/bn/fromHex.spec.ts +15 -0
  38. package/src/bn/fromHex.ts +4 -0
  39. package/src/bn/index.ts +18 -0
  40. package/src/bn/max.spec.ts +32 -0
  41. package/src/bn/min.spec.ts +26 -0
  42. package/src/bn/min.ts +36 -0
  43. package/src/bn/sqrt.spec.ts +37 -0
  44. package/src/bn/sqrt.ts +50 -0
  45. package/src/bn/toBn.spec.ts +53 -0
  46. package/src/bn/toBn.ts +43 -0
  47. package/src/bn/toHex.spec.ts +50 -0
  48. package/src/bn/toHex.ts +27 -0
  49. package/src/bn/toU8a.spec.ts +60 -0
  50. package/src/bn/toU8a.ts +45 -0
  51. package/src/buffer/index.ts +8 -0
  52. package/src/buffer/toU8a.spec.ts +20 -0
  53. package/src/buffer/toU8a.ts +20 -0
  54. package/src/bundle.ts +35 -0
  55. package/src/compact/addLength.spec.ts +14 -0
  56. package/src/compact/addLength.ts +24 -0
  57. package/src/compact/defaults.ts +7 -0
  58. package/src/compact/fromU8a.spec.ts +84 -0
  59. package/src/compact/fromU8a.ts +109 -0
  60. package/src/compact/index.ts +28 -0
  61. package/src/compact/stripLength.spec.ts +17 -0
  62. package/src/compact/stripLength.ts +26 -0
  63. package/src/compact/toU8a.spec.ts +59 -0
  64. package/src/compact/toU8a.ts +53 -0
  65. package/src/compact/types.ts +4 -0
  66. package/src/detectPackage.spec.ts +110 -0
  67. package/src/detectPackage.ts +138 -0
  68. package/src/extractTime.spec.ts +21 -0
  69. package/src/extractTime.ts +71 -0
  70. package/src/float/index.ts +4 -0
  71. package/src/float/toU8a.spec.ts +52 -0
  72. package/src/float/toU8a.ts +30 -0
  73. package/src/format/formatBalance.spec.ts +296 -0
  74. package/src/format/formatBalance.ts +177 -0
  75. package/src/format/formatDate.spec.ts +17 -0
  76. package/src/format/formatDate.ts +22 -0
  77. package/src/format/formatDecimal.spec.ts +28 -0
  78. package/src/format/formatDecimal.ts +22 -0
  79. package/src/format/formatElapsed.spec.ts +44 -0
  80. package/src/format/formatElapsed.ts +35 -0
  81. package/src/format/formatNumber.spec.ts +60 -0
  82. package/src/format/formatNumber.ts +29 -0
  83. package/src/format/getSeparator.spec.ts +53 -0
  84. package/src/format/getSeparator.ts +15 -0
  85. package/src/format/index.ts +9 -0
  86. package/src/format/si.ts +52 -0
  87. package/src/has.spec.ts +12 -0
  88. package/src/has.ts +38 -0
  89. package/src/hex/addPrefix.spec.ts +32 -0
  90. package/src/hex/addPrefix.ts +26 -0
  91. package/src/hex/fixLength.spec.ts +38 -0
  92. package/src/hex/fixLength.ts +36 -0
  93. package/src/hex/hasPrefix.spec.ts +32 -0
  94. package/src/hex/hasPrefix.ts +24 -0
  95. package/src/hex/index.ts +16 -0
  96. package/src/hex/stripPrefix.spec.ts +44 -0
  97. package/src/hex/stripPrefix.ts +30 -0
  98. package/src/hex/toBigInt.spec.ts +74 -0
  99. package/src/hex/toBigInt.ts +19 -0
  100. package/src/hex/toBn.spec.ts +74 -0
  101. package/src/hex/toBn.ts +40 -0
  102. package/src/hex/toNumber.spec.ts +20 -0
  103. package/src/hex/toNumber.ts +24 -0
  104. package/src/hex/toString.spec.ts +20 -0
  105. package/src/hex/toString.ts +25 -0
  106. package/src/hex/toU8a.spec.ts +76 -0
  107. package/src/hex/toU8a.ts +68 -0
  108. package/src/hex/toU8aBuffer.spec.ts +38 -0
  109. package/src/hex/toU8aBuffer.ts +52 -0
  110. package/src/index.spec.ts +12 -0
  111. package/src/index.ts +6 -0
  112. package/src/is/array.spec.ts +20 -0
  113. package/src/is/array.ts +10 -0
  114. package/src/is/ascii.spec.ts +49 -0
  115. package/src/is/ascii.ts +52 -0
  116. package/src/is/bigInt.spec.ts +26 -0
  117. package/src/is/bigInt.ts +20 -0
  118. package/src/is/bn.spec.ts +21 -0
  119. package/src/is/bn.ts +23 -0
  120. package/src/is/boolean.spec.ts +26 -0
  121. package/src/is/boolean.ts +20 -0
  122. package/src/is/buffer.spec.ts +26 -0
  123. package/src/is/buffer.ts +28 -0
  124. package/src/is/childClass.spec.ts +36 -0
  125. package/src/is/childClass.ts +29 -0
  126. package/src/is/class.spec.ts +37 -0
  127. package/src/is/class.ts +12 -0
  128. package/src/is/codec.spec.ts +52 -0
  129. package/src/is/codec.ts +26 -0
  130. package/src/is/compact.spec.ts +27 -0
  131. package/src/is/compact.ts +19 -0
  132. package/src/is/error.spec.ts +20 -0
  133. package/src/is/error.ts +23 -0
  134. package/src/is/function.spec.ts +20 -0
  135. package/src/is/function.ts +23 -0
  136. package/src/is/helpers.ts +23 -0
  137. package/src/is/hex.spec.ts +77 -0
  138. package/src/is/hex.ts +36 -0
  139. package/src/is/index.ts +36 -0
  140. package/src/is/instanceOf.spec.ts +48 -0
  141. package/src/is/instanceOf.ts +24 -0
  142. package/src/is/ip.spec.ts +50 -0
  143. package/src/is/ip.ts +56 -0
  144. package/src/is/jsonObject.spec.ts +51 -0
  145. package/src/is/jsonObject.ts +45 -0
  146. package/src/is/null.spec.ts +20 -0
  147. package/src/is/null.ts +20 -0
  148. package/src/is/number.spec.ts +20 -0
  149. package/src/is/number.ts +20 -0
  150. package/src/is/object.spec.ts +32 -0
  151. package/src/is/object.ts +24 -0
  152. package/src/is/observable.spec.ts +26 -0
  153. package/src/is/observable.ts +22 -0
  154. package/src/is/promise.spec.ts +32 -0
  155. package/src/is/promise.ts +6 -0
  156. package/src/is/riscv.spec.ts +36 -0
  157. package/src/is/riscv.ts +27 -0
  158. package/src/is/string.spec.ts +32 -0
  159. package/src/is/string.ts +22 -0
  160. package/src/is/testChain.spec.ts +25 -0
  161. package/src/is/testChain.ts +12 -0
  162. package/src/is/toBigInt.spec.ts +22 -0
  163. package/src/is/toBigInt.ts +8 -0
  164. package/src/is/toBn.spec.ts +25 -0
  165. package/src/is/toBn.ts +8 -0
  166. package/src/is/u8a.spec.ts +42 -0
  167. package/src/is/u8a.ts +25 -0
  168. package/src/is/undefined.spec.ts +23 -0
  169. package/src/is/undefined.ts +21 -0
  170. package/src/is/utf8.spec.ts +42 -0
  171. package/src/is/utf8.ts +207 -0
  172. package/src/is/wasm.spec.ts +20 -0
  173. package/src/is/wasm.ts +17 -0
  174. package/src/lazy.spec.ts +71 -0
  175. package/src/lazy.ts +63 -0
  176. package/src/logger.spec.ts +188 -0
  177. package/src/logger.ts +160 -0
  178. package/src/memoize.spec.ts +79 -0
  179. package/src/memoize.ts +49 -0
  180. package/src/mod.ts +4 -0
  181. package/src/nextTick.ts +26 -0
  182. package/src/noop.ts +16 -0
  183. package/src/number/index.ts +9 -0
  184. package/src/number/toHex.spec.ts +44 -0
  185. package/src/number/toHex.ts +27 -0
  186. package/src/number/toU8a.spec.ts +50 -0
  187. package/src/number/toU8a.ts +25 -0
  188. package/src/object/clear.spec.ts +14 -0
  189. package/src/object/clear.ts +16 -0
  190. package/src/object/copy.spec.ts +17 -0
  191. package/src/object/copy.ts +12 -0
  192. package/src/object/entries.spec.ts +20 -0
  193. package/src/object/entries.ts +12 -0
  194. package/src/object/index.ts +10 -0
  195. package/src/object/keys.spec.ts +19 -0
  196. package/src/object/keys.ts +10 -0
  197. package/src/object/property.spec.ts +149 -0
  198. package/src/object/property.ts +39 -0
  199. package/src/object/spread.spec.ts +36 -0
  200. package/src/object/spread.ts +38 -0
  201. package/src/object/values.spec.ts +19 -0
  202. package/src/object/values.ts +10 -0
  203. package/src/packageDetect.ts +13 -0
  204. package/src/packageInfo.ts +6 -0
  205. package/src/promisify.spec.ts +50 -0
  206. package/src/promisify.ts +30 -0
  207. package/src/string/camelCase.spec.ts +119 -0
  208. package/src/string/camelCase.ts +79 -0
  209. package/src/string/index.ts +12 -0
  210. package/src/string/lowerFirst.spec.ts +41 -0
  211. package/src/string/lowerFirst.ts +46 -0
  212. package/src/string/pascalCase.spec.ts +26 -0
  213. package/src/string/shorten.spec.ts +38 -0
  214. package/src/string/shorten.ts +24 -0
  215. package/src/string/toHex.spec.ts +26 -0
  216. package/src/string/toHex.ts +27 -0
  217. package/src/string/toU8a.spec.ts +31 -0
  218. package/src/string/toU8a.ts +28 -0
  219. package/src/string/upperFirst.spec.ts +41 -0
  220. package/src/stringify.spec.ts +33 -0
  221. package/src/stringify.ts +20 -0
  222. package/src/test/index.ts +4 -0
  223. package/src/test/performance.ts +92 -0
  224. package/src/types.ts +100 -0
  225. package/src/u8a/cmp.spec.ts +62 -0
  226. package/src/u8a/cmp.ts +50 -0
  227. package/src/u8a/concat.spec.ts +42 -0
  228. package/src/u8a/concat.ts +60 -0
  229. package/src/u8a/concatBuffer.ts +34 -0
  230. package/src/u8a/empty.spec.ts +46 -0
  231. package/src/u8a/empty.ts +22 -0
  232. package/src/u8a/eq.spec.ts +113 -0
  233. package/src/u8a/eq.ts +46 -0
  234. package/src/u8a/fixLength.spec.ts +34 -0
  235. package/src/u8a/fixLength.ts +34 -0
  236. package/src/u8a/index.ts +22 -0
  237. package/src/u8a/sorted.spec.ts +20 -0
  238. package/src/u8a/sorted.ts +22 -0
  239. package/src/u8a/toBigInt.spec.ts +106 -0
  240. package/src/u8a/toBigInt.ts +100 -0
  241. package/src/u8a/toBn.spec.ts +106 -0
  242. package/src/u8a/toBn.ts +101 -0
  243. package/src/u8a/toBuffer.spec.ts +20 -0
  244. package/src/u8a/toBuffer.ts +28 -0
  245. package/src/u8a/toFloat.spec.ts +86 -0
  246. package/src/u8a/toFloat.ts +26 -0
  247. package/src/u8a/toHex.spec.ts +94 -0
  248. package/src/u8a/toHex.ts +68 -0
  249. package/src/u8a/toHexBuffer.spec.ts +63 -0
  250. package/src/u8a/toHexBuffer.ts +30 -0
  251. package/src/u8a/toNumber.spec.ts +47 -0
  252. package/src/u8a/toNumber.ts +80 -0
  253. package/src/u8a/toString.spec.ts +36 -0
  254. package/src/u8a/toString.ts +26 -0
  255. package/src/u8a/toU8a.spec.ts +63 -0
  256. package/src/u8a/toU8a.ts +46 -0
  257. package/src/u8a/wrap.spec.ts +139 -0
  258. package/src/u8a/wrap.ts +65 -0
  259. package/tsconfig.build.json +19 -0
  260. package/tsconfig.spec.json +17 -0
@@ -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,6 @@
1
+ // Copyright 2017-2025 @polkadot/util authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import './packageDetect.js';
5
+
6
+ export * from './bundle.js';
@@ -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
+ });
@@ -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
+ });
@@ -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
+ });
@@ -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
+ });
@@ -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
+ });
@@ -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');