@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
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @name bufferToU8a
|
|
6
|
+
* @summary Creates a Uint8Array value from a Buffer object.
|
|
7
|
+
* @description
|
|
8
|
+
* `null` inputs returns an empty result, `Buffer` values return the actual value as a `Uint8Array`. Anything that is not a `Buffer` object throws an error.
|
|
9
|
+
* @example
|
|
10
|
+
* <BR>
|
|
11
|
+
*
|
|
12
|
+
* ```javascript
|
|
13
|
+
* import { bufferToU8a } from '@pezkuwi/util';
|
|
14
|
+
*
|
|
15
|
+
* bufferToU8a(Buffer.from([1, 2, 3]));
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export function bufferToU8a (buffer?: Uint8Array | number[] | null): Uint8Array {
|
|
19
|
+
return new Uint8Array(buffer || []);
|
|
20
|
+
}
|
package/src/bundle.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @summary Utility methods for this package are split into groups
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
// all named
|
|
9
|
+
export { packageInfo } from './packageInfo.js';
|
|
10
|
+
|
|
11
|
+
// all starred
|
|
12
|
+
export * from './array/index.js';
|
|
13
|
+
export * from './assert.js';
|
|
14
|
+
export * from './bi/index.js';
|
|
15
|
+
export * from './bn/index.js';
|
|
16
|
+
export * from './buffer/index.js';
|
|
17
|
+
export * from './compact/index.js';
|
|
18
|
+
export * from './detectPackage.js';
|
|
19
|
+
export * from './extractTime.js';
|
|
20
|
+
export * from './float/index.js';
|
|
21
|
+
export * from './format/index.js';
|
|
22
|
+
export * from './has.js';
|
|
23
|
+
export * from './hex/index.js';
|
|
24
|
+
export * from './is/index.js';
|
|
25
|
+
export * from './lazy.js';
|
|
26
|
+
export * from './logger.js';
|
|
27
|
+
export * from './memoize.js';
|
|
28
|
+
export * from './nextTick.js';
|
|
29
|
+
export * from './noop.js';
|
|
30
|
+
export * from './number/index.js';
|
|
31
|
+
export * from './object/index.js';
|
|
32
|
+
export * from './promisify.js';
|
|
33
|
+
export * from './string/index.js';
|
|
34
|
+
export * from './stringify.js';
|
|
35
|
+
export * from './u8a/index.js';
|
|
@@ -0,0 +1,14 @@
|
|
|
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 { compactAddLength } from './index.js';
|
|
7
|
+
|
|
8
|
+
describe('compactAddLength', (): void => {
|
|
9
|
+
it('correctly adds the length prefix', (): void => {
|
|
10
|
+
expect(
|
|
11
|
+
compactAddLength(Uint8Array.from([12, 13]))
|
|
12
|
+
).toEqual(Uint8Array.from([2 << 2, 12, 13]));
|
|
13
|
+
});
|
|
14
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { u8aConcatStrict } from '../u8a/index.js';
|
|
5
|
+
import { compactToU8a } from './toU8a.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @name compactAddLength
|
|
9
|
+
* @description Adds a length prefix to the input value
|
|
10
|
+
* @example
|
|
11
|
+
* <BR>
|
|
12
|
+
*
|
|
13
|
+
* ```javascript
|
|
14
|
+
* import { compactAddLength } from '@pezkuwi/util';
|
|
15
|
+
*
|
|
16
|
+
* console.log(compactAddLength(new Uint8Array([0xde, 0xad, 0xbe, 0xef]))); // Uint8Array([4 << 2, 0xde, 0xad, 0xbe, 0xef])
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export function compactAddLength (input: Uint8Array): Uint8Array {
|
|
20
|
+
return u8aConcatStrict([
|
|
21
|
+
compactToU8a(input.length),
|
|
22
|
+
input
|
|
23
|
+
]);
|
|
24
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
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/bn.js';
|
|
7
|
+
import { hexToU8a } from '../hex/toU8a.js';
|
|
8
|
+
import { perf } from '../test/index.js';
|
|
9
|
+
import { compactFromU8a, compactFromU8aLim } from './index.js';
|
|
10
|
+
|
|
11
|
+
describe('compactFromU8a', (): void => {
|
|
12
|
+
it('decoded u8 value', (): void => {
|
|
13
|
+
expect(
|
|
14
|
+
compactFromU8a(new Uint8Array([0b11111100]))
|
|
15
|
+
).toEqual([1, new BN(63)]);
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it('decodes from same u16 encoded value', (): void => {
|
|
19
|
+
expect(
|
|
20
|
+
compactFromU8a(new Uint8Array([0b11111101, 0b00000111])).toString()
|
|
21
|
+
).toEqual(
|
|
22
|
+
[2, new BN(511)].toString()
|
|
23
|
+
);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('decodes from same u32 encoded value (short)', (): void => {
|
|
27
|
+
expect(
|
|
28
|
+
compactFromU8a(new Uint8Array([254, 255, 3, 0])).toString()
|
|
29
|
+
).toEqual(
|
|
30
|
+
[4, new BN(0xffff)].toString()
|
|
31
|
+
);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it('decodes from same u32 encoded value (short, max)', (): void => {
|
|
35
|
+
expect(
|
|
36
|
+
compactFromU8a(new Uint8Array([254, 255, 255, 255])).toString()
|
|
37
|
+
).toEqual(
|
|
38
|
+
[4, new BN(1073741823)].toString()
|
|
39
|
+
);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('decodes from same u32 encoded value (full)', (): void => {
|
|
43
|
+
expect(
|
|
44
|
+
compactFromU8a(new Uint8Array([3, 249, 255, 255, 255]))
|
|
45
|
+
).toEqual([5, new BN(0xfffffff9)]);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it('decodes from same u32 as u64 encoded value (full, default)', (): void => {
|
|
49
|
+
expect(
|
|
50
|
+
compactFromU8a(new Uint8Array([3 + ((4 - 4) << 2), 249, 255, 255, 255]))
|
|
51
|
+
).toEqual([5, new BN(0xfffffff9)]);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it('decodes an actual value', (): void => {
|
|
55
|
+
expect(
|
|
56
|
+
compactFromU8a(
|
|
57
|
+
hexToU8a('0x0b00407a10f35a')
|
|
58
|
+
)
|
|
59
|
+
).toEqual([7, new BN('5af3107a4000', 16)]);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it('decodes an actual value (Buffer)', (): void => {
|
|
63
|
+
expect(
|
|
64
|
+
compactFromU8a(
|
|
65
|
+
Buffer.from('0b00407a10f35a', 'hex')
|
|
66
|
+
)
|
|
67
|
+
).toEqual([7, new BN('5af3107a4000', 16)]);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it('decodes an actual value (100000000)', (): void => {
|
|
71
|
+
expect(
|
|
72
|
+
compactFromU8a(
|
|
73
|
+
hexToU8a('0x0284d717')
|
|
74
|
+
)[1].toString()
|
|
75
|
+
).toEqual('100000000');
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
perf('compactFromU8a (u8)', 1_000_000, [[new Uint8Array([63 << 2])]], compactFromU8a);
|
|
79
|
+
perf('compactFromU8a (u16)', 1_000_000, [[new Uint8Array([0b11111101, 0b00000111])]], compactFromU8a);
|
|
80
|
+
perf('compactFromU8a (u32)', 1_000_000, [[new Uint8Array([254, 255, 3, 0])]], compactFromU8a);
|
|
81
|
+
perf('compactFromU8aLim (u32)', 1_000_000, [[new Uint8Array([254, 255, 3, 0])]], compactFromU8aLim);
|
|
82
|
+
perf('compactFromU8a (u48)', 1_000_000, [[hexToU8a('0x0b00407a10f35a')]], compactFromU8a);
|
|
83
|
+
perf('compactFromU8a (u96)', 250_000, [[new Uint8Array([23, 52, 0x40, 0x7a, 0x10, 0xf3, 0x5a, 0, 0, 18])]], compactFromU8a);
|
|
84
|
+
});
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import type { U8aLike } from '../types.js';
|
|
5
|
+
|
|
6
|
+
import { BN } from '../bn/index.js';
|
|
7
|
+
import { u8aToBn, u8aToU8a } from '../u8a/index.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @name compactFromU8a
|
|
11
|
+
* @description Retrives the offset and encoded length from a compact-prefixed value
|
|
12
|
+
* @example
|
|
13
|
+
* <BR>
|
|
14
|
+
*
|
|
15
|
+
* ```javascript
|
|
16
|
+
* import { compactFromU8a } from '@pezkuwi/util';
|
|
17
|
+
*
|
|
18
|
+
* const [offset, length] = compactFromU8a(new Uint8Array([254, 255, 3, 0]));
|
|
19
|
+
*
|
|
20
|
+
* console.log('value offset=', offset, 'length=', length); // 4, 0xffff
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export function compactFromU8a (input: U8aLike): [number, BN] {
|
|
24
|
+
const u8a = u8aToU8a(input);
|
|
25
|
+
|
|
26
|
+
// The u8a is manually converted here for 1, 2 & 4 lengths, it is 2x faster
|
|
27
|
+
// than doing an additional call to u8aToBn (as with variable length)
|
|
28
|
+
switch (u8a[0] & 0b11) {
|
|
29
|
+
case 0b00:
|
|
30
|
+
return [1, new BN(u8a[0] >>> 2)];
|
|
31
|
+
|
|
32
|
+
case 0b01:
|
|
33
|
+
return [2, new BN((u8a[0] + (u8a[1] << 8)) >>> 2)];
|
|
34
|
+
|
|
35
|
+
case 0b10:
|
|
36
|
+
// for the 3rd byte, we don't << 24 - since JS converts all bitwise operators to
|
|
37
|
+
// 32-bit, in the case where the top-most bit is set this yields a negative value
|
|
38
|
+
return [4, new BN((u8a[0] + (u8a[1] << 8) + (u8a[2] << 16) + (u8a[3] * 0x1_00_00_00)) >>> 2)];
|
|
39
|
+
|
|
40
|
+
// 0b11
|
|
41
|
+
default: {
|
|
42
|
+
// add 5 to shifted (4 for base length, 1 for this byte)
|
|
43
|
+
const offset = (u8a[0] >>> 2) + 5;
|
|
44
|
+
|
|
45
|
+
// we unroll the loop
|
|
46
|
+
switch (offset) {
|
|
47
|
+
// there still could be 4 bytes data, similar to 0b10 above (with offsets)
|
|
48
|
+
case 5:
|
|
49
|
+
// for the 3rd byte, we don't << 24 - since JS converts all bitwise operators to
|
|
50
|
+
// 32-bit, in the case where the top-most bit is set this yields a negative value
|
|
51
|
+
return [5, new BN(u8a[1] + (u8a[2] << 8) + (u8a[3] << 16) + (u8a[4] * 0x1_00_00_00))];
|
|
52
|
+
|
|
53
|
+
case 6:
|
|
54
|
+
return [6, new BN(u8a[1] + (u8a[2] << 8) + (u8a[3] << 16) + ((u8a[4] + (u8a[5] << 8)) * 0x1_00_00_00))];
|
|
55
|
+
|
|
56
|
+
// 6 bytes data is the maximum, 48 bits (56 would overflow)
|
|
57
|
+
case 7:
|
|
58
|
+
return [7, new BN(u8a[1] + (u8a[2] << 8) + (u8a[3] << 16) + ((u8a[4] + (u8a[5] << 8) + (u8a[6] << 16)) * 0x1_00_00_00))];
|
|
59
|
+
|
|
60
|
+
// for anything else, use the non-unrolled version
|
|
61
|
+
default:
|
|
62
|
+
return [offset, u8aToBn(u8a.subarray(1, offset))];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* @name compactFromU8aLim
|
|
70
|
+
* @description A limited version of [[compactFromU8a]], accepting only Uint8Array inputs for values <= 48 bits
|
|
71
|
+
*/
|
|
72
|
+
export function compactFromU8aLim (u8a: Uint8Array): [number, number] {
|
|
73
|
+
// The u8a is manually converted here for 1, 2 & 4 lengths, it is 2x faster
|
|
74
|
+
// than doing an additional call to u8aToBn (as with variable length)
|
|
75
|
+
switch (u8a[0] & 0b11) {
|
|
76
|
+
case 0b00:
|
|
77
|
+
return [1, u8a[0] >>> 2];
|
|
78
|
+
|
|
79
|
+
case 0b01:
|
|
80
|
+
return [2, (u8a[0] + (u8a[1] << 8)) >>> 2];
|
|
81
|
+
|
|
82
|
+
case 0b10:
|
|
83
|
+
// for the 3rd byte, we don't << 24 - since JS converts all bitwise operators to
|
|
84
|
+
// 32-bit, in the case where the top-most bit is set this yields a negative value
|
|
85
|
+
return [4, (u8a[0] + (u8a[1] << 8) + (u8a[2] << 16) + (u8a[3] * 0x1_00_00_00)) >>> 2];
|
|
86
|
+
|
|
87
|
+
// 0b11
|
|
88
|
+
default: {
|
|
89
|
+
// add 5 to shifted (4 for base length, 1 for this byte)
|
|
90
|
+
// we unroll the loop
|
|
91
|
+
switch ((u8a[0] >>> 2) + 5) {
|
|
92
|
+
// there still could be 4 bytes data, similar to 0b10 above (with offsets)
|
|
93
|
+
case 5:
|
|
94
|
+
return [5, u8a[1] + (u8a[2] << 8) + (u8a[3] << 16) + (u8a[4] * 0x1_00_00_00)];
|
|
95
|
+
|
|
96
|
+
case 6:
|
|
97
|
+
return [6, u8a[1] + (u8a[2] << 8) + (u8a[3] << 16) + ((u8a[4] + (u8a[5] << 8)) * 0x1_00_00_00)];
|
|
98
|
+
|
|
99
|
+
// 6 bytes data is the maximum, 48 bits (56 would overflow)
|
|
100
|
+
case 7:
|
|
101
|
+
return [7, u8a[1] + (u8a[2] << 8) + (u8a[3] << 16) + ((u8a[4] + (u8a[5] << 8) + (u8a[6] << 16)) * 0x1_00_00_00)];
|
|
102
|
+
|
|
103
|
+
// for anything else, we are above the actual MAX_SAFE_INTEGER - bail out
|
|
104
|
+
default:
|
|
105
|
+
throw new Error('Compact input is > Number.MAX_SAFE_INTEGER');
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @description
|
|
6
|
+
* Encoding and decoding of parity-codec compact numbers. The codec is created
|
|
7
|
+
* to take up the least amount of space for a specific number. It performs the
|
|
8
|
+
* same function as Length, however differs in that it uses a variable number of
|
|
9
|
+
* bytes to do the actual encoding. From the Rust implementation for compact
|
|
10
|
+
* encoding:
|
|
11
|
+
*
|
|
12
|
+
* 0b00 00 00 00 / 00 00 00 00 / 00 00 00 00 / 00 00 00 00
|
|
13
|
+
* (0 ... 2**6 - 1) (u8)
|
|
14
|
+
* xx xx xx 00
|
|
15
|
+
* (2**6 ... 2**14 - 1) (u8, u16) low LH high
|
|
16
|
+
* yL yL yL 01 / yH yH yH yL
|
|
17
|
+
* (2**14 ... 2**30 - 1) (u16, u32) low LMMH high
|
|
18
|
+
* zL zL zL 10 / zM zM zM zL / zM zM zM zM / zH zH zH zM
|
|
19
|
+
* (2**30 ... 2**536 - 1) (u32, u64, u128, U256, U512, U520) straight LE-encoded
|
|
20
|
+
* nn nn nn 11 [ / zz zz zz zz ]{4 + n}
|
|
21
|
+
*
|
|
22
|
+
* Note: we use *LOW BITS* of the LSB in LE encoding to encode the 2 bit key.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
export { compactAddLength } from './addLength.js';
|
|
26
|
+
export { compactFromU8a, compactFromU8aLim } from './fromU8a.js';
|
|
27
|
+
export { compactStripLength } from './stripLength.js';
|
|
28
|
+
export { compactToU8a } from './toU8a.js';
|
|
@@ -0,0 +1,17 @@
|
|
|
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 { compactStripLength } from './index.js';
|
|
7
|
+
|
|
8
|
+
describe('compactStripLength', (): void => {
|
|
9
|
+
it('correctly removes the length prefix', (): void => {
|
|
10
|
+
expect(
|
|
11
|
+
compactStripLength(Uint8Array.from([2 << 2, 12, 13]))
|
|
12
|
+
).toEqual([
|
|
13
|
+
3,
|
|
14
|
+
Uint8Array.from([12, 13])
|
|
15
|
+
]);
|
|
16
|
+
});
|
|
17
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { compactFromU8a } from './fromU8a.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @name compactStripLength
|
|
8
|
+
* @description Removes the length prefix, returning both the total length (including the value + compact encoding) and the decoded value with the correct length
|
|
9
|
+
* @example
|
|
10
|
+
* <BR>
|
|
11
|
+
*
|
|
12
|
+
* ```javascript
|
|
13
|
+
* import { compactStripLength } from '@pezkuwi/util';
|
|
14
|
+
*
|
|
15
|
+
* console.log(compactStripLength(new Uint8Array([2 << 2, 0xde, 0xad]))); // [2, Uint8Array[0xde, 0xad]]
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export function compactStripLength (input: Uint8Array): [number, Uint8Array] {
|
|
19
|
+
const [offset, length] = compactFromU8a(input);
|
|
20
|
+
const total = offset + length.toNumber();
|
|
21
|
+
|
|
22
|
+
return [
|
|
23
|
+
total,
|
|
24
|
+
input.subarray(offset, total)
|
|
25
|
+
];
|
|
26
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
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 { compactToU8a } from './index.js';
|
|
8
|
+
|
|
9
|
+
const TESTS: [output: string | Uint8Array, input: BN | number][] = [
|
|
10
|
+
// Rust tests
|
|
11
|
+
// Copied from https://github.com/paritytech/parity-codec/blob/master/src/codec.rs
|
|
12
|
+
['00', new BN('0')],
|
|
13
|
+
['fc', new BN('63')],
|
|
14
|
+
['01 01', new BN('64')],
|
|
15
|
+
['fd ff', new BN('16383')],
|
|
16
|
+
['02 00 01 00', new BN('16384')],
|
|
17
|
+
['fe ff ff ff', new BN('1073741823')],
|
|
18
|
+
['03 00 00 00 40', new BN('1073741824')],
|
|
19
|
+
['03 ff ff ff ff', new BN(`${1}${'0'.repeat(32)}`, 2).subn(1)],
|
|
20
|
+
['07 00 00 00 00 01', new BN(`${1}${'0'.repeat(32)}`, 2)],
|
|
21
|
+
['0b 00 00 00 00 00 01', new BN(`${1}${'0'.repeat(40)}`, 2)],
|
|
22
|
+
['0f 00 00 00 00 00 00 01', new BN(`${1}${'0'.repeat(48)}`, 2)],
|
|
23
|
+
['0f ff ff ff ff ff ff ff', new BN(`${1}${'0'.repeat(56)}`, 2).subn(1)],
|
|
24
|
+
['13 00 00 00 00 00 00 00 01', new BN(`${1}${'0'.repeat(56)}`, 2)],
|
|
25
|
+
['13 ff ff ff ff ff ff ff ff', new BN(`${1}${'0'.repeat(64)}`, 2).subn(1)],
|
|
26
|
+
// own tests
|
|
27
|
+
[new Uint8Array([18 << 2]), 18],
|
|
28
|
+
[new Uint8Array([0b11111100]), 63],
|
|
29
|
+
[new Uint8Array([0xbd, 0x01]), 111],
|
|
30
|
+
[new Uint8Array([0b11111101, 0b00000111]), 511],
|
|
31
|
+
[new Uint8Array([253, 127]), 0x1fff],
|
|
32
|
+
[new Uint8Array([254, 255, 3, 0]), 0xffff],
|
|
33
|
+
[new Uint8Array([3 + ((4 - 4) << 2), 249, 255, 255, 255]), 0xfffffff9],
|
|
34
|
+
[new Uint8Array([3 + ((6 - 4) << 2), 0x00, 0x40, 0x7a, 0x10, 0xf3, 0x5a]), new BN('00005af3107a4000', 16)],
|
|
35
|
+
[new Uint8Array([23, 52, 0x40, 0x7a, 0x10, 0xf3, 0x5a, 0, 0, 18]), new BN('1200005af3107a4034', 16)]
|
|
36
|
+
];
|
|
37
|
+
|
|
38
|
+
describe('encode', (): void => {
|
|
39
|
+
it('does not modify the original', (): void => {
|
|
40
|
+
const original = new BN(123456);
|
|
41
|
+
|
|
42
|
+
expect(compactToU8a(original)).toEqual(new Uint8Array([2, 137, 7, 0]));
|
|
43
|
+
expect(original.toString()).toEqual('123456');
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
describe('conversion tests', (): void => {
|
|
47
|
+
TESTS.forEach(([output, input], i): void => {
|
|
48
|
+
it(`#${i}: encodes ${input.toString()}`, (): void => {
|
|
49
|
+
expect(
|
|
50
|
+
compactToU8a(input)
|
|
51
|
+
).toEqual(
|
|
52
|
+
output instanceof Uint8Array
|
|
53
|
+
? output
|
|
54
|
+
: Uint8Array.from(output.split(' ').map((s) => parseInt(s, 16)))
|
|
55
|
+
);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
});
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Copyright 2017-2025 @polkadot/util authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { BN, BN_ONE, BN_TWO, bnToBn, bnToU8a } from '../bn/index.js';
|
|
5
|
+
import { u8aConcatStrict } from '../u8a/index.js';
|
|
6
|
+
|
|
7
|
+
const MAX_U8 = BN_TWO.pow(new BN(8 - 2)).isub(BN_ONE);
|
|
8
|
+
const MAX_U16 = BN_TWO.pow(new BN(16 - 2)).isub(BN_ONE);
|
|
9
|
+
const MAX_U32 = BN_TWO.pow(new BN(32 - 2)).isub(BN_ONE);
|
|
10
|
+
const BL_16 = { bitLength: 16 };
|
|
11
|
+
const BL_32 = { bitLength: 32 };
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @name compactToU8a
|
|
15
|
+
* @description Encodes a number into a compact representation
|
|
16
|
+
* @example
|
|
17
|
+
* <BR>
|
|
18
|
+
*
|
|
19
|
+
* ```javascript
|
|
20
|
+
* import { compactToU8a } from '@pezkuwi/util';
|
|
21
|
+
*
|
|
22
|
+
* console.log(compactToU8a(511, 32)); // Uint8Array([0b11111101, 0b00000111])
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export function compactToU8a (value: BN | bigint | number): Uint8Array {
|
|
26
|
+
const bn = bnToBn(value);
|
|
27
|
+
|
|
28
|
+
if (bn.lte(MAX_U8)) {
|
|
29
|
+
return new Uint8Array([bn.toNumber() << 2]);
|
|
30
|
+
} else if (bn.lte(MAX_U16)) {
|
|
31
|
+
return bnToU8a(bn.shln(2).iadd(BN_ONE), BL_16);
|
|
32
|
+
} else if (bn.lte(MAX_U32)) {
|
|
33
|
+
return bnToU8a(bn.shln(2).iadd(BN_TWO), BL_32);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const u8a = bnToU8a(bn);
|
|
37
|
+
let length = u8a.length;
|
|
38
|
+
|
|
39
|
+
// adjust to the minimum number of bytes
|
|
40
|
+
while (u8a[length - 1] === 0) {
|
|
41
|
+
length--;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (length < 4) {
|
|
45
|
+
throw new Error('Invalid length, previous checks match anything less than 2^30');
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return u8aConcatStrict([
|
|
49
|
+
// subtract 4 as minimum (also catered for in decoding)
|
|
50
|
+
new Uint8Array([((length - 4) << 2) + 0b11]),
|
|
51
|
+
u8a.subarray(0, length)
|
|
52
|
+
]);
|
|
53
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
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 { detectPackage, POLKADOTJS_DISABLE_ESM_CJS_WARNING_FLAG } from './detectPackage.js';
|
|
7
|
+
|
|
8
|
+
describe('detectPackage', (): void => {
|
|
9
|
+
const PKG = '@polkadot/util';
|
|
10
|
+
const VER1 = '9.8.0-beta.45';
|
|
11
|
+
const VER2 = '9.7.1';
|
|
12
|
+
const VER3 = '9.6.1';
|
|
13
|
+
const PATH = '/Users/jaco/Projects/polkadot-js/api/node_modules/@polkadot/util';
|
|
14
|
+
|
|
15
|
+
const MISMATCH = `@polkadot/util has multiple versions, ensure that there is only one installed.
|
|
16
|
+
Either remove and explicitly install matching versions or dedupe using your package manager.
|
|
17
|
+
The following conflicting packages were found:
|
|
18
|
+
\tesm ${VER1}\t<unknown>
|
|
19
|
+
\tesm ${VER2} \tnode_modules/@polkadot/api/node_modules/@polkadot/util`;
|
|
20
|
+
|
|
21
|
+
it('should not log the first time', (): void => {
|
|
22
|
+
const spy = jest.spyOn(console, 'warn');
|
|
23
|
+
|
|
24
|
+
detectPackage({ name: PKG, path: 'auto', type: 'esm', version: VER1 }, PATH);
|
|
25
|
+
expect(spy).not.toHaveBeenCalled();
|
|
26
|
+
spy.mockRestore();
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('should log the second time', (): void => {
|
|
30
|
+
const spy = jest.spyOn(console, 'warn');
|
|
31
|
+
|
|
32
|
+
detectPackage({ name: PKG, path: '/Users/jaco/Projects/polkadot-js/api/node_modules/@polkadot/api/node_modules/@polkadot/util', type: 'esm', version: VER2 });
|
|
33
|
+
expect(spy).toHaveBeenCalledWith(MISMATCH);
|
|
34
|
+
spy.mockRestore();
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it('should allow for function use', (): void => {
|
|
38
|
+
const spy = jest.spyOn(console, 'warn');
|
|
39
|
+
|
|
40
|
+
detectPackage({ name: PKG, path: 'node_modules/@polkadot/util', type: 'cjs', version: VER3 }, () => PATH);
|
|
41
|
+
expect(spy).toHaveBeenCalledWith(`${MISMATCH}
|
|
42
|
+
\tcjs ${VER3} \tnode_modules/@polkadot/util`);
|
|
43
|
+
spy.mockRestore();
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
describe('detectPackageDeps', (): void => {
|
|
48
|
+
const DEP0 = { name: '@polkadot/keyring', path: 'auto', type: 'esm', version: '1.1.1' };
|
|
49
|
+
const DEP1 = { name: '@polkadot/util', path: 'auto', type: 'esm', version: '1.1.2' };
|
|
50
|
+
const DEP2 = { name: '@polkadot/util-crypto', path: 'auto', type: 'esm', version: '1.1.3' };
|
|
51
|
+
const DEP3 = { name: '@polkadot/networks', path: 'auto', type: 'esm', version: '1.1.1' };
|
|
52
|
+
|
|
53
|
+
it('should not log when no mismatches are found', (): void => {
|
|
54
|
+
const spy = jest.spyOn(console, 'warn');
|
|
55
|
+
|
|
56
|
+
detectPackage({ name: '@polkadot/one', path: 'auto', type: 'esm', version: '1.1.1' }, false, [DEP0, DEP3]);
|
|
57
|
+
expect(spy).not.toHaveBeenCalled();
|
|
58
|
+
spy.mockRestore();
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it('should log when mismatches are found', (): void => {
|
|
62
|
+
const spy = jest.spyOn(console, 'warn');
|
|
63
|
+
|
|
64
|
+
detectPackage({ name: '@polkadot/two', path: 'auto', type: 'esm', version: '1.1.1' }, false, [DEP0, DEP1, DEP2, DEP3]);
|
|
65
|
+
expect(spy).toHaveBeenCalledWith(`@polkadot/two requires direct dependencies exactly matching version 1.1.1.
|
|
66
|
+
Either remove and explicitly install matching versions or dedupe using your package manager.
|
|
67
|
+
The following conflicting packages were found:
|
|
68
|
+
\t1.1.2\t@polkadot/util
|
|
69
|
+
\t1.1.3\t@polkadot/util-crypto`);
|
|
70
|
+
spy.mockRestore();
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
describe('detectPackageEsmCjsNoWarnings', (): void => {
|
|
75
|
+
const PKG = '@polkadot/wasm-crypto';
|
|
76
|
+
const VER1 = '9.8.0-beta.45';
|
|
77
|
+
const PATH = '/Users/jaco/Projects/polkadot-js/api/node_modules/@polkadot/api/node_modules/@polkadot/wasm-crypto';
|
|
78
|
+
|
|
79
|
+
it('should not log when there are concurrent esm and cjs versions of the same package with the same version number and warnings are disabled', (): void => {
|
|
80
|
+
const spy = jest.spyOn(console, 'warn');
|
|
81
|
+
const pkgEsm = { name: PKG, path: PATH, type: 'esm', version: VER1 };
|
|
82
|
+
const pkgCjs = { name: PKG, path: `${PATH}/cjs`, type: 'cjs', version: VER1 };
|
|
83
|
+
|
|
84
|
+
process.env[POLKADOTJS_DISABLE_ESM_CJS_WARNING_FLAG] = '1';
|
|
85
|
+
detectPackage(pkgEsm, false, []);
|
|
86
|
+
detectPackage(pkgCjs, false, []);
|
|
87
|
+
|
|
88
|
+
expect(spy).not.toHaveBeenCalled();
|
|
89
|
+
spy.mockRestore();
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
describe('detectPackageEsmCjs', (): void => {
|
|
94
|
+
const PKG = '@polkadot/wasm-crypto-wasm';
|
|
95
|
+
const VER1 = '9.8.0-beta.45';
|
|
96
|
+
const PATH = '/Users/jaco/Projects/polkadot-js/api/node_modules/@polkadot/api/node_modules/@polkadot/wasm-crypto-wasm';
|
|
97
|
+
|
|
98
|
+
it('should log when there are concurrent esm and cjs versions of the same package with the same version number and warnings are not disabled', (): void => {
|
|
99
|
+
const spy = jest.spyOn(console, 'warn');
|
|
100
|
+
const pkgEsm = { name: PKG, path: PATH, type: 'esm', version: VER1 };
|
|
101
|
+
const pkgCjs = { name: PKG, path: `${PATH}/cjs`, type: 'cjs', version: VER1 };
|
|
102
|
+
|
|
103
|
+
process.env[POLKADOTJS_DISABLE_ESM_CJS_WARNING_FLAG] = undefined;
|
|
104
|
+
detectPackage(pkgEsm, false, []);
|
|
105
|
+
detectPackage(pkgCjs, false, []);
|
|
106
|
+
|
|
107
|
+
expect(spy).toHaveBeenCalled();
|
|
108
|
+
spy.mockRestore();
|
|
109
|
+
});
|
|
110
|
+
});
|