Adjust internal character maps to operate on Uint8Array (#1685)

* Adjust internal character maps to operate on Uint8Array

* Use Uint8Array

* Actual perf testing

* Rename perf exports

* Expose specs in own tsconfig (circular)
This commit is contained in:
Jaco
2023-01-26 10:05:15 +02:00
committed by GitHub
parent 45e2a560a9
commit f2afcfc1a7
53 changed files with 112 additions and 63 deletions

View File

@@ -12,6 +12,7 @@ Changes:
- Adjust output for Ledger saninity checks
- Expand exported `bigint` constants to match with those in `BN`
- Upgrade dependencies to latest stable versions
- Adjust internal character maps to operate on `Uint8Array` instad of `Array<number>`
## 10.2.6 Jan 13, 2023

View File

@@ -4,7 +4,7 @@
import { hexToU8a } from '@polkadot/util';
import { waitReady } from '@polkadot/wasm-crypto';
import { performanceWasm } from '../test/performance';
import { perfWasm } from '../test';
import { blake2AsU8a } from '.';
describe('blake2AsU8a', (): void => {
@@ -61,7 +61,7 @@ describe('blake2AsU8a', (): void => {
});
describe.each([256, 512] as (256 | 512)[])('bitLength=$p', (bitLength): void => {
performanceWasm(`blake2AsU8a, bitLength=${bitLength}`, 64000, (input, onlyJs) =>
perfWasm(`blake2AsU8a, bitLength=${bitLength}`, 64000, (input, onlyJs) =>
blake2AsU8a(input, bitLength, null, onlyJs)
);
});

View File

@@ -4,7 +4,7 @@
import { stringToU8a } from '@polkadot/util';
import { waitReady } from '@polkadot/wasm-crypto';
import { performanceWasm } from '../test/performance';
import { perfWasm } from '../test';
import { ed25519PairFromSeed, ed25519Sign } from '.';
const PAIR = ed25519PairFromSeed(
@@ -30,7 +30,7 @@ describe('ed25519Sign', (): void => {
});
});
performanceWasm('ed25519Sign', 250, (input, onlyJs) =>
perfWasm('ed25519Sign', 250, (input, onlyJs) =>
ed25519Sign(input, PAIR, onlyJs)
);
});

View File

@@ -4,7 +4,7 @@
import { hexToU8a, stringToU8a } from '@polkadot/util';
import { waitReady } from '@polkadot/wasm-crypto';
import { performanceWasm } from '../test/performance';
import { perfWasm } from '../test';
import { hmacShaAsU8a } from '.';
describe('hmacShaAsU8a', (): void => {
@@ -32,7 +32,7 @@ describe('hmacShaAsU8a', (): void => {
});
});
performanceWasm(`hmacShaAsU8a, bitLength=${bitLength}`, 16000, (input, onlyJs) =>
perfWasm(`hmacShaAsU8a, bitLength=${bitLength}`, 16000, (input, onlyJs) =>
hmacShaAsU8a(input, input, bitLength, onlyJs)
);
});

View File

@@ -4,7 +4,7 @@
import { hexToU8a, stringToU8a } from '@polkadot/util';
import { waitReady } from '@polkadot/wasm-crypto';
import { performanceWasm } from '../test/performance';
import { perfWasm } from '../test';
import { keccakAsU8a } from '.';
describe('keccakAsU8a', (): void => {
@@ -43,7 +43,7 @@ describe('keccakAsU8a', (): void => {
});
});
performanceWasm(`keccakAsU8a, bitLength=${bitLength}`, 128000, (input, onlyJs) =>
perfWasm(`keccakAsU8a, bitLength=${bitLength}`, 128000, (input, onlyJs) =>
keccakAsU8a(input, bitLength, onlyJs)
);
});

View File

@@ -5,7 +5,7 @@ import { u8aEq, u8aToHex } from '@polkadot/util';
import { waitReady } from '@polkadot/wasm-crypto';
import { randomAsU8a } from '../random/asU8a';
import { performanceWasm } from '../test/performance';
import { perfWasm } from '../test';
import { pbkdf2Encode } from '.';
const KNOWN_SALT = new Uint8Array([
@@ -42,7 +42,7 @@ describe('pbkdf2Encode', (): void => {
});
});
performanceWasm('pbkdf2Encode', 8, (input, onlyJs) =>
perfWasm('pbkdf2Encode', 8, (input, onlyJs) =>
pbkdf2Encode(input, input, undefined, onlyJs)
);
});

View File

@@ -3,7 +3,7 @@
import { waitReady } from '@polkadot/wasm-crypto';
import { performanceWasm } from '../test/performance';
import { perfWasm } from '../test';
import { DEFAULT_PARAMS } from './defaults';
import { scryptEncode } from '.';
@@ -30,7 +30,7 @@ describe('scryptEncode', (): void => {
});
});
performanceWasm('scryptEncode', 4, (input, onlyJs) =>
perfWasm('scryptEncode', 4, (input, onlyJs) =>
scryptEncode(input, input, undefined, onlyJs)
);
});

View File

@@ -4,7 +4,7 @@
import { hexToU8a } from '@polkadot/util';
import { waitReady } from '@polkadot/wasm-crypto';
import { performanceWasm } from '../test/performance';
import { perfWasm } from '../test';
import { secp256k1Compress } from '.';
describe('secp256k1Compress', (): void => {
@@ -36,7 +36,7 @@ describe('secp256k1Compress', (): void => {
});
});
performanceWasm('secp256k1Compress', 100000, (input, onlyJs) => secp256k1Compress(input, onlyJs),
perfWasm('secp256k1Compress', 100000, (input, onlyJs) => secp256k1Compress(input, onlyJs),
[[
hexToU8a('0x04b9dc646dd71118e5f7fda681ad9eca36eb3ee96f344f582fbe7b5bcdebb1307763fe926c273235fd979a134076d00fd1683cbd35868cb485d4a3a640e52184af')
]]

View File

@@ -4,7 +4,7 @@
import { hexToU8a } from '@polkadot/util';
import { waitReady } from '@polkadot/wasm-crypto';
import { performanceWasm } from '../test/performance';
import { perfWasm } from '../test';
import { secp256k1Expand } from '.';
describe('secp256k1Expand', (): void => {
@@ -36,7 +36,7 @@ describe('secp256k1Expand', (): void => {
});
});
performanceWasm('secp256k1Expand', 2000, (input, onlyJs) => secp256k1Expand(input, onlyJs),
perfWasm('secp256k1Expand', 2000, (input, onlyJs) => secp256k1Expand(input, onlyJs),
[[
hexToU8a('0x03b9dc646dd71118e5f7fda681ad9eca36eb3ee96f344f582fbe7b5bcdebb13077')
]]

View File

@@ -5,7 +5,7 @@ import { hexToU8a, u8aToHex } from '@polkadot/util';
import { waitReady } from '@polkadot/wasm-crypto';
import { mnemonicToMiniSecret } from '../../mnemonic';
import { performanceWasm } from '../../test/performance';
import { perfWasm } from '../../test';
import { secp256k1PairFromSeed } from '..';
// mnemonic, secret, public, account_id
@@ -65,7 +65,7 @@ describe('secp256k1PairFromSeed', (): void => {
});
});
performanceWasm('secp256k1PairFromSeed', 500, (input, onlyJs) =>
perfWasm('secp256k1PairFromSeed', 500, (input, onlyJs) =>
secp256k1PairFromSeed(input, onlyJs)
);
});

View File

@@ -5,7 +5,7 @@ import { u8aToHex, u8aToU8a } from '@polkadot/util';
import { waitReady } from '@polkadot/wasm-crypto';
import { keccakAsU8a } from '../keccak';
import { performanceWasm } from '../test/performance';
import { perfWasm } from '../test';
import { secp256k1Recover } from '.';
const sig = u8aToU8a('0x7505f2880114da51b3f5d535f8687953c0ab9af4ab81e592eaebebf53b728d2b6dfd9b5bcd70fee412b1f31360e7c2774009305cb84fc50c1d0ff8034dfa5fff');
@@ -25,7 +25,7 @@ describe('secp256k1Recover', (): void => {
});
});
performanceWasm('secp256k1Recover', 200, (_, onlyJs) =>
perfWasm('secp256k1Recover', 200, (_, onlyJs) =>
secp256k1Recover(msg, sig, 0, undefined, onlyJs)
);
});

View File

@@ -4,7 +4,7 @@
import { hexToU8a } from '@polkadot/util';
import { waitReady } from '@polkadot/wasm-crypto';
import { performanceWasm } from '../test/performance';
import { perfWasm } from '../test';
import { secp256k1PairFromSeed, secp256k1Sign } from '.';
const pair = secp256k1PairFromSeed(hexToU8a('0x4380de832af797688026ce24f85204d508243f201650c1a134929e5458b7fbae'));
@@ -29,7 +29,7 @@ describe('sign', (): void => {
// since the libsecp256k1 signatures don't match (but can be verified), we
// do both signing and verification here (checking the extracted key)
performanceWasm('secp256k1Sign', 1000, (_, onlyJs) =>
perfWasm('secp256k1Sign', 1000, (_, onlyJs) =>
secp256k1Sign(msg, pair, undefined, onlyJs)
);
});

View File

@@ -6,7 +6,7 @@ import '../bundleInit';
import { hexToU8a } from '@polkadot/util';
import { waitReady } from '@polkadot/wasm-crypto';
import { performanceWasm } from '../test/performance';
import { perfWasm } from '../test';
import { hasher } from './hasher';
import { secp256k1PairFromSeed, secp256k1Verify } from '.';
@@ -63,7 +63,7 @@ describe('secp256k1Verify', (): void => {
});
});
performanceWasm('secp256k1Verify', 100, (_, onlyJs) =>
perfWasm('secp256k1Verify', 100, (_, onlyJs) =>
secp256k1Verify(
`\x19Ethereum Signed Message:\n${message.length.toString()}${message}`,
'0x55bd020bdbbdc02de34e915effc9b18a99002f4c29f64e22e8dcbb69e722ea6c28e1bb53b9484063fbbfd205e49dcc1f620929f520c9c4c3695150f05a28f52a01',

View File

@@ -4,7 +4,7 @@
import { hexToU8a } from '@polkadot/util';
import { waitReady } from '@polkadot/wasm-crypto';
import { performanceWasm } from '../test/performance';
import { perfWasm } from '../test';
import { sha256AsU8a } from '.';
const TESTS = [
@@ -43,7 +43,7 @@ describe('sha256AsU8a', (): void => {
});
});
performanceWasm('sha256AsU8a', 128000, (input, onlyJs) =>
perfWasm('sha256AsU8a', 128000, (input, onlyJs) =>
sha256AsU8a(input, onlyJs)
);
});

View File

@@ -3,7 +3,7 @@
import { waitReady } from '@polkadot/wasm-crypto';
import { performanceWasm } from '../test/performance';
import { perfWasm } from '../test';
import { sha512AsU8a } from '.';
describe('sha512AsU8a', (): void => {
@@ -23,7 +23,7 @@ describe('sha512AsU8a', (): void => {
});
});
performanceWasm('sha512AsU8a', 64000, (input, onlyJs) =>
perfWasm('sha512AsU8a', 64000, (input, onlyJs) =>
sha512AsU8a(input, onlyJs)
);
});

View File

@@ -0,0 +1,6 @@
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { perf, perfCmp } from '@polkadot/util/test';
export { perfWasm } from './performance';

View File

@@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
import { arrayRange } from '@polkadot/util';
import { perf, perfCmp } from '@polkadot/util/test/performance';
import { perf, perfCmp } from '@polkadot/util/test';
import { randomAsU8a } from '..';
@@ -10,7 +10,7 @@ type ExecFn = (input: Uint8Array, onlyJs: boolean) => unknown;
const GENERATED = arrayRange(256).map(() => [randomAsU8a()]);
export function performanceWasm (name: string, count: number, exec: ExecFn, inputs = GENERATED): void {
export function perfWasm (name: string, count: number, exec: ExecFn, inputs = GENERATED): void {
perfCmp(name, ['WebAssembly', 'JavaScript'], count, inputs, exec);
}

View File

@@ -4,7 +4,7 @@
import { hexToU8a } from '@polkadot/util';
import { waitReady } from '@polkadot/wasm-crypto';
import { performanceWasm } from '../test/performance';
import { perfWasm } from '../test';
import { xxhashAsU8a } from '.';
describe('xxhashAsU8a', (): void => {
@@ -38,7 +38,7 @@ describe('xxhashAsU8a', (): void => {
});
});
performanceWasm('xxhashAsU8a', 8000, (input, onlyJs) =>
perfWasm('xxhashAsU8a', 8000, (input, onlyJs) =>
xxhashAsU8a(input, 128, onlyJs)
);
});

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { perf } from '../test/performance';
import { perf } from '../test';
import { arrayChunk, arrayRange } from '.';
describe('arrayChunk', (): void => {

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { perf } from '../test/performance';
import { perf } from '../test';
import { arrayFlatten } from '.';
const PERF_ONE = [[1, 2, 3, 4, 5]];

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { perf } from '../test/performance';
import { perf } from '../test';
import { arrayRange, arrayShuffle } from '.';
const ptest = arrayRange(16284);

View File

@@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
import { arrayRange } from '../array';
import { perf } from '../test/performance';
import { perf } from '../test';
import { nToU8a } from '.';
const ptest = arrayRange(65536).map((v) => [v]);

View File

@@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
import { arrayRange } from '../array';
import { perf } from '../test/performance';
import { perf } from '../test';
import { BN, bnToU8a } from '.';
const ptest = arrayRange(65536).map((v) => [v]);

View File

@@ -3,7 +3,7 @@
import { BN } from '../bn/bn';
import { hexToU8a } from '../hex/toU8a';
import { perf } from '../test/performance';
import { perf } from '../test';
import { compactFromU8a, compactFromU8aLim } from '.';
describe('compactFromU8a', (): void => {

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { perfCmp } from '../test/performance';
import { perfCmp } from '../test';
import { hexToU8a as hexToU8aBuffer } from './toU8aBuffer';
import { hexToU8a } from '.';
@@ -72,7 +72,7 @@ describe('hexToU8a', (): void => {
).toThrow(/hex value to convert/);
});
perfCmp('hexToU8a', ['hexToU8aBuffer', 'hexToU8a'], 25, [[ptest]], (s: string, isSecond) =>
perfCmp('hexToU8a', ['hexToU8aBuffer', 'hexToU8a'], 40, [[ptest]], (s: string, isSecond) =>
isSecond
? hexToU8a(s)
: hexToU8aBuffer(s)

View File

@@ -4,8 +4,8 @@
import type { HexString } from '../types';
const CHR = '0123456789abcdef';
const U8 = new Array<number>(256);
const U16 = new Array<number>(256 * 256);
const U8 = new Uint8Array(256);
const U16 = new Uint8Array(256 * 256);
for (let i = 0; i < CHR.length; i++) {
U8[CHR[i].charCodeAt(0) | 0] = i | 0;

View File

@@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
import { stringToU8a } from '../string';
import { perf } from '../test/performance';
import { perf } from '../test';
import { isAscii } from '.';
describe('isAscii', (): void => {

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { perfCmp } from '../test/performance';
import { perfCmp } from '../test';
import { isCodec } from '.';
const ptest = {

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { perf } from '../test/performance';
import { perf } from '../test';
import { isHex } from '.';
describe('isHex', (): void => {

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { perf } from '../test/performance';
import { perf } from '../test';
import { isU8a } from '.';
describe('isU8a', (): void => {

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { perf } from '../test/performance';
import { perf } from '../test';
import { isUndefined } from '.';
describe('isUndefined', (): void => {

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { perf } from '../test/performance';
import { perf } from '../test';
import { objectProperties, objectProperty } from '.';
describe('objectProperty/objectProperties', (): void => {

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { perf } from '../test/performance';
import { perf } from '../test';
import { objectSpread } from '.';
describe('objectSpread', (): void => {

View File

@@ -4,7 +4,7 @@
import { getRandomValues } from '@polkadot/x-randomvalues';
import { arrayRange } from '../array';
import { perf } from '../test/performance';
import { perf } from '../test';
import { stringCamelCase, stringUpperFirst } from '.';
const SEPS = [' ', '_', '-', '.', ','];

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { perf } from '../test/performance';
import { perf } from '../test';
import { stringLowerFirst } from '.';
describe('stringLowerFirst', (): void => {

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { perf } from '../test/performance';
import { perf } from '../test';
import { stringUpperFirst } from '.';
describe('stringUpperFirst', (): void => {

View File

@@ -0,0 +1,4 @@
// Copyright 2017-2023 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { perf, perfCmp } from './performance';

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { perf } from '../test/performance';
import { perf } from '../test';
import { u8aCmp } from '.';
const ltest = new Uint8Array(32768);

View File

@@ -4,7 +4,7 @@
import { getRandomValues } from '@polkadot/x-randomvalues';
import { arrayRange } from '../array';
import { perf } from '../test/performance';
import { perf } from '../test';
import { u8aConcat, u8aConcatStrict } from '.';
const ptest = arrayRange(10).map(() => getRandomValues(new Uint8Array(32)));

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { perf } from '../test/performance';
import { perf } from '../test';
import { u8aEmpty } from '.';
describe('u8aEmpty', (): void => {

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { perf } from '../test/performance';
import { perf } from '../test';
import { u8aEq } from '.';
const ltest = new Uint8Array(32768);

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { perf } from '../test/performance';
import { perf } from '../test';
import { u8aToBigInt } from '.';
describe('u8aToBigInt', (): void => {

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { perf } from '../test/performance';
import { perf } from '../test';
import { u8aToBn } from '.';
describe('u8aToBn', (): void => {

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { perfCmp } from '../test/performance';
import { perfCmp } from '../test';
import { u8aToHex as u8aToHexBuffer } from './toHexBuffer';
import { u8aToHex } from '.';

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { perf } from '../test/performance';
import { perf } from '../test';
import { u8aToNumber } from '.';
describe('u8aToNumber', (): void => {

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { perf } from '../test/performance';
import { perf } from '../test';
import { u8aToU8a } from '.';
describe('u8aToU8a', (): void => {

View File

@@ -26,6 +26,7 @@
"@polkadot/x-global": "10.2.7-7-x"
},
"devDependencies": {
"@polkadot/util": "10.2.7-7-x",
"@types/react-native": "^0.71.0"
},
"denoDependencies": {

View File

@@ -1,12 +1,16 @@
// Copyright 2017-2023 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { perf } from '@polkadot/util/test';
import { base64Decode } from './base64';
const HELLO_DUAL = 'aGVsbG8gd29ybGQg0J/RgNC40LLQtdGC0YHRgtCy0YPRjiDQvNC4IOS9oOWlvQ==';
const TESTS = [
{
// hello world Приветствую ми 你好
base64: 'aGVsbG8gd29ybGQg0J/RgNC40LLQtdGC0YHRgtCy0YPRjiDQvNC4IOS9oOWlvQ==',
base64: HELLO_DUAL,
expect: new Uint8Array([104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 32, 208, 159, 209, 128, 208, 184, 208, 178, 208, 181, 209, 130, 209, 129, 209, 130, 208, 178, 209, 131, 209, 142, 32, 208, 188, 208, 184, 32, 228, 189, 160, 229, 165, 189])
},
{
@@ -40,3 +44,5 @@ describe('base64Decode', (): void => {
).toEqual(test.expect);
});
});
perf('base64Decode (hello, dual)', 100_000, [[HELLO_DUAL]], base64Decode);

View File

@@ -9,6 +9,14 @@
// We provide an own (tiny) decoder to not have Buffer deps
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
const map = new Uint8Array(256);
// We use charCodeAt for access here and in the decoder loop - this is faster
// on lookups (array + numbers) and also faster than accessing the specific
// character via data[i] (around a 50% improvement on perf tests)
for (let i = 0; i < chars.length; i++) {
map[chars.charCodeAt(i)] = i;
}
export function base64Decode (data: string): Uint8Array {
const bytes = [];
@@ -17,7 +25,7 @@ export function base64Decode (data: string): Uint8Array {
for (let i = 0; i < data.length && data[i] !== '='; i++) {
// each character represents 6 bits
byte = (byte << 6) | chars.indexOf(data[i]);
byte = (byte << 6) | map[data.charCodeAt(i)];
// each byte needs to contain 8 bits
if ((bits += 6) >= 8) {

View File

@@ -5,6 +5,9 @@
"outDir": "./build",
"rootDir": "./src"
},
"exclude": [
"**/*.spec.ts"
],
"references": [
{ "path": "../x-global/tsconfig.build.json" }
]

View File

@@ -0,0 +1,18 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"baseUrl": "..",
"outDir": "./build",
"rootDir": "./src",
"resolveJsonModule": true,
"emitDeclarationOnly": false,
"noEmit": true
},
"include": [
"**/*.spec.ts"
],
"references": [
{ "path": "../util/tsconfig.build.json" },
{ "path": "../x-global/tsconfig.build.json" }
]
}

View File

@@ -15,6 +15,7 @@
{ "path": "./packages/x-fetch/tsconfig.build.json" },
{ "path": "./packages/x-global/tsconfig.build.json" },
{ "path": "./packages/x-randomvalues/tsconfig.build.json" },
{ "path": "./packages/x-randomvalues/tsconfig.spec.json" },
{ "path": "./packages/x-textdecoder/tsconfig.build.json" },
{ "path": "./packages/x-textencoder/tsconfig.build.json" },
{ "path": "./packages/x-ws/tsconfig.build.json" }

View File

@@ -2411,6 +2411,7 @@ __metadata:
resolution: "@polkadot/x-randomvalues@workspace:packages/x-randomvalues"
dependencies:
"@babel/runtime": ^7.20.13
"@polkadot/util": 10.2.7-7-x
"@polkadot/x-global": 10.2.7-7-x
"@types/react-native": ^0.71.0
languageName: unknown