Compare commits

...
92 Commits
Author SHA1 Message Date
github-actions[bot] ed70e5c65f [CI Skip] release/stable 10.1.2
skip-checks: true
2022-07-29 10:09:28 +00:00
Jaco ca6f157007 10.1.2 (#1617) 2022-07-29 13:06:02 +03:00
github-actions[bot] 6c30e328bb [CI Skip] bump/beta 10.1.2-1-x
skip-checks: true
2022-07-28 08:18:33 +00:00
Jaco 1f6f3c67a8 Bump deps (#1616) 2022-07-28 11:14:19 +03:00
github-actions[bot] d19e2c8469 [CI Skip] bump/beta 10.1.2-0-x
skip-checks: true
2022-07-26 12:06:54 +00:00
Jaco 92f479e0e5 Bump ss58registry (#1615)
* Bump ss58registry

* Adjust
2022-07-26 15:02:34 +03:00
github-actions[bot] 25f9444c53 [CI Skip] release/stable 10.1.1
skip-checks: true
2022-07-21 05:37:00 +00:00
Jaco 6d46f8b24e 10.1.1 (#1614) 2022-07-21 08:33:15 +03:00
github-actions[bot] 0189cdabe9 [CI Skip] bump/beta 10.0.3-19-x
skip-checks: true
2022-07-20 08:51:57 +00:00
Jaco 9d61c2c96c Adjust spread check for .entries() (#1613) 2022-07-20 11:47:55 +03:00
github-actions[bot] 6599b41155 [CI Skip] bump/beta 10.0.3-18-x
skip-checks: true
2022-07-20 08:27:48 +00:00
Jaco 9c05257046 Add ability to spread Map entries (optimization) (#1612) 2022-07-20 11:23:26 +03:00
github-actions[bot] 41e2e67fd0 [CI Skip] bump/beta 10.0.3-17-x
skip-checks: true
2022-07-20 06:39:06 +00:00
Jaco 092fbdd923 Align property & lazy signatures (getName & self) (#1611)
* Align property & lazy signatures (getName & self)

* Adjust tests
2022-07-20 09:34:13 +03:00
github-actions[bot] c1cdc80169 [CI Skip] bump/beta 10.0.3-16-x
skip-checks: true
2022-07-19 19:07:58 +00:00
Jaco 306bbdea12 Pass internal this through on objectProperties (#1610)
* Pass internal this through on objectProperties

* Fix property test
2022-07-19 22:03:26 +03:00
github-actions[bot] f41519e185 [CI Skip] bump/beta 10.0.3-15-x
skip-checks: true
2022-07-19 15:33:00 +00:00
Carlo Sala 1a3fd344b5 feat(ledger): add interlay and unique (#1609) 2022-07-19 18:28:30 +03:00
github-actions[bot] f798c1dbd5 [CI Skip] bump/beta 10.0.3-14-x
skip-checks: true
2022-07-19 08:58:31 +00:00
Jaco 813d358999 hexToU8a lookup optimizations (#1608)
* hexToU8a lookup optimizations

* Non-aligned test
2022-07-19 11:55:01 +03:00
github-actions[bot] e85eb35413 [CI Skip] bump/beta 10.0.3-13-x
skip-checks: true
2022-07-19 05:36:50 +00:00
Jaco 8a50cba394 Additional assert cleanups (#1604) 2022-07-19 08:33:22 +03:00
github-actions[bot] 20f030e987 [CI Skip] bump/beta 10.0.3-12-x
skip-checks: true
2022-07-19 05:28:13 +00:00
Jaco 4a683f41d3 Dev bump (w/ additional deno overrides) (#1607) 2022-07-19 08:23:42 +03:00
github-actions[bot] ea7f59ab73 [CI Skip] bump/beta 10.0.3-11-x
skip-checks: true
2022-07-18 14:54:47 +00:00
Jaco 60498f7f36 Dev bump (#1606) 2022-07-18 17:49:02 +03:00
github-actions[bot] 9ad0c46417 [CI Skip] bump/beta 10.0.3-10-x
skip-checks: true
2022-07-18 13:45:34 +00:00
Jaco 0fc140f838 Additional speed optimizations (#1605) 2022-07-18 16:41:53 +03:00
github-actions[bot] cd63bb695d [CI Skip] bump/beta 10.0.3-9-x
skip-checks: true
2022-07-18 11:55:15 +00:00
Jaco 7eac688074 Small performance adjustments for Uint8Array indexing (#1603) 2022-07-18 14:51:39 +03:00
github-actions[bot] 820a5e4077 [CI Skip] bump/beta 10.0.3-8-x
skip-checks: true
2022-07-18 11:13:19 +00:00
Jaco bc0f69aef0 Create public/secret pairs on add to keyring (#1602)
* Create public/secret pairs on add to keyring

* Remove comment sort

* Adjust pre-compute comment

* Adjust tests

* Fix expectation
2022-07-18 14:09:38 +03:00
github-actions[bot] 5074adf690 [CI Skip] bump/beta 10.0.3-7-x
skip-checks: true
2022-07-18 09:31:32 +00:00
Jaco 8461d105d6 Adjust nobody zero-key pair with pre-computed address (#1601) 2022-07-18 12:27:56 +03:00
github-actions[bot] cd246e2381 [CI Skip] bump/beta 10.0.3-6-x
skip-checks: true
2022-07-17 13:39:12 +00:00
Jaco 8a499bf1bf Bump ss58registry (#1600)
* Bump ss58registry

* Adjust networks deps
2022-07-17 16:35:42 +03:00
github-actions[bot] 5b2ec8e4d6 [CI Skip] bump/beta 10.0.3-5-x
skip-checks: true
2022-07-16 12:44:01 +00:00
Jaco 4a06d1382f Adjust isAscii check to disallow \t, \n, & \r characters (#1599)
* Adjust `isAscii` check to disallow `\t`, `\n`, & `\r` characters

* Readability (& unused code removal)

* Only > & <
2022-07-16 15:40:30 +03:00
github-actions[bot] 66ac9e15a6 [CI Skip] bump/beta 10.0.3-4-x
skip-checks: true
2022-07-16 08:58:10 +00:00
Jaco 0e55357053 Add arrayUnzip (#1598) 2022-07-16 11:54:02 +03:00
github-actions[bot] b4b80bbf67 [CI Skip] bump/beta 10.0.3-3-x
skip-checks: true
2022-07-15 08:13:43 +00:00
Jaco 4355b9b066 Bump deps (w/ @noble/secp256k1) (#1597) 2022-07-15 11:10:00 +03:00
github-actions[bot] 5c92e095ff [CI Skip] bump/beta 10.0.3-2-x
skip-checks: true
2022-07-11 13:35:08 +00:00
Jaco 4fedd594f1 Dedupe sqrt tests between bi/bn (#1596) 2022-07-11 16:31:41 +03:00
github-actions[bot] 6f05fa6634 [CI Skip] bump/beta 10.0.3-1-x
skip-checks: true
2022-07-11 05:19:12 +00:00
Jaco 856e93f4a0 Bump dev (#1595) 2022-07-11 08:15:26 +03:00
github-actions[bot] 195e42ec11 [CI Skip] bump/beta 10.0.3-0-x
skip-checks: true
2022-07-10 08:38:48 +00:00
Jaco 16e90aadfc Fix .123trigger 2022-07-10 11:35:16 +03:00
github-actions[bot] bcdf5ba26e [CI Skip] release/stable 10.0.2
skip-checks: true
2022-07-10 06:28:02 +00:00
Jaco ae9a04e557 Work-around for Jest + dynamic imports (#1594)
* Work-around for Jest + dynamic imports

* CHANGELOG

* 10.0.2
2022-07-10 09:24:11 +03:00
github-actions[bot] 4b37a82fb3 [CI Skip] bump/beta 10.0.2-1-x
skip-checks: true
2022-07-08 21:22:55 +00:00
Jaco 1b69bb9dfa Bump dev deps (#1593) 2022-07-09 00:19:36 +03:00
github-actions[bot] e8f703f850 [CI Skip] bump/beta 10.0.2-0-x
skip-checks: true
2022-07-08 13:34:11 +00:00
Jaco 3ad4455fe1 Adjust eslint config (#1592) 2022-07-08 16:30:50 +03:00
github-actions[bot] 1f6a263a8e [CI Skip] release/stable 10.0.1
skip-checks: true
2022-07-08 05:31:28 +00:00
Jaco 73073529bb 10.0.1 (#1591) 2022-07-08 08:28:07 +03:00
github-actions[bot] e1bdac1ba5 [CI Skip] bump/beta 9.7.3-17-x
skip-checks: true
2022-07-08 04:47:55 +00:00
Jaco 56c619944c Bump deps (#1590)
* Bump deps

* Rebump
2022-07-08 07:44:35 +03:00
github-actions[bot] 4c60b98b07 [CI Skip] bump/beta 9.7.3-16-x
skip-checks: true
2022-07-07 14:50:24 +00:00
Jaco 2f9f007547 CHANGELOG (#1589) 2022-07-07 17:46:30 +03:00
github-actions[bot] d00184fff7 [CI Skip] bump/beta 9.7.3-15-x
skip-checks: true
2022-07-07 14:33:54 +00:00
Carlo Sala e1e3a1699f feat(networks): add ledger support for Aleph Zero (#1588) 2022-07-07 17:30:29 +03:00
github-actions[bot] 90a1837978 [CI Skip] bump/beta 9.7.3-14-x
skip-checks: true
2022-07-07 07:53:03 +00:00
Jaco c96ad1a34e Align BigInt functions with BN (option handling) (#1587)
* Align BigInt functions with BN (option handling)

* CHANGELOG

* Pass bitLength parameter
2022-07-07 10:49:40 +03:00
github-actions[bot] b1eda9efe9 [CI Skip] bump/beta 9.7.3-13-x
skip-checks: true
2022-07-07 07:31:23 +00:00
kaelnewandfengwenjun 2184ae8511 add ledger support for stafi (#1569)
Co-authored-by: fengwenjun <kael@fengwenjun.com>
2022-07-07 10:27:34 +03:00
github-actions[bot] ce94314992 [CI Skip] bump/beta 9.7.3-12-x
skip-checks: true
2022-07-07 07:18:28 +00:00
Jaco eea3596847 Bump deps (#1586) 2022-07-07 10:14:14 +03:00
github-actions[bot] 37e78f7abd [CI Skip] bump/beta 9.7.3-11-x
skip-checks: true
2022-07-07 05:35:56 +00:00
Jaco 4bb2c83213 Adjust exports (#1585) 2022-07-07 08:31:58 +03:00
github-actions[bot] 3828d941a9 [CI Skip] bump/beta 9.7.3-10-x
skip-checks: true
2022-07-07 04:57:20 +00:00
Jaco c92d5cfb20 Remove deprecated call signatures (#1584) 2022-07-07 07:54:07 +03:00
github-actions[bot] 70d2250b3b [CI Skip] bump/beta 9.7.3-9-x
skip-checks: true
2022-07-06 17:37:27 +00:00
Jakub Pánik a46279876f Add HydraDX parachain to genesis (#1583) 2022-07-06 20:34:05 +03:00
github-actions[bot] 4267c4ac76 [CI Skip] bump/beta 9.7.3-8-x
skip-checks: true
2022-07-06 11:04:00 +00:00
Jaco e09dfcffbe Adjust issue template (#1582) 2022-07-06 14:00:36 +03:00
github-actions[bot] b722291de2 [CI Skip] bump/beta 9.7.3-7-x
skip-checks: true
2022-07-06 09:54:00 +00:00
Jaco 4367bb0f68 Adjust for available ESM-only dependencies (#1581)
* Adjust for available ESM-only dependencies

* Flags for jest (sadly, still required mid-2022)
2022-07-06 12:50:36 +03:00
github-actions[bot] 1d71f67e2a [CI Skip] bump/beta 9.7.3-6-x
skip-checks: true
2022-07-05 21:22:56 +00:00
Jaco 2d4995b16e Additional CI actions (#1580) 2022-07-06 00:19:30 +03:00
github-actions[bot] b96cfd36cf [CI Skip] bump/beta 9.7.3-5-x
skip-checks: true
2022-07-05 07:42:41 +00:00
Jaco 9f53838626 Bump dev deps (#1579) 2022-07-05 10:38:50 +03:00
github-actions[bot] 478dd6ccd9 [CI Skip] bump/beta 9.7.3-4-x
skip-checks: true
2022-07-05 07:04:53 +00:00
Jaco fd313c2e91 Push to deno 2022-07-05 10:01:25 +03:00
github-actions[bot] 66b58ea5f2 [CI Skip] bump/beta 9.7.3-3-x
skip-checks: true
2022-07-05 06:59:07 +00:00
Jaco 66acbe04af Adjust deno exports in x-* (#1578)
* Adjust deno exports in x-*

* Adjust versionDetect
2022-07-05 09:55:57 +03:00
github-actions[bot] 2194cc58d7 [CI Skip] bump/beta 9.7.3-2-x
skip-checks: true
2022-07-05 05:38:54 +00:00
Jaco 768f64aec7 Push to deno repo 2022-07-05 08:35:29 +03:00
github-actions[bot] 2176bedd50 [CI Skip] bump/beta 9.7.3-1-x
skip-checks: true
2022-07-04 09:38:31 +00:00
Jaco 8273eb5441 Switch on TS isolatedModules (#1577) 2022-07-04 12:35:03 +03:00
github-actions[bot] 76af1b8822 [CI Skip] bump/beta 9.7.3-0-x
skip-checks: true
2022-07-04 07:23:50 +00:00
Jaco 80eb70a382 Adjust some usages to not require @types/node (#1576) 2022-07-04 10:20:24 +03:00
101 changed files with 1586 additions and 1483 deletions
-1
View File
@@ -1 +0,0 @@
9.7.2
-32
View File
@@ -1,32 +0,0 @@
8
2.6.2
2.12.2
5.2.2
5.2.3
5.4.2
5.4.3
5.4.4
5.5.2
5.6.2
5.6.3
5.9.2
6.0.2
6.0.3
6.0.4
6.0.5
7.0.2
7.0.3
7.1.2
7.8.2
7.9.2
8.0.2
8.0.3
8.0.4
8.0.5
8.1.2
8.2.2
8.3.2
8.3.3
9.6.2
9.7.2
View File
+49 -13
View File
@@ -1,50 +1,86 @@
<!--
For general support, howto, coding and bundling questions, please use the Substrate & Polkadot StackExchange at https://substrate.stackexchange.com/ and get other ecosystem developers involved. This issues in this repository are meant for the tracking of feature requests and bug reports.
For general support, howto, coding and bundling questions, please
use the Substrate & Polkadot StackExchange at
While all issues are looked at non-bug and non-features would take quite a bit longer to get to and may yield less than satisfactory responses in this format.
https://substrate.stackexchange.com/
Additionally, please ensure you have done a search on the existing and closed issues before logging a new request. This saves time on all sides.
and get other ecosystem developers involved. This issues in this
repository are meant for the tracking of feature requests and bug
reports.
While all issues are looked at non-bug and non-features would take
quite a bit longer to get to and may yield less than satisfactory
responses in this format.
Additionally, please ensure you have done a search on the existing
and closed issues before logging a new request. This saves time on
all sides.
-->
* **I'm submitting a ...**
<!--- Try and classify your actual report -->
<!---
REQUIRED:
Classify the type of report your are submitting
-->
- [ ] Bug report
- [ ] Feature request
- [ ] Support request (please bear the comments above in mind)
- [ ] Support request
- [ ] Other
* **What is the current behavior and expected behavior?**
<!--- If you're describing a bug, tell us what should happen -->
<!--- If you're suggesting a change/improvement, tell us how it should work -->
<!---
REQUIRED:
If you're describing a bug, tell us what should happen. If you're
suggesting a change/improvement, tell us how it should work.
-->
* **What is the motivation for changing the behavior?**
<!--- Not obligatory, but suggest a motivation for the request -->
<!--- or ideas how to implement the addition or change -->
<!---
OPTIONAL:
Suggest a motivation for the request or ideas how to implement the
addition or change
-->
* **Please tell us about your environment:**
<!--- Include as many relevant details about the environment you experienced the issue in -->
<!--- Also snsure that you have tested against the latest stable releases if a bug -->
<!---
REQUIRED:
Include as many relevant details about the environment in which you
experienced the issue. Also ensure that you have tested against the
latest stable releases if you believe this to be a bug
-->
- Version:
- Environment:
- [ ] Node.js
- [ ] Browser
- [ ] Other (limited support for other environments available)
- [ ] Other (limited support for other environments)
- Language:
- [ ] JavaScript
- [ ] TypeScript
- [ ] TypeScript (include tsc --version)
- [ ] Other
+5 -1
View File
@@ -5,7 +5,7 @@ jobs:
pr:
strategy:
matrix:
step: ['lint', 'test', 'build']
step: ['lint', 'test', 'build', 'deno']
name: ${{ matrix.step }}
runs-on: ubuntu-latest
env:
@@ -13,7 +13,11 @@ jobs:
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
steps:
- uses: actions/checkout@v2
- uses: denoland/setup-deno@v1
with:
deno-version: vx.x.x
- name: ${{ matrix.step }}
if: always()
run: |
yarn install --immutable | grep -v 'YN0013'
yarn ${{ matrix.step }}
+3 -7
View File
@@ -1,14 +1,12 @@
--test-*
_book/
build/
build-cjs/
build-esm/
build-deno/
build-docs/
build-*/
coverage/
docs/.vuepress/dist/
node_modules/
tmp/
/import_map.json
/mod.ts
.DS_Store
.env.local
.env.development.local
@@ -27,6 +25,4 @@ npm-debug.log*
package-lock.json
yarn-debug.log*
yarn-error.log*
store.db
store.db.compacted
tsconfig.*buildinfo
+47
View File
@@ -1,5 +1,52 @@
# CHANGELOG
## 10.1.2 Jul 29, 2022
Changes:
- Upgrade dependencies to latest stable versions
## 10.1.1 Jul 21, 2022
Changes:
- Add `arrayUnzip` as reverse of `arrayZip`
- Adjust `objectSpread` to natively handle `Map` entries spreads
- Adjust `isAscii` check to disallow `\t`, `\n`, & `\r` characters
- Adjust `nobody` zero-key pair with pre-computed address
- Align `objectProperty` & `lazyMethod` call signatures (backwards compatible)
- Various internal speed optimizations
- Upgrade dependencies to latest stable versions
## 10.0.2 Jul 10, 2022
Changes:
- Adjust async import in `x-fetch` to be Jest-friendly
## 10.0.1 Jul 8, 2022
- **Breaking change** In this major version version previously deprecated function signatures have been removed. If still using the old forms for either `bnToHex`, `bnToU8a`, `formatBalance`, `hexToBn` or `u8aToBn`, please update and only pass through an options object as the second parameter.
Contributed:
- Ledger support for Stafi (Thanks to https://github.com/kaelnew)
- Ledger support for Aleph Zero (Thanks to https://github.com/carlosala)
- Add genesis for HydraDX parachain (Thanks to https://github.com/jak-pan)
Changes:
- Remove deprecated signatures for `bnToHex`, `bnToU8a`, `formatBalance`, `hexToBn`, `u8aToBn`
- Align option handling of `n*` (BigInt) functions with `bn*` (BN)
- Allow for usage without `@types/node` installed
- Adjust for available ESM-only dependencies
- Upgrade dependencies to latest stable versions
- Upgrade to `@polkadot/wasm-crypto` 6.2.3
## 9.7.2 Jul 4, 2022
Changes:
+4 -3
View File
@@ -1,10 +1,10 @@
1393 Jaco 9.7.2 (#1575)
1435 Jaco 10.1.2 (#1617)
9 Antoine Estienne Add eth uri keyring test (#1291)
6 Amaury Martiny Add tests from Rust (#283)
6 Carlo Sala feat(ledger): add interlay and unique (#1609)
5 Jakub Pánik Add HydraDX parachain to genesis (#1583)
5 kwingram25 Add BN consts and timeToString (#610)
4 Adam Dossa Update Polymesh Genesis Hash (#1193)
4 Carlo Sala add Composable support for ledger (#1515)
4 Jakub Pánik Add basilisk 🐍 (#1396)
3 Luke Schoen docs: Fix example in readme since we use default imports (#243)
3 pan update bifrost genesis hash (#1521)
2 AndreasGassmann feat(dependencies): remove moment.js (#530)
@@ -30,6 +30,7 @@
1 Jake Naviasky Add evmToAddress and addressToEvm crypto utils. (#705)
1 JesseAbram added check if valid address to docs (#440)
1 joe petrowski Add example for multisig address creation (#590)
1 kaelnew add ledger support for stafi (#1569)
1 Lezek123 logger - wildcard include/exclude with DEBUG env (#932)
1 Mario Neises remove redudant export (#257)
1 Miguel Hervas Add CFG Ledger Support (#1057)
+11 -6
View File
@@ -10,7 +10,12 @@
"url": "https://github.com/polkadot-js/common.git"
},
"sideEffects": false,
"version": "9.7.2",
"type": "module",
"version": "10.1.2",
"versions": {
"git": "10.1.2",
"npm": "10.1.2"
},
"workspaces": [
"packages/*"
],
@@ -19,17 +24,17 @@
"build:release": "polkadot-ci-ghact-build",
"build:rollup": "polkadot-exec-rollup --config",
"clean": "polkadot-dev-clean-build",
"deno": "yarn polkadot-dev-deno-map && yarn build && deno check --import-map=import_map.json mod.ts",
"lint": "polkadot-dev-run-lint",
"networks:crosscheck": "polkadot-dev-run-test packages/networks/src/crosscheck",
"postinstall": "polkadot-dev-yarn-only",
"test": "polkadot-dev-run-test --coverage --runInBand --testPathIgnorePatterns crosscheck --testPathIgnorePatterns toMiniSecretCmp",
"test": "NODE_OPTIONS=--experimental-vm-modules polkadot-dev-run-test --coverage --runInBand --testPathIgnorePatterns crosscheck --testPathIgnorePatterns toMiniSecretCmp",
"test:mnemonicCmp": "polkadot-dev-run-test packages/util-crypto/src/mnemonic/toMiniSecretCmp.spec.ts",
"test:one": "polkadot-dev-run-test --runInBand"
},
"devDependencies": {
"@babel/core": "^7.18.6",
"@polkadot/dev": "^0.67.50",
"@types/jest": "^28.1.4"
"@babel/core": "^7.18.9",
"@polkadot/dev": "^0.67.86",
"@types/jest": "^28.1.6"
},
"resolutions": {
"typescript": "^4.7.4"
View File
+7 -7
View File
@@ -16,18 +16,18 @@
},
"sideEffects": false,
"type": "module",
"version": "9.7.2",
"version": "10.1.2",
"browser": "browser.js",
"main": "node.js",
"react-native": "react-native.js",
"dependencies": {
"@babel/runtime": "^7.18.6",
"@ledgerhq/hw-transport": "^6.27.1",
"@ledgerhq/hw-transport-webhid": "^6.27.1",
"@ledgerhq/hw-transport-webusb": "^6.27.1",
"@polkadot/util": "9.7.2"
"@babel/runtime": "^7.18.9",
"@ledgerhq/hw-transport": "^6.27.2",
"@ledgerhq/hw-transport-webhid": "^6.27.2",
"@ledgerhq/hw-transport-webusb": "^6.27.2",
"@polkadot/util": "10.1.2"
},
"optionalDependencies": {
"@ledgerhq/hw-transport-node-hid-singleton": "^6.27.1"
"@ledgerhq/hw-transport-node-hid-singleton": "^6.27.3"
}
}
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/hw-ledger-transports', path: 'auto', type: 'auto', version: '9.7.2' };
export const packageInfo = { name: '@polkadot/hw-ledger-transports', path: 'auto', type: 'auto', version: '10.1.2' };
+6 -6
View File
@@ -19,13 +19,13 @@
"./detectPackage.cjs"
],
"type": "module",
"version": "9.7.2",
"version": "10.1.2",
"main": "index.js",
"dependencies": {
"@babel/runtime": "^7.18.6",
"@ledgerhq/hw-transport": "^6.27.1",
"@polkadot/hw-ledger-transports": "9.7.2",
"@polkadot/util": "9.7.2",
"@zondax/ledger-substrate": "^0.31.0"
"@babel/runtime": "^7.18.9",
"@ledgerhq/hw-transport": "^6.27.2",
"@polkadot/hw-ledger-transports": "10.1.2",
"@polkadot/util": "10.1.2",
"@zondax/ledger-substrate": "^0.33.0"
}
}
+5 -1
View File
@@ -4,11 +4,12 @@
import type Transport from '@ledgerhq/hw-transport';
import type { SubstrateApp } from '@zondax/ledger-substrate';
import { newAcalaApp, newAstarApp, newBifrostApp, newCentrifugeApp, newComposableApp, newDockApp, newEdgewareApp, newEquilibriumApp, newGenshiroApp, newKaruraApp, newKusamaApp, newNodleApp, newParallelApp, newPolkadexApp, newPolkadotApp, newPolymeshApp, newSoraApp, newStatemineApp, newStatemintApp, newXXNetworkApp } from '@zondax/ledger-substrate';
import { newAcalaApp, newAlephZeroApp, newAstarApp, newBifrostApp, newCentrifugeApp, newComposableApp, newDockApp, newEdgewareApp, newEquilibriumApp, newGenshiroApp, newInterlayApp, newKaruraApp, newKusamaApp, newNodleApp, newParallelApp, newPolkadexApp, newPolkadotApp, newPolymeshApp, newSoraApp, newStafiApp, newStatemineApp, newStatemintApp, newUniqueApp, newXXNetworkApp } from '@zondax/ledger-substrate';
// These match up with the keys of the knownLedger object in the @polkadot/networks/defaults/ledger.ts
export const ledgerApps: Record<string, (transport: Transport) => SubstrateApp> = {
acala: newAcalaApp,
'aleph-node': newAlephZeroApp,
astar: newAstarApp,
bifrost: newBifrostApp,
centrifuge: newCentrifugeApp,
@@ -17,6 +18,7 @@ export const ledgerApps: Record<string, (transport: Transport) => SubstrateApp>
edgeware: newEdgewareApp,
equilibrium: newEquilibriumApp,
genshiro: newGenshiroApp,
'interlay-parachain': newInterlayApp,
karura: newKaruraApp,
kusama: newKusamaApp,
'nodle-para': newNodleApp,
@@ -25,7 +27,9 @@ export const ledgerApps: Record<string, (transport: Transport) => SubstrateApp>
polkadot: newPolkadotApp,
polymesh: newPolymeshApp,
sora: newSoraApp,
stafi: newStafiApp,
statemine: newStatemineApp,
statemint: newStatemintApp,
unique: newUniqueApp,
xxnetwork: newXXNetworkApp
};
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/hw-ledger', path: 'auto', type: 'auto', version: '9.7.2' };
export const packageInfo = { name: '@polkadot/hw-ledger', path: 'auto', type: 'auto', version: '10.1.2' };
+6 -6
View File
@@ -20,15 +20,15 @@
"./detectPackage.cjs"
],
"type": "module",
"version": "9.7.2",
"version": "10.1.2",
"main": "index.js",
"dependencies": {
"@babel/runtime": "^7.18.6",
"@polkadot/util": "9.7.2",
"@polkadot/util-crypto": "9.7.2"
"@babel/runtime": "^7.18.9",
"@polkadot/util": "10.1.2",
"@polkadot/util-crypto": "10.1.2"
},
"peerDependencies": {
"@polkadot/util": "9.7.2",
"@polkadot/util-crypto": "9.7.2"
"@polkadot/util": "10.1.2",
"@polkadot/util-crypto": "10.1.2"
}
}
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/keyring', path: 'auto', type: 'auto', version: '9.7.2' };
export const packageInfo = { name: '@polkadot/keyring', path: 'auto', type: 'auto', version: '10.1.2' };
+7 -3
View File
@@ -4,7 +4,7 @@
import type { EncryptedJsonEncoding } from '@polkadot/util-crypto/types';
import type { PairInfo } from './types';
import { assert, u8aEq } from '@polkadot/util';
import { u8aEq } from '@polkadot/util';
import { jsonDecryptData } from '@polkadot/util-crypto';
import { PKCS8_DIVIDER, PKCS8_HEADER, PUB_LENGTH, SEC_LENGTH, SEED_LENGTH } from './defaults';
@@ -22,7 +22,9 @@ export function decodePair (passphrase?: string, encrypted?: Uint8Array | null,
const decrypted = jsonDecryptData(encrypted, passphrase, encType);
const header = decrypted.subarray(0, PKCS8_HEADER.length);
assert(u8aEq(header, PKCS8_HEADER), 'Invalid Pkcs8 header found in body');
if (!u8aEq(header, PKCS8_HEADER)) {
throw new Error('Invalid Pkcs8 header found in body');
}
let secretKey = decrypted.subarray(SEED_OFFSET, SEED_OFFSET + SEC_LENGTH);
let divOffset = SEED_OFFSET + SEC_LENGTH;
@@ -34,7 +36,9 @@ export function decodePair (passphrase?: string, encrypted?: Uint8Array | null,
secretKey = decrypted.subarray(SEED_OFFSET, divOffset);
divider = decrypted.subarray(divOffset, divOffset + PKCS8_DIVIDER.length);
assert(u8aEq(divider, PKCS8_DIVIDER), 'Invalid Pkcs8 divider found in body');
if (!u8aEq(divider, PKCS8_DIVIDER)) {
throw new Error('Invalid Pkcs8 divider found in body');
}
}
const pubOffset = divOffset + PKCS8_DIVIDER.length;
+4 -2
View File
@@ -3,13 +3,15 @@
import type { PairInfo } from './types';
import { assert, u8aConcat } from '@polkadot/util';
import { u8aConcat } from '@polkadot/util';
import { naclEncrypt, scryptEncode, scryptToU8a } from '@polkadot/util-crypto';
import { PKCS8_DIVIDER, PKCS8_HEADER } from './defaults';
export function encodePair ({ publicKey, secretKey }: PairInfo, passphrase?: string): Uint8Array {
assert(secretKey, 'Expected a valid secretKey to be passed to encode');
if (!secretKey) {
throw new Error('Expected a valid secretKey to be passed to encode');
}
const encoded = u8aConcat(
PKCS8_HEADER,
+2 -2
View File
@@ -217,11 +217,11 @@ describe('pair', (): void => {
});
it('allows derivation on the pair', (): void => {
const alice = createPair({ toSS58, type: 'sr25519' }, { publicKey: PAIRSSR25519[0].publicKey, secretKey: PAIRSSR25519[0].secretKey }, {});
const alice = createPair({ toSS58, type: 'sr25519' }, { publicKey: hexToU8a(PAIRSSR25519[0].p), secretKey: hexToU8a(PAIRSSR25519[0].s) }, {});
const stash = alice.derive('//stash');
const soft = alice.derive('//funding/0');
expect(stash.publicKey).toEqual(PAIRSSR25519[1].publicKey);
expect(stash.publicKey).toEqual(hexToU8a(PAIRSSR25519[1].p));
expect(soft.address).toEqual('5ECQNn7UueWHPFda5qUi4fTmTtyCnPvGnuoyVVSj5CboJh9J');
});
+22 -9
View File
@@ -6,7 +6,7 @@ import type { EncryptedJsonEncoding, Keypair, KeypairType } from '@polkadot/util
import type { KeyringPair, KeyringPair$Json, KeyringPair$Meta, SignOptions } from '../types';
import type { PairInfo } from './types';
import { assert, objectSpread, u8aConcat, u8aEmpty, u8aEq, u8aToHex, u8aToU8a } from '@polkadot/util';
import { objectSpread, u8aConcat, u8aEmpty, u8aEq, u8aToHex, u8aToU8a } from '@polkadot/util';
import { blake2AsU8a, convertPublicKeyToCurve25519, convertSecretKeyToCurve25519, ed25519PairFromSeed as ed25519FromSeed, ed25519Sign, ethereumEncode, keccakAsU8a, keyExtractPath, keyFromPath, naclOpen, naclSeal, secp256k1Compress, secp256k1Expand, secp256k1PairFromSeed as secp256k1FromSeed, secp256k1Sign, signatureVerify, sr25519PairFromSeed as sr25519FromSeed, sr25519Sign, sr25519VrfSign, sr25519VrfVerify } from '@polkadot/util-crypto';
import { decodePair } from './decode';
@@ -145,8 +145,11 @@ export function createPair ({ toSS58, type }: Setup, { publicKey, secretKey }: P
// eslint-disable-next-line sort-keys
decodePkcs8,
decryptMessage: (encryptedMessageWithNonce: HexString | string | Uint8Array, senderPublicKey: HexString | string | Uint8Array): Uint8Array | null => {
assert(!isLocked(secretKey), 'Cannot encrypt with a locked key pair');
assert(!['ecdsa', 'ethereum'].includes(type), 'Secp256k1 not supported yet');
if (isLocked(secretKey)) {
throw new Error('Cannot encrypt with a locked key pair');
} else if (['ecdsa', 'ethereum'].includes(type)) {
throw new Error('Secp256k1 not supported yet');
}
const messageU8a = u8aToU8a(encryptedMessageWithNonce);
@@ -158,8 +161,11 @@ export function createPair ({ toSS58, type }: Setup, { publicKey, secretKey }: P
);
},
derive: (suri: string, meta?: KeyringPair$Meta): KeyringPair => {
assert(type !== 'ethereum', 'Unable to derive on this keypair');
assert(!isLocked(secretKey), 'Cannot derive on a locked keypair');
if (type === 'ethereum') {
throw new Error('Unable to derive on this keypair');
} else if (isLocked(secretKey)) {
throw new Error('Cannot derive on a locked keypair');
}
const { path } = keyExtractPath(suri);
const derived = keyFromPath({ publicKey, secretKey }, path, type);
@@ -170,8 +176,11 @@ export function createPair ({ toSS58, type }: Setup, { publicKey, secretKey }: P
return recode(passphrase);
},
encryptMessage: (message: HexString | string | Uint8Array, recipientPublicKey: HexString | string | Uint8Array, nonceIn?: Uint8Array): Uint8Array => {
assert(!isLocked(secretKey), 'Cannot encrypt with a locked key pair');
assert(!['ecdsa', 'ethereum'].includes(type), 'Secp256k1 not supported yet');
if (isLocked(secretKey)) {
throw new Error('Cannot encrypt with a locked key pair');
} else if (['ecdsa', 'ethereum'].includes(type)) {
throw new Error('Secp256k1 not supported yet');
}
const { nonce, sealed } = naclSeal(u8aToU8a(message), convertSecretKeyToCurve25519(secretKey), convertPublicKeyToCurve25519(u8aToU8a(recipientPublicKey)), nonceIn);
@@ -184,7 +193,9 @@ export function createPair ({ toSS58, type }: Setup, { publicKey, secretKey }: P
meta = objectSpread({}, meta, additional);
},
sign: (message: HexString | string | Uint8Array, options: SignOptions = {}): Uint8Array => {
assert(!isLocked(secretKey), 'Cannot sign with a locked key pair');
if (isLocked(secretKey)) {
throw new Error('Cannot sign with a locked key pair');
}
return u8aConcat(
options.withType
@@ -212,7 +223,9 @@ export function createPair ({ toSS58, type }: Setup, { publicKey, secretKey }: P
return signatureVerify(message, signature, TYPE_ADDRESS[type](u8aToU8a(signerPublic))).isValid;
},
vrfSign: (message: HexString | string | Uint8Array, context?: HexString | string | Uint8Array, extra?: string | Uint8Array): Uint8Array => {
assert(!isLocked(secretKey), 'Cannot sign with a locked key pair');
if (isLocked(secretKey)) {
throw new Error('Cannot sign with a locked key pair');
}
if (type === 'sr25519') {
return sr25519VrfSign(message, { secretKey }, context, extra);
+4 -3
View File
@@ -3,10 +3,11 @@
import type { KeyringPair, KeyringPair$Json, KeyringPair$Meta } from '../types';
import { encodeAddress } from '@polkadot/util-crypto';
// empty publicKey
const publicKey = new Uint8Array(32);
const address = encodeAddress(publicKey);
// pre-computed via encodeAddress(publicKey)
const address = '5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM';
const meta = {
isTesting: true,
+39 -34
View File
@@ -1,19 +1,20 @@
// Copyright 2017-2022 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { HexString } from '@polkadot/util/types';
import type { KeypairType } from '@polkadot/util-crypto/types';
import type { KeyringInstance, KeyringOptions } from './types';
import { hexToU8a } from '@polkadot/util';
import { KeypairType } from '@polkadot/util-crypto/types';
import { Keyring } from './keyring';
import { createPair } from './pair';
interface PairDef {
name?: string;
publicKey: Uint8Array;
p: HexString;
s: HexString;
seed?: string;
secretKey?: Uint8Array;
type: KeypairType
}
@@ -23,50 +24,50 @@ interface PairDef {
// adding the keys when only the keyring is used.
export const PAIRSSR25519: PairDef[] = [
{
publicKey: hexToU8a('0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d'),
secretKey: hexToU8a('0x98319d4ff8a9508c4bb0cf0b5a78d760a0b2082c02775e6e82370816fedfff48925a225d97aa00682d6a59b95b18780c10d7032336e88f3442b42361f4a66011'), // nosemgrep
p: '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d',
s: '0x98319d4ff8a9508c4bb0cf0b5a78d760a0b2082c02775e6e82370816fedfff48925a225d97aa00682d6a59b95b18780c10d7032336e88f3442b42361f4a66011', // nosemgrep
seed: 'Alice',
type: 'sr25519'
},
{
publicKey: hexToU8a('0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f'),
secretKey: hexToU8a('0xe8da6c9d810e020f5e3c7f5af2dea314cbeaa0d72bc6421e92c0808a0c584a6046ab28e97c3ffc77fe12b5a4d37e8cd4afbfebbf2391ffc7cb07c0f38c023efd'), // nosemgrep
p: '0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f',
s: '0xe8da6c9d810e020f5e3c7f5af2dea314cbeaa0d72bc6421e92c0808a0c584a6046ab28e97c3ffc77fe12b5a4d37e8cd4afbfebbf2391ffc7cb07c0f38c023efd', // nosemgrep
seed: 'Alice//stash',
type: 'sr25519'
},
{
publicKey: hexToU8a('0x8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48'),
secretKey: hexToU8a('0x081ff694633e255136bdb456c20a5fc8fed21f8b964c11bb17ff534ce80ebd5941ae88f85d0c1bfc37be41c904e1dfc01de8c8067b0d6d5df25dd1ac0894a325'), // nosemgrep
p: '0x8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48',
s: '0x081ff694633e255136bdb456c20a5fc8fed21f8b964c11bb17ff534ce80ebd5941ae88f85d0c1bfc37be41c904e1dfc01de8c8067b0d6d5df25dd1ac0894a325', // nosemgrep
seed: 'Bob',
type: 'sr25519'
},
{
publicKey: hexToU8a('0xfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e'),
secretKey: hexToU8a('0xc006507cdfc267a21532394c49ca9b754ca71de21e15a1cdf807c7ceab6d0b6c3ed408d9d35311540dcd54931933e67cf1ea10d46f75408f82b789d9bd212fde'), // nosemgrep
p: '0xfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e',
s: '0xc006507cdfc267a21532394c49ca9b754ca71de21e15a1cdf807c7ceab6d0b6c3ed408d9d35311540dcd54931933e67cf1ea10d46f75408f82b789d9bd212fde', // nosemgrep
seed: 'Bob//stash',
type: 'sr25519'
},
{
publicKey: hexToU8a('0x90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22'),
secretKey: hexToU8a('0xa8f2d83016052e5d6d77b2f6fd5d59418922a09024cda701b3c34369ec43a7668faf12ff39cd4e5d92bb773972f41a7a5279ebc2ed92264bed8f47d344f8f18c'), // nosemgrep
p: '0x90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22',
s: '0xa8f2d83016052e5d6d77b2f6fd5d59418922a09024cda701b3c34369ec43a7668faf12ff39cd4e5d92bb773972f41a7a5279ebc2ed92264bed8f47d344f8f18c', // nosemgrep
seed: 'Charlie',
type: 'sr25519'
},
{
publicKey: hexToU8a('0x306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20'),
secretKey: hexToU8a('0x20e05482ca4677e0edbc58ae9a3a59f6ed3b1a9484ba17e64d6fe8688b2b7b5d108c4487b9323b98b11fe36cb301b084e920f7b7895536809a6d62a451b25568'), // nosemgrep
p: '0x306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20',
s: '0x20e05482ca4677e0edbc58ae9a3a59f6ed3b1a9484ba17e64d6fe8688b2b7b5d108c4487b9323b98b11fe36cb301b084e920f7b7895536809a6d62a451b25568', // nosemgrep
seed: 'Dave',
type: 'sr25519'
},
{
publicKey: hexToU8a('0xe659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e'),
secretKey: hexToU8a('0x683576abfd5dc35273e4264c23095a1bf21c14517bece57c7f0cc5c0ed4ce06a3dbf386b7828f348abe15d76973a72009e6ef86a5c91db2990cb36bb657c6587'), // nosemgrep
p: '0xe659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e',
s: '0x683576abfd5dc35273e4264c23095a1bf21c14517bece57c7f0cc5c0ed4ce06a3dbf386b7828f348abe15d76973a72009e6ef86a5c91db2990cb36bb657c6587', // nosemgrep
seed: 'Eve',
type: 'sr25519'
},
{
publicKey: hexToU8a('0x1cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c'),
secretKey: hexToU8a('0xb835c20f450079cf4f513900ae9faf8df06ad86c681884122c752a4b2bf74d4303e4f21bc6cc62bb4eeed5a9cce642c25e2d2ac1464093b50f6196d78e3a7426'), // nosemgrep
p: '0x1cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c',
s: '0xb835c20f450079cf4f513900ae9faf8df06ad86c681884122c752a4b2bf74d4303e4f21bc6cc62bb4eeed5a9cce642c25e2d2ac1464093b50f6196d78e3a7426', // nosemgrep
seed: 'Ferdie',
type: 'sr25519'
}
@@ -75,38 +76,38 @@ export const PAIRSSR25519: PairDef[] = [
export const PAIRSETHEREUM: PairDef[] = [
{
name: 'Alith',
publicKey: hexToU8a('0x02509540919faacf9ab52146c9aa40db68172d83777250b28e4679176e49ccdd9f'),
secretKey: hexToU8a('0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133'), // nosemgrep
p: '0x02509540919faacf9ab52146c9aa40db68172d83777250b28e4679176e49ccdd9f',
s: '0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133', // nosemgrep
type: 'ethereum'
},
{
name: 'Baltathar',
publicKey: hexToU8a('0x033bc19e36ff1673910575b6727a974a9abd80c9a875d41ab3e2648dbfb9e4b518'),
secretKey: hexToU8a('0x8075991ce870b93a8870eca0c0f91913d12f47948ca0fd25b49c6fa7cdbeee8b'), // nosemgrep
p: '0x033bc19e36ff1673910575b6727a974a9abd80c9a875d41ab3e2648dbfb9e4b518',
s: '0x8075991ce870b93a8870eca0c0f91913d12f47948ca0fd25b49c6fa7cdbeee8b', // nosemgrep
type: 'ethereum'
},
{
name: 'Charleth',
publicKey: hexToU8a('0x0234637bdc0e89b5d46543bcbf8edff329d2702bc995e27e9af4b1ba009a3c2a5e'),
secretKey: hexToU8a('0x0b6e18cafb6ed99687ec547bd28139cafdd2bffe70e6b688025de6b445aa5c5b'), // nosemgrep
p: '0x0234637bdc0e89b5d46543bcbf8edff329d2702bc995e27e9af4b1ba009a3c2a5e',
s: '0x0b6e18cafb6ed99687ec547bd28139cafdd2bffe70e6b688025de6b445aa5c5b', // nosemgrep
type: 'ethereum'
},
{
name: 'Dorothy',
publicKey: hexToU8a('0x02a00d60b2b408c2a14c5d70cdd2c205db8985ef737a7e55ad20ea32cc9e7c417c'),
secretKey: hexToU8a('0x39539ab1876910bbf3a223d84a29e28f1cb4e2e456503e7e91ed39b2e7223d68'), // nosemgrep
p: '0x02a00d60b2b408c2a14c5d70cdd2c205db8985ef737a7e55ad20ea32cc9e7c417c',
s: '0x39539ab1876910bbf3a223d84a29e28f1cb4e2e456503e7e91ed39b2e7223d68', // nosemgrep
type: 'ethereum'
},
{
name: 'Ethan',
publicKey: hexToU8a('0x025cdc005b752651cd3f728fb9192182acb3a9c89e19072cbd5b03f3ee1f1b3ffa'),
secretKey: hexToU8a('0x7dce9bc8babb68fec1409be38c8e1a52650206a7ed90ff956ae8a6d15eeaaef4'), // nosemgrep
p: '0x025cdc005b752651cd3f728fb9192182acb3a9c89e19072cbd5b03f3ee1f1b3ffa',
s: '0x7dce9bc8babb68fec1409be38c8e1a52650206a7ed90ff956ae8a6d15eeaaef4', // nosemgrep
type: 'ethereum'
},
{
name: 'Faith',
publicKey: hexToU8a('0x037964b6c9d546da4646ada28a99e34acaa1d14e7aba861a9055f9bd200c8abf74'),
secretKey: hexToU8a('0xb9d2ea9a615f3165812e8d44de0d24da9bbd164b65c4f0573e1ce2c8dbd9c8df'), // nosemgrep
p: '0x037964b6c9d546da4646ada28a99e34acaa1d14e7aba861a9055f9bd200c8abf74',
s: '0xb9d2ea9a615f3165812e8d44de0d24da9bbd164b65c4f0573e1ce2c8dbd9c8df', // nosemgrep
type: 'ethereum'
}
];
@@ -130,16 +131,20 @@ function createMeta (name?: string, seed?: string) {
*/
export function createTestKeyring (options: KeyringOptions = {}, isDerived = true): KeyringInstance {
const keyring = new Keyring(options);
const pairs = (options.type && options.type === 'ethereum')
const pairs = options.type === 'ethereum'
? PAIRSETHEREUM
: PAIRSSR25519;
for (const { name, publicKey, secretKey, seed, type } of pairs) {
for (const { name, p, s, seed, type } of pairs) {
const meta = createMeta(name, seed);
const pair = !isDerived && !name && seed
? keyring.addFromUri(seed, meta, options.type)
: keyring.addPair(
createPair({ toSS58: keyring.encodeAddress, type }, { publicKey, secretKey }, meta)
createPair(
{ toSS58: keyring.encodeAddress, type },
{ publicKey: hexToU8a(p), secretKey: hexToU8a(s) },
meta
)
);
pair.lock = (): void => {
+5 -6
View File
@@ -17,15 +17,14 @@
},
"sideEffects": false,
"type": "module",
"version": "9.7.2",
"version": "10.1.2",
"main": "index.js",
"dependencies": {
"@babel/runtime": "^7.18.6",
"@polkadot/util": "9.7.2",
"@substrate/ss58-registry": "^1.23.0"
"@babel/runtime": "^7.18.9",
"@polkadot/util": "10.1.2",
"@substrate/ss58-registry": "^1.25.0"
},
"devDependencies": {
"@polkadot/hw-ledger": "9.7.2",
"@polkadot/x-fetch": "9.7.2"
"@polkadot/hw-ledger": "10.1.2"
}
}
-75
View File
@@ -1,75 +0,0 @@
// Copyright 2017-2022 @polkadot/networks authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Ss58Registry } from './types';
import fs from 'fs';
import { objectKeys, stringify } from '@polkadot/util';
import { fetch } from '@polkadot/x-fetch';
import { allNetworks } from './';
const REGISTRY = 'https://raw.githubusercontent.com/paritytech/ss58-registry/main/ss58-registry.json';
const OUTPUT = './.github/ss58-check.md';
function assertAndLog (check: boolean, error: string): void {
if (!check) {
process.env.CI_LOG && fs.appendFileSync(OUTPUT, `
${error}
`);
throw new Error(error);
}
}
describe('check latest Substrate ss58 registry', (): void => {
let original: Ss58Registry;
beforeAll(async (): Promise<void> => {
original = (await (await fetch(REGISTRY)).json()) as Ss58Registry;
});
it('has the same number as the original', (): void => {
assertAndLog(allNetworks.length === original.registry.length, `Number of entries mismatched:: Expected ${original.registry.length} found ${allNetworks.length}`);
});
it('has no missing any entries', (): void => {
const missing = original.registry
.filter(({ prefix }) => !allNetworks.some((n) => n.prefix === prefix))
.map(({ displayName, prefix }) => `${displayName} (${prefix})`);
assertAndLog(!missing.length, `Missing entries found: ${stringify(missing, 2)}`);
});
it('has no extra entries', (): void => {
const missing = allNetworks
.filter(({ prefix }) => !original.registry.some((n) => n.prefix === prefix))
.map(({ displayName, prefix }) => `${displayName} (${prefix})`);
assertAndLog(!missing.length, `Extra entries found: ${stringify(missing, 2)}`);
});
it('has the same values as the original', (): void => {
const fields = objectKeys(original.schema);
const errors = original.registry
.map((n): [string, string[]] => {
const other = allNetworks.find(({ prefix }) => prefix === n.prefix);
return [
`${n.displayName} (${n.prefix})`,
other
? fields.filter((f) =>
['decimals', 'symbols'].includes(f)
? stringify(n[f] || []) !== stringify(other[f] || [])
: stringify(n[f]) !== stringify(other[f])
)
: []
];
})
.filter(([, fields]) => fields.length);
assertAndLog(!errors.length, `Mismatches found: ${stringify(errors.map(([n, m]) => `${n}:: ${m.join(', ')}`), 2)}`);
});
});
+10
View File
@@ -11,6 +11,9 @@ export const knownGenesis: KnownGenesis = {
acala: [
'0xfc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c'
],
'aleph-node': [
'0x70255b4d28de0fc4e1a193d7e175ad1ccef431598211c55538f1018651a0344e'
],
astar: [
'0x9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6'
],
@@ -41,11 +44,15 @@ export const knownGenesis: KnownGenesis = {
'0x9b8cefc0eb5c568b527998bdd76c184e2b76ae561be76e4667072230217ea243'
],
hydradx: [
'0xafdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d', // HydraDX Parachain
'0xd2a620c27ec5cbc5621ff9a522689895074f7cca0d08e7134a7804e1a3ba86fc', // Snakenet Gen3-1
'0x10af6e84234477d84dc572bac0789813b254aa490767ed06fb9591191d1073f9', // Snakenet Gen3
'0x3d75507dd46301767e601265791da1d9cb47b6ebc94e87347b635e5bf58bd047', // Snakenet Gen2
'0x0ed32bfcab4a83517fac88f2aa7cbc2f88d3ab93be9a12b6188a036bf8a943c2' // Snakenet Gen1
],
'interlay-parachain': [
'0xbf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72'
],
karura: [
'0xbaf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b'
],
@@ -104,6 +111,9 @@ export const knownGenesis: KnownGenesis = {
subsocial: [
'0x0bd72c1c305172e1275278aaeb3f161e02eccb7a819e63f62d47bd53a28189f8'
],
unique: [
'0x84322d9cddbf35088f1e54e9a85c967a41a56a4f43445768125e61af166c7d31'
],
westend: [
'0xe143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e'
],
+4
View File
@@ -9,6 +9,7 @@ import type { KnownLedger } from '../types';
// NOTE: Any network here needs to have a genesisHash attached in the ./genesis.ts config
export const knownLedger: KnownLedger = {
acala: 0x00000313,
'aleph-node': 0x00000283,
astar: 0x0000032a,
bifrost: 0x00000314,
centrifuge: 0x000002eb,
@@ -17,6 +18,7 @@ export const knownLedger: KnownLedger = {
edgeware: 0x0000020b,
equilibrium: 0x05f5e0fd,
genshiro: 0x05f5e0fc,
'interlay-parachain': 0x00000162,
karura: 0x000002ae,
kusama: 0x000001b2,
'nodle-para': 0x000003eb,
@@ -25,7 +27,9 @@ export const knownLedger: KnownLedger = {
polkadot: 0x00000162,
polymesh: 0x00000253,
sora: 0x00000269,
stafi: 0x0000038b,
statemine: 0x000001b2, // common-good on Kusama, shares derivation
statemint: 0x00000162, // common-good on Polkadot, shares derivation
unique: 0x00000162,
xxnetwork: 0x000007a3
};
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/networks', path: 'auto', type: 'auto', version: '9.7.2' };
export const packageInfo = { name: '@polkadot/networks', path: 'auto', type: 'auto', version: '10.1.2' };
@@ -932,6 +932,19 @@
"standardAccount": "*25519",
"website": "https://invarch.network"
},
{
"prefix": 126,
"network": "joystream",
"displayName": "Joystream",
"symbols": [
"JOY"
],
"decimals": [
10
],
"standardAccount": "*25519",
"website": "https://www.joystream.org"
},
{
"prefix": 128,
"network": "clover",
@@ -1179,6 +1192,32 @@
"standardAccount": "*25519",
"website": "https://interlay.io/"
},
{
"prefix": 2207,
"network": "SNOW",
"displayName": "SNOW: ICE Canary Network",
"symbols": [
"ICZ"
],
"decimals": [
18
],
"standardAccount": "*25519",
"website": "https://icenetwork.io"
},
{
"prefix": 2208,
"network": "ICE",
"displayName": "ICE Network",
"symbols": [
"ICY"
],
"decimals": [
18
],
"standardAccount": "*25519",
"website": "https://icenetwork.io"
},
{
"prefix": 2254,
"network": "subspace_testnet",
@@ -1210,7 +1249,7 @@
"network": "tidefi",
"displayName": "Tidefi",
"symbols": [
"TIFI"
"TDFY"
],
"decimals": [
12
@@ -1296,21 +1335,6 @@
"standardAccount": "*25519",
"website": "https://ata.network"
},
{
"prefix": 15253,
"network": "ice-network",
"displayName": "ICE Network",
"symbols": [
"ICX",
"ICY"
],
"decimals": [
18,
18
],
"standardAccount": "*25519",
"website": "https://icenetwork.io"
},
{
"prefix": 12191,
"network": "nftmart",
+1 -2
View File
@@ -12,7 +12,6 @@
],
"references": [
{ "path": "../hw-ledger/tsconfig.build.json" },
{ "path": "../util/tsconfig.build.json" },
{ "path": "../x-fetch/tsconfig.build.json" }
{ "path": "../util/tsconfig.build.json" }
]
}
+9 -9
View File
@@ -22,21 +22,21 @@
"./detectPackage.cjs"
],
"type": "module",
"version": "9.7.2",
"version": "10.1.2",
"browser": {
"crypto": false,
"stream": false
},
"main": "index.js",
"dependencies": {
"@babel/runtime": "^7.18.6",
"@babel/runtime": "^7.18.9",
"@noble/hashes": "1.1.2",
"@noble/secp256k1": "1.6.0",
"@polkadot/networks": "9.7.2",
"@polkadot/util": "9.7.2",
"@polkadot/wasm-crypto": "^6.2.2",
"@polkadot/x-bigint": "9.7.2",
"@polkadot/x-randomvalues": "9.7.2",
"@noble/secp256k1": "1.6.3",
"@polkadot/networks": "10.1.2",
"@polkadot/util": "10.1.2",
"@polkadot/wasm-crypto": "^6.3.1",
"@polkadot/x-bigint": "10.1.2",
"@polkadot/x-randomvalues": "10.1.2",
"@scure/base": "1.1.1",
"ed2curve": "^0.3.0",
"tweetnacl": "^1.0.3"
@@ -45,6 +45,6 @@
"@types/ed2curve": "^0.2.2"
},
"peerDependencies": {
"@polkadot/util": "9.7.2"
"@polkadot/util": "10.1.2"
}
}
+2
View File
@@ -1,6 +1,8 @@
// Copyright 2017-2022 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
export {};
describe('cryptoWaitReady', (): void => {
it('should return false when it cannot initialize', async (): Promise<void> => {
const old = global.WebAssembly;
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/util-crypto', path: 'auto', type: 'auto', version: '9.7.2' };
export const packageInfo = { name: '@polkadot/util-crypto', path: 'auto', type: 'auto', version: '10.1.2' };
+8 -9
View File
@@ -34,19 +34,18 @@
"./detectPackage.cjs"
],
"type": "module",
"version": "9.7.2",
"version": "10.1.2",
"main": "index.js",
"dependencies": {
"@babel/runtime": "^7.18.6",
"@polkadot/x-bigint": "9.7.2",
"@polkadot/x-global": "9.7.2",
"@polkadot/x-textdecoder": "9.7.2",
"@polkadot/x-textencoder": "9.7.2",
"@babel/runtime": "^7.18.9",
"@polkadot/x-bigint": "10.1.2",
"@polkadot/x-global": "10.1.2",
"@polkadot/x-textdecoder": "10.1.2",
"@polkadot/x-textencoder": "10.1.2",
"@types/bn.js": "^5.1.0",
"bn.js": "^5.2.1",
"ip-regex": "^4.3.0"
"bn.js": "^5.2.1"
},
"devDependencies": {
"@polkadot/x-randomvalues": "9.7.2"
"@polkadot/x-randomvalues": "10.1.2"
}
}
+1
View File
@@ -10,4 +10,5 @@ export { arrayFilter } from './filter';
export { arrayFlatten } from './flatten';
export { arrayRange } from './range';
export { arrayShuffle } from './shuffle';
export { arrayUnzip } from './unzip';
export { arrayZip } from './zip';
+1 -1
View File
@@ -5,7 +5,7 @@
* @name arrayShuffle
* @description Shuffles the input array (unlike sort, this is not done in-place)
*/
export function arrayShuffle <T> (input: T[]): T[] {
export function arrayShuffle <T> (input: readonly T[]): T[] {
const result = input.slice();
let curr = result.length;
+12
View File
@@ -0,0 +1,12 @@
// Copyright 2017-2022 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { arrayUnzip } from '.';
describe('arrayUnzip', (): void => {
it('unzips entries', (): void => {
expect(
arrayUnzip([['a', 1], ['b', 2], ['c', 3]])
).toEqual([['a', 'b', 'c'], [1, 2, 3]]);
});
});
+17
View File
@@ -0,0 +1,17 @@
// Copyright 2017-2022 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
/**
* @name arrayUnzip
* @description Splits a single [K, V][] into [K[], V[]]
*/
export function arrayUnzip <K, V> (entries: readonly [K, V][]): [K[], V[]] {
const keys = new Array<K>(entries.length);
const values = new Array<V>(entries.length);
for (let i = 0; i < entries.length; i++) {
[keys[i], values[i]] = entries[i];
}
return [keys, values];
}
+2 -2
View File
@@ -5,7 +5,7 @@ import { BN } from '../bn';
import { SQRT_MAX_SAFE_INTEGER } from './sqrt';
import { nSqrt } from '.';
const TESTS: [string | number | BN | bigint, string | number][] = [
export const SQRT_TESTS: [string | number | BN | bigint, string | number][] = [
[0, 0],
[1, 1],
[4, 2],
@@ -45,7 +45,7 @@ describe('nSqrt', (): void => {
).toEqual(true);
});
TESTS.forEach(([value, expected], index): void => {
SQRT_TESTS.forEach(([value, expected], index): void => {
it(`calcs for test #${index}`, (): void => {
expect(
nSqrt(value) === BigInt(expected)
+2 -9
View File
@@ -4,7 +4,6 @@
import type { BN } from '../bn/bn';
import type { HexString, NumberOptions, ToBigInt, ToBn } from '../types';
import { objectSpread } from '../object/spread';
import { u8aToHex } from '../u8a';
import { nToU8a } from './toU8a';
@@ -15,14 +14,8 @@ const ZERO_STR = '0x00';
* @name nToHex
* @summary Creates a hex value from a bigint object.
*/
export function nToHex <ExtToBn extends ToBn | ToBigInt> (value?: ExtToBn | BN | bigint | number | null, options?: NumberOptions): HexString {
export function nToHex <ExtToBn extends ToBn | ToBigInt> (value?: ExtToBn | BN | bigint | number | null, { bitLength, isLe = false, isNegative = false }: NumberOptions = {}): HexString {
return !value
? ZERO_STR
: u8aToHex(
nToU8a(value, objectSpread(
// We spread here, the default for hex values is BE (JSONRPC via substrate)
{ isLe: false, isNegative: false },
options
))
);
: u8aToHex(nToU8a(value, { bitLength, isLe, isNegative }));
}
+9 -15
View File
@@ -6,14 +6,13 @@ import type { NumberOptions, ToBigInt, ToBn } from '../types';
import { BigInt } from '@polkadot/x-bigint';
import { objectSpread } from '../object/spread';
import { _0n, _1n } from './consts';
import { nToBigInt } from './toBigInt';
const DIV = BigInt(256);
const NEG_MASK = BigInt(0xff);
function toU8a (value: bigint, { isLe, isNegative }: NumberOptions): Uint8Array {
function toU8a (value: bigint, isLe: boolean, isNegative: boolean): Uint8Array {
const arr: number[] = [];
if (isNegative) {
@@ -44,34 +43,29 @@ function toU8a (value: bigint, { isLe, isNegative }: NumberOptions): Uint8Array
* @name nToU8a
* @summary Creates a Uint8Array object from a bigint.
*/
export function nToU8a <ExtToBn extends ToBn | ToBigInt> (value?: ExtToBn | BN | bigint | number | null, options?: NumberOptions): Uint8Array {
const opts: NumberOptions = objectSpread(
{ bitLength: -1, isLe: true, isNegative: false },
options
);
export function nToU8a <ExtToBn extends ToBn | ToBigInt> (value?: ExtToBn | BN | bigint | number | null, { bitLength = -1, isLe = true, isNegative = false }: NumberOptions = {}): Uint8Array {
const valueBi = nToBigInt(value);
if (valueBi === _0n) {
return opts.bitLength === -1
return bitLength === -1
? new Uint8Array()
: new Uint8Array(Math.ceil((opts.bitLength || 0) / 8));
: new Uint8Array(Math.ceil((bitLength || 0) / 8));
}
const u8a = toU8a(valueBi, opts);
const u8a = toU8a(valueBi, isLe, isNegative);
if (opts.bitLength === -1) {
if (bitLength === -1) {
return u8a;
}
const byteLength = Math.ceil((opts.bitLength || 0) / 8);
const byteLength = Math.ceil((bitLength || 0) / 8);
const output = new Uint8Array(byteLength);
if (opts.isNegative) {
if (isNegative) {
output.fill(0xff);
}
output.set(u8a, opts.isLe ? 0 : byteLength - u8a.length);
output.set(u8a, isLe ? 0 : byteLength - u8a.length);
return output;
}
+2 -24
View File
@@ -1,32 +1,10 @@
// Copyright 2017-2022 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { SQRT_TESTS } from '../bi/sqrt.spec';
import { SQRT_MAX_SAFE_INTEGER } from './sqrt';
import { BN, bnSqrt } from '.';
const TESTS: [string | number | BN | bigint, string | number][] = [
[0, 0],
[1, 1],
[4, 2],
[256 * 256, 256],
[Number.MAX_SAFE_INTEGER, 94906265],
[new BN(Number.MAX_SAFE_INTEGER).iaddn(256), 94906265],
[12345678n * 12345679n, 12345678],
// test cases below from https://github.com/Aisse-258/bigint-isqrt/blob/f5254b9750841959022461c1353437a07a08f501/test/sqrt-test.js
[
'54866395443885995655625',
'234235768925'
],
[
'82120471531550314555681345949499512621827274120673745141541602816614526075010755373654280259022317599142038423759320355177481886719814621305828811322920076213800348341464996337890625',
'9062034624274524065844376014975805577107171799890766992670739972241112960081909332275390625'
],
[
'2068290204957779940494571454815902632050207752627007664813877111611972735314294907791993008455381265730624848057015476004143868408297250386512042711005577373327434315310235583583151773358353534031397385969275475421659036494173765903706963544628565027679444680637920371210258368358706248446698622704138943704561842220533563976838506992543814273403403362954987589637283890281226038798503294069403370486523697009383229578343444337394508531937972775639593763364402389410142290440075517598007930025487176173228232153685095699851764630884360483051570513804913157899314303269924424908606245851172031453725690942288677622973423417902662711606364188470325930406288190754356367655606430407552275285889968860367977288564364154999338284288438279464648663835830140826171534470717958048887869721791862539529444820484648908879364324577951008050851801647916673254009490596379549192296404841454780884358889449367135382779230574781333008561195244620152128505091883408484094800737142399855337799331037607433934520934135669364954550499058123797911762228642423567268540444910163468496805547450495819213412636594319148417857753712526066272727725420886898680432958409892237191284583904066400736417812258327303739879128916456683685232170600928808798462776174857486589598776587550843543720784829419478239563366491666155716208452087857080883906200829769222868347286071365156305396955420561718593130305703074908891135467193627721682044757187980688062367562451981939375400543212890625',
'45478458691536369397924851088318871329614555665525810477032568598360481742967756704524034986984134271202405190906906195123751965012732122548540879928668891416468847696038707003466943811913626146981446753434347552196868717612248915137033581428310504778371173112125038060138252719589122657221314190626986951627417768579641354255445988772645883238873672997347648890137913979299598785628581961589739331483895853398160785485300758458294999124984266041998145956341386549681176624661615465976970855592467853824812945820721933491609237311130118125761849911376495970746282571994312288380577879004620824004760109618074670810797544446334767103935754106103208789391060008291027361311679876439695844637933763721093782805837690830230712890625'
]
];
describe('bnSqrt', (): void => {
it('fails on < 0 roots', (): void => {
expect(
@@ -46,7 +24,7 @@ describe('bnSqrt', (): void => {
).toEqual(true);
});
TESTS.forEach(([value, expected], index): void => {
SQRT_TESTS.forEach(([value, expected], index): void => {
it(`calcs for test #${index}`, (): void => {
expect(
bnSqrt(value).eq(new BN(expected))
+1 -15
View File
@@ -18,16 +18,10 @@ describe('bnToHex', (): void => {
it('converts BN values to a prefixed hex representation (bitLength)', (): void => {
expect(
bnToHex(new BN(128), 16)
bnToHex(new BN(128), { bitLength: 16 })
).toBe('0x0080');
});
it('converts BN values to a prefixed hex representation (bitLength + le)', (): void => {
expect(
bnToHex(new BN(128), 16, true)
).toBe('0x8000');
});
it('converts BN values to a prefixed hex representation (LE)', (): void => {
expect(
bnToHex(new BN(128), { bitLength: 16, isLe: true })
@@ -45,12 +39,4 @@ describe('bnToHex', (): void => {
bnToHex(new BN(-1234), { bitLength: 32, isNegative: true })
).toBe('0xfffffb2e');
});
it('handles legacy compatibility', (): void => {
expect(
bnToHex(new BN(1234), 32)
).toBe(
bnToHex(new BN(1234), { bitLength: 32 })
);
});
});
+2 -19
View File
@@ -4,13 +4,10 @@
import type { HexString, NumberOptions, ToBn } from '../types';
import type { BN } from './bn';
import { isNumber } from '../is/number';
import { objectSpread } from '../object/spread';
import { u8aToHex } from '../u8a';
import { bnToU8a } from './toU8a';
const ZERO_STR = '0x00';
const DEFAULT_OPTS: NumberOptions = { bitLength: -1, isLe: false, isNegative: false };
/**
* @name bnToHex
@@ -27,22 +24,8 @@ const DEFAULT_OPTS: NumberOptions = { bitLength: -1, isLe: false, isNegative: fa
* bnToHex(new BN(0x123456)); // => '0x123456'
* ```
*/
function bnToHex <ExtToBn extends ToBn> (value?: ExtToBn | BN | bigint | number | null, options?: NumberOptions): HexString;
/** @deprecated Use bnToHex (value?: ExtToBn | BN | bigint | number | null, options?: NumberOptions) */
function bnToHex <ExtToBn extends ToBn> (value?: ExtToBn | BN | bigint | number | null, bitLength?: number, isLe?: boolean): HexString;
/** @deprecated Use bnToHex (value?: ExtToBn | BN | bigint | number | null, options?: NumberOptions) */
function bnToHex <ExtToBn extends ToBn> (value?: ExtToBn | BN | bigint | number | null, arg1: number | NumberOptions = DEFAULT_OPTS, arg2 = false): HexString {
export function bnToHex <ExtToBn extends ToBn> (value?: ExtToBn | BN | bigint | number | null, { bitLength = -1, isLe = false, isNegative = false }: NumberOptions = {}): HexString {
return !value
? ZERO_STR
: u8aToHex(
bnToU8a(value, objectSpread(
// We spread here, the default for hex values is BE (JSONRPC via substrate)
{ isLe: false, isNegative: false },
isNumber(arg1)
? { bitLength: arg1, isLe: arg2 }
: arg1
))
);
: u8aToHex(bnToU8a(value, { bitLength, isLe, isNegative }));
}
export { bnToHex };
+5 -13
View File
@@ -10,42 +10,34 @@ const ptest = arrayRange(65536).map((v) => [v]);
describe('bnToU8a', (): void => {
it('converts null values to 0x00', (): void => {
expect(
bnToU8a(null, -1, false)
bnToU8a(null)
).toEqual(new Uint8Array());
});
it('converts null values to 0x00000000 (bitLength)', (): void => {
expect(
bnToU8a(null, 32, false)
bnToU8a(null, { bitLength: 32 })
).toEqual(new Uint8Array([0, 0, 0, 0]));
});
it('converts BN values to a prefixed hex representation', (): void => {
expect(
bnToU8a(new BN(0x123456), -1, false)
bnToU8a(new BN(0x123456), { isLe: false })
).toEqual(new Uint8Array([0x12, 0x34, 0x56]));
});
it('converts BN values to a prefixed hex representation (bitLength)', (): void => {
expect(
bnToU8a(new BN(0x123456), 32, false)
bnToU8a(new BN(0x123456), { bitLength: 32, isLe: false })
).toEqual(new Uint8Array([0x00, 0x12, 0x34, 0x56]));
});
it('converts using little endian (as set)', (): void => {
expect(
bnToU8a(new BN(0x123456), 32, true)
bnToU8a(new BN(0x123456), { bitLength: 32, isLe: true })
).toEqual(new Uint8Array([0x56, 0x34, 0x12, 0x00]));
});
it('handles backwards compatibility', (): void => {
expect(
bnToU8a(new BN(1234), 32, false)
).toEqual(
bnToU8a(new BN(1234), { bitLength: 32, isLe: false })
);
});
describe('signed', (): void => {
it('converts negative numbers (BE)', (): void => {
expect(
+1 -12
View File
@@ -4,7 +4,6 @@
import type { NumberOptions, ToBn } from '../types';
import type { BN } from './bn';
import { isNumber } from '../is/number';
import { bnToBn } from './toBn';
const DEFAULT_OPTS: NumberOptions = { bitLength: -1, isLe: true, isNegative: false };
@@ -23,15 +22,7 @@ const DEFAULT_OPTS: NumberOptions = { bitLength: -1, isLe: true, isNegative: fal
* bnToU8a(new BN(0x1234)); // => [0x12, 0x34]
* ```
*/
function bnToU8a <ExtToBn extends ToBn> (value?: ExtToBn | BN | bigint | number | null, options?: NumberOptions): Uint8Array;
/** @deprecated Use bnToU8a(value?: ExtToBn | BN | bigint | number | null, options?: NumberOptions) */
function bnToU8a <ExtToBn extends ToBn> (value?: ExtToBn | BN | bigint | number | null, bitLength?: number, isLe?: boolean): Uint8Array;
/** @deprecated Use bnToU8a(value?: ExtToBn | BN | bigint | number | null, options?: NumberOptions) */
function bnToU8a <ExtToBn extends ToBn> (value?: ExtToBn | BN | bigint | number | null, arg1: number | NumberOptions = DEFAULT_OPTS, arg2 = true): Uint8Array {
const { bitLength = -1, isLe = true, isNegative = false } = isNumber(arg1)
? { bitLength: arg1, isLe: arg2 }
: arg1;
export function bnToU8a <ExtToBn extends ToBn> (value?: ExtToBn | BN | bigint | number | null, { bitLength = -1, isLe = true, isNegative = false } = DEFAULT_OPTS): Uint8Array {
const valueBn = bnToBn(value);
const byteLength = bitLength === -1
? Math.ceil(valueBn.bitLength() / 8)
@@ -52,5 +43,3 @@ function bnToU8a <ExtToBn extends ToBn> (value?: ExtToBn | BN | bigint | number
return output;
}
export { bnToU8a };
+19 -25
View File
@@ -33,16 +33,10 @@ describe('formatBalance', (): void => {
it('formats 123,456,789,000 (decimals=15, old style)', (): void => {
expect(
formatBalance(TESTVAL, { withSi: true }, 15)
formatBalance(TESTVAL, { decimals: 15, withSi: true })
).toEqual('123.4567 µUnit');
});
it('formats 123,456,789,000 (decimals=36, option)', (): void => {
expect(
formatBalance(TESTVAL, { decimals: 36, withSi: true })
).toEqual('0.1234 yUnit');
});
it('formats 123,456,789,000 (decimals=15, Compact)', (): void => {
const compact = {
something: 'else',
@@ -63,85 +57,85 @@ describe('formatBalance', (): void => {
it('formats 123,456,789,000 (decimals=9)', (): void => {
expect(
formatBalance(TESTVAL, { withSi: true }, 9)
formatBalance(TESTVAL, { decimals: 9, withSi: true })
).toEqual('123.4567 Unit');
});
it('formats 123,456,789,000 (decimals=9, no unit)', (): void => {
expect(
formatBalance(TESTVAL, { withSi: true, withUnit: false }, 9)
formatBalance(TESTVAL, { decimals: 9, withSi: true, withUnit: false })
).toEqual('123.4567');
});
it('formats 123,456,789,000 (decimals=9, unit given)', (): void => {
expect(
formatBalance(TESTVAL, { withSi: true, withUnit: 'FOO' }, 9)
formatBalance(TESTVAL, { decimals: 9, withSi: true, withUnit: 'FOO' })
).toEqual('123.4567 FOO');
});
it('formats 123,456,789,000 (decimals=12, no SI)', (): void => {
expect(
formatBalance(TESTVAL, { withSi: false }, 12)
formatBalance(TESTVAL, { decimals: 12, withSi: false })
).toEqual('123.4567');
});
it('formats 123,456,789,000 (decimals=12, full SI)', (): void => {
expect(
formatBalance(TESTVAL, { withSiFull: true }, 12)
formatBalance(TESTVAL, { decimals: 12, withSiFull: true })
).toEqual('123.4567 milli Unit');
});
it('formats 123,456,789,000 (decimals=12, full SI, no unit)', (): void => {
expect(
formatBalance(TESTVAL, { withSiFull: true, withUnit: false }, 12)
formatBalance(TESTVAL, { decimals: 12, withSiFull: true, withUnit: false })
).toEqual('123.4567 milli');
});
it('formats 123,456,789,000 (decimals=9, full SI)', (): void => {
expect(
formatBalance(TESTVAL, { withSiFull: true }, 9)
formatBalance(TESTVAL, { decimals: 9, withSiFull: true })
).toEqual('123.4567 Unit');
});
it('formats 123,456,789,000 (decimals=6)', (): void => {
expect(
formatBalance(TESTVAL, { withSi: true }, 6)
formatBalance(TESTVAL, { decimals: 6, withSi: true })
).toEqual('123.4567 kUnit');
});
it('formats 123,456,789,000 (decimals=6, unit specified)', (): void => {
expect(
formatBalance(TESTVAL, { withSi: true, withUnit: 'BAR' }, 6)
formatBalance(TESTVAL, { decimals: 6, withSi: true, withUnit: 'BAR' })
).toEqual('123.4567 kBAR');
});
it('formats 123,456,789,000 (decimals=0, unit specified)', (): void => {
expect(
formatBalance(TESTVAL, { withSi: true, withUnit: 'BAR' }, 0)
formatBalance(TESTVAL, { decimals: 0, withSi: true, withUnit: 'BAR' })
).toEqual('123.4567 BBAR');
});
it('formats 123,456,789,000 * 10 (decimals=12)', (): void => {
expect(
formatBalance(TESTVAL.muln(10), { withSi: true }, 12)
formatBalance(TESTVAL.muln(10), { decimals: 12, withSi: true })
).toEqual('1.2345 Unit');
});
it('formats 123,456,789,000 * 100 (decimals=12)', (): void => {
expect(
formatBalance(TESTVAL.muln(100), { withSi: true }, 12)
formatBalance(TESTVAL.muln(100), { decimals: 12, withSi: true })
).toEqual('12.3456 Unit');
});
it('formats 123,456,789,000 * 1000 (decimals=12)', (): void => {
expect(
formatBalance(TESTVAL.muln(1000), { withSi: true }, 12)
formatBalance(TESTVAL.muln(1000), { decimals: 12, withSi: true })
).toEqual('123.4567 Unit');
});
it('formats -123,456,789,000 (decimals=15)', (): void => {
expect(
formatBalance(new BN('-123456789000'), { withSi: true }, 15)
formatBalance(new BN('-123456789000'), { decimals: 15, withSi: true })
).toEqual('-123.4567 µUnit');
});
});
@@ -149,25 +143,25 @@ describe('formatBalance', (): void => {
describe('Forced formatting', (): void => {
it('formats 123,456,789,000 (decimals=12, forceUnit=base)', (): void => {
expect(
formatBalance(TESTVAL, { forceUnit: '-' }, 12)
formatBalance(TESTVAL, { decimals: 12, forceUnit: '-' })
).toEqual('0.1234 Unit');
});
it('formats 123,456,789,000 (decimals=9, forceUnit=base)', (): void => {
expect(
formatBalance(TESTVAL, { forceUnit: '-' }, 9)
formatBalance(TESTVAL, { decimals: 9, forceUnit: '-' })
).toEqual('123.4567 Unit');
});
it('formats 123,456,789,000 (decimals=7, forceUnit=base)', (): void => {
expect(
formatBalance(TESTVAL, { forceUnit: '-' }, 7)
formatBalance(TESTVAL, { decimals: 7, forceUnit: '-' })
).toEqual('12,345.6789 Unit');
});
it('formats 123,456,789,000 (decimals=15, forceUnit=µ)', (): void => {
expect(
formatBalance(TESTVAL, { forceUnit: 'µ' }, 15)
formatBalance(TESTVAL, { decimals: 15, forceUnit: 'µ' })
).toEqual('123.4567 µUnit');
});
});
+1 -10
View File
@@ -44,10 +44,6 @@ interface Options {
interface BalanceFormatter {
<ExtToBn extends ToBn> (input?: number | string | BN | bigint | ExtToBn, options?: Options): string;
/** @deprecated Use balanceFormat(input?: number | string | BN | bigint | ExtToBn, options?: Options) */
<ExtToBn extends ToBn> (input?: number | string | BN | bigint | ExtToBn, options?: boolean, decimals?: number): string;
/** @deprecated Use balanceFormat(input?: number | string | BN | bigint | ExtToBn, options?: Options) */
<ExtToBn extends ToBn> (input?: number | string | BN | bigint | ExtToBn, options?: Options, decimals?: number): string;
calcSi (text: string, decimals?: number): SiDef;
findSi (type: string): SiDef;
getDefaults (): Defaults;
@@ -89,18 +85,13 @@ function getPrePost (text: string, decimals: number, forceUnit?: string): [SiDef
}
// Formats a string/number with <prefix>.<postfix><type> notation
function _formatBalance <ExtToBn extends ToBn> (input?: number | string | BN | bigint | ExtToBn, options: Options | boolean = true, optDecimals: number = defaultDecimals): string {
function _formatBalance <ExtToBn extends ToBn> (input?: number | string | BN | bigint | ExtToBn, { decimals = defaultDecimals, forceUnit, withSi = true, withSiFull = false, withUnit = true }: Options = {}): string {
let text = bnToBn(input).toString();
if (text.length === 0 || text === '0') {
return '0';
}
// extract options - the boolean case is for backwards-compat
const { decimals = optDecimals, forceUnit = undefined, withSi = true, withSiFull = false, withUnit = true } = isBoolean(options)
? { withSi: options }
: options;
// strip the negative sign so we can work with clean groupings, re-add this in the
// end when we return the result (from here on we work with positive numbers)
let sign = '';
+9
View File
@@ -3,6 +3,15 @@
import { BigInt } from '@polkadot/x-bigint';
// Since we run in very different environments, we have to ensure we have all
// the types used here for detection (some of these may require Node definitions,
// which are not available in Deno/browser)
declare const __dirname: unknown;
declare const Buffer: unknown;
declare const module: unknown;
declare const process: unknown;
declare const require: unknown;
/** true if the environment has proper BigInt support */
export const hasBigInt = typeof BigInt === 'function' && typeof BigInt.asIntN === 'function';
+2 -6
View File
@@ -5,7 +5,6 @@ import type { ToBnOptions } from '../types';
import { BigInt } from '@polkadot/x-bigint';
import { objectSpread } from '../object/spread';
import { u8aToBigInt } from '../u8a/toBigInt';
import { hexToU8a } from './toU8a';
@@ -13,11 +12,8 @@ import { hexToU8a } from './toU8a';
* @name hexToBigInt
* @summary Creates a BigInt instance object from a hex string.
*/
export function hexToBigInt (value?: string | null, options: ToBnOptions = {}): bigint {
export function hexToBigInt (value?: string | null, { isLe = false, isNegative = false }: ToBnOptions = {}): bigint {
return !value || value === '0x'
? BigInt(0)
: u8aToBigInt(
hexToU8a(value),
objectSpread({ isLe: false, isNegative: false }, options)
);
: u8aToBigInt(hexToU8a(value), { isLe, isNegative });
}
-13
View File
@@ -69,17 +69,4 @@ describe('hexToBn', (): void => {
hexToBn('0x0001000000000000', { isLe: true }).toNumber()
).toBe(256);
});
it('handles legacy compatibility', (): void => {
expect(
hexToBn('0x0001000000000000', false).eq(
hexToBn('0x0001000000000000', { isLe: false })
)
).toBe(true);
expect(
hexToBn('0x0001000000000000', true).eq(
hexToBn('0x0001000000000000', { isLe: true })
)
).toBe(true);
});
});
+1 -12
View File
@@ -4,7 +4,6 @@
import type { ToBnOptions } from '../types';
import { BN } from '../bn/bn';
import { isBoolean } from '../is/boolean';
import { hexStripPrefix } from './stripPrefix';
/**
@@ -25,19 +24,11 @@ import { hexStripPrefix } from './stripPrefix';
* hexToBn('0x123480001f'); // => BN(0x123480001f)
* ```
*/
function hexToBn (value?: string | null, options?: ToBnOptions): BN;
/** @deprecated Use hexToBn (value?: string | null, options?: ToBnOptions) */
function hexToBn (value?: string | null, options?: boolean): BN;
/** @deprecated Use hexToBn (value?: string | null, options?: ToBnOptions) */
function hexToBn (value?: string | null, options: ToBnOptions | boolean = {}): BN {
export function hexToBn (value?: string | null, { isLe = false, isNegative = false }: ToBnOptions = {}): BN {
if (!value || value === '0x') {
return new BN(0);
}
// For hex, default to BE
const { isLe = false, isNegative = false } = isBoolean(options)
? { isLe: options }
: options;
const stripped = hexStripPrefix(value);
const bn = new BN(stripped, 16, isLe ? 'le' : 'be');
@@ -47,5 +38,3 @@ function hexToBn (value?: string | null, options: ToBnOptions | boolean = {}): B
? bn.fromTwos(stripped.length * 4)
: bn;
}
export { hexToBn };
+13 -1
View File
@@ -48,13 +48,25 @@ describe('hexToU8a', (): void => {
);
});
it('converts a non-aligned string', (): void => {
expect(
hexToU8a('0x123')
).toEqual(new Uint8Array([0x12, 0x30]));
});
it('converts known bytes to their correct values', (): void => {
expect(
hexToU8a('0x68656c6c6f20776f726c64') // hello world (11 bytes, non-aligned)
).toEqual(new Uint8Array([0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64]));
});
it('fails when non-hex value provided', (): void => {
it('converts known bytes to their correct values (upper/lower)', (): void => {
expect(
hexToU8a('0x68656C6c6f20776F726c64') // hello world (11 bytes, non-aligned)
).toEqual(new Uint8Array([0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64]));
});
it.skip('fails when non-hex value provided', (): void => {
expect(
() => hexToU8a('notahex')
).toThrow(/hex value to convert/);
+23 -23
View File
@@ -3,16 +3,23 @@
import type { HexString } from '../types';
import { REGEX_HEX_NOPREFIX, REGEX_HEX_PREFIXED } from '../is/hex';
const CHR = '0123456789abcdef';
const U8 = new Array<number>(256);
const U16 = new Array<number>(256 * 256);
const CHARS = '0123456789abcdef';
const UNHEX = new Array<number>(256);
for (let i = 0; i < CHARS.length; i++) {
UNHEX[CHARS[i].charCodeAt(0)] = i;
for (let i = 0; i < CHR.length; i++) {
U8[CHR[i].charCodeAt(0) | 0] = i | 0;
if (i > 9) {
UNHEX[CHARS[i].toUpperCase().charCodeAt(0)] = i;
U8[CHR[i].toUpperCase().charCodeAt(0) | 0] = i | 0;
}
}
for (let i = 0; i < 256; i++) {
const s = i << 8;
for (let j = 0; j < 256; j++) {
U16[s | j] = (U8[i] << 4) | U8[j];
}
}
@@ -32,30 +39,23 @@ for (let i = 0; i < CHARS.length; i++) {
* ```
*/
export function hexToU8a (value?: HexString | string | null, bitLength = -1): Uint8Array {
if (!value || value === '0x') {
if (!value) {
return new Uint8Array();
}
let s = 0;
let s = value.startsWith('0x')
? 2
: 0;
// we don't use hexStringPrefix here - that has substring which adds
// additional overhead. Instead we duplicate the logic, just incrementing
// the sactual string pointer, ignoring the prefix as required
if (REGEX_HEX_PREFIXED.test(value)) {
s = 2;
} else if (!REGEX_HEX_NOPREFIX.test(value)) {
throw new Error(`Expected hex value to convert, found '${value}'`);
}
const strLength = (value.length - s) / 2;
const decLength = Math.ceil((value.length - s) / 2);
const endLength = Math.ceil(
bitLength === -1
? strLength
? decLength
: bitLength / 8
);
const result = new Uint8Array(endLength);
const offset = endLength > strLength
? endLength - strLength
const offset = endLength > decLength
? endLength - decLength
: 0;
for (let i = offset; i < endLength; i++, s += 2) {
@@ -63,7 +63,7 @@ export function hexToU8a (value?: HexString | string | null, bitLength = -1): Ui
// HEX_TO_U16[value.substring()] we get an 10x slowdown. In the
// same vein using charCodeAt (as opposed to value[s] or value.charAt(s)) is
// also the faster operation by at least 2x with the character map above
result[i] = (UNHEX[value.charCodeAt(s)] << 4) + UNHEX[value.charCodeAt(s + 1)];
result[i] = U16[(value.charCodeAt(s) << 8) | value.charCodeAt(s + 1)];
}
return result;
+1 -1
View File
@@ -34,7 +34,7 @@ describe('hexToU8a', (): void => {
);
});
it('fails when non-hex value provided', (): void => {
it.skip('fails when non-hex value provided', (): void => {
expect(
() => hexToU8a('notahex')
).toThrow(/hex value to convert/);
+3 -3
View File
@@ -3,8 +3,6 @@
import type { HexString } from '../types';
import { hexStripPrefix } from './stripPrefix';
/**
* @name hexToU8a
* @summary Creates a Uint8Array object from a hex string.
@@ -25,7 +23,9 @@ export function hexToU8a (_value?: HexString | string | null, bitLength = -1): U
return new Uint8Array();
}
const value = hexStripPrefix(_value);
const value = _value.startsWith('0x')
? _value.substring(2)
: _value;
const buf = Buffer.from(value, 'hex');
const valLength = value.length / 2;
const resultLength = Math.ceil(
+8 -4
View File
@@ -7,7 +7,11 @@ import { isAscii } from '.';
describe('isAscii', (): void => {
it('returns true for an ASCII string', (): void => {
expect(isAscii('Hello\tWorld!\n\rTesting')).toEqual(true);
expect(isAscii('Hello World! Testing')).toEqual(true);
});
it('returns false for an ASCII string (with formatters)', (): void => {
expect(isAscii('Hello\tWorld!\n\rTesting')).toEqual(false);
});
it('returns false on an non-ascii string', (): void => {
@@ -15,7 +19,7 @@ describe('isAscii', (): void => {
});
it('returns true for ASCII bytes', (): void => {
expect(isAscii(new Uint8Array([0x31, 0x32, 0x20, 10]))).toEqual(true);
expect(isAscii(stringToU8a('Hello World! Testing'))).toEqual(true);
});
it('returns true for empty string inputs', (): void => {
@@ -38,6 +42,6 @@ describe('isAscii', (): void => {
expect(isAscii('0x010203')).toEqual(false);
});
perf('isAscii (str)', 2_000_000, [['Hello\tWorld!\n\rTesting']], isAscii);
perf('isAscii (u8a)', 200_000, [[[stringToU8a('Hello\tWorld!\n\rTesting')]]], isAscii);
perf('isAscii (str)', 2_000_000, [['Hello World! Testing']], isAscii);
perf('isAscii (u8a)', 200_000, [[[stringToU8a('Hello World! Testing')]]], isAscii);
});
+5 -5
View File
@@ -9,13 +9,13 @@ import { isString } from './string';
/** @internal */
function isAsciiStr (str: AnyString): boolean {
const count = str.length;
const count = str.length | 0;
for (let i = 0; i < count; i++) {
const b = str.charCodeAt(i);
// check is inlined here, it is faster than making a call
if (!((b < 127) && ((b >= 32) || (b === 10) || (b === 9) || (b === 13)))) {
if (b < 32 || b > 126) {
return false;
}
}
@@ -25,13 +25,13 @@ function isAsciiStr (str: AnyString): boolean {
/** @internal */
function isAsciiBytes (u8a: Uint8Array | Buffer | number[]): boolean {
const count = u8a.length;
const count = u8a.length | 0;
for (let i = 0; i < count; i++) {
const b = u8a[i];
const b = u8a[i] | 0;
// check is inlined here, it is faster than making a call
if (!((b < 127) && ((b >= 32) || (b === 10) || (b === 9) || (b === 13)))) {
if (b < 32 || b > 126) {
return false;
}
}
+32 -9
View File
@@ -1,9 +1,34 @@
// Copyright 2017-2022 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import ipRegex from 'ip-regex';
// The regex patterns below were copied as-is from the ip-regex package 5.0.0,
// https://github.com/sindresorhus/ip-regex/blob/a2a44dfa7f776528158c2a5ff9d8a1be435ec1b9/index.js#L1
//
// MIT License
// Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
//
// Changes made:
// - boundary support option has been dropped
// - only exact matching is used (isIp always passed exact: true)
// - the newest ip-regex is ESM-only, we compile to all platforms
const v4 = '(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}';
const v6s = '[a-fA-F\\d]{1,4}';
const v6 = `
(?:
(?:${v6s}:){7}(?:${v6s}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
(?:${v6s}:){6}(?:${v4}|:${v6s}|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4
(?:${v6s}:){5}(?::${v4}|(?::${v6s}){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4
(?:${v6s}:){4}(?:(?::${v6s}){0,1}:${v4}|(?::${v6s}){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4
(?:${v6s}:){3}(?:(?::${v6s}){0,2}:${v4}|(?::${v6s}){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4
(?:${v6s}:){2}(?:(?::${v6s}){0,3}:${v4}|(?::${v6s}){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4
(?:${v6s}:){1}(?:(?::${v6s}){0,4}:${v4}|(?::${v6s}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
(?::(?:(?::${v6s}){0,5}:${v4}|(?::${v6s}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
)(?:%[0-9a-zA-Z]{1,})? // %eth0 %1
`.replace(/\s*\/\/.*$/gm, '').replace(/\n/g, '').trim();
type IpTypes = 'v4' | 'v6';
const v46Exact = new RegExp(`(?:^${v4}$)|(?:^${v6}$)`);
const v4exact = new RegExp(`^${v4}$`);
const v6exact = new RegExp(`^${v6}$`);
/**
* @name isIp
@@ -22,12 +47,10 @@ type IpTypes = 'v4' | 'v6';
* isIp('1:2:3:4:5:6:7:8', 'v4'); // => false
* ```
*/
export function isIp (value: string, type?: IpTypes): boolean {
if (type === 'v4') {
return ipRegex.v4({ exact: true }).test(value);
} else if (type === 'v6') {
return ipRegex.v6({ exact: true }).test(value);
export function isIp (value: string, type?: 'v4' | 'v6'): boolean {
switch (type) {
case 'v4': return v4exact.test(value);
case 'v6': return v6exact.test(value);
default: return v46Exact.test(value);
}
return ipRegex({ exact: true }).test(value);
}
+2 -2
View File
@@ -35,7 +35,7 @@ describe('lazyMethod', (): void => {
expect(Object.prototype.hasOwnProperty.call(test, 'a')).toEqual(true);
expect(getter).not.toHaveBeenCalled();
expect(test.a).toEqual(123);
expect(getter).toHaveBeenCalledWith('a');
expect(getter).toHaveBeenCalledWith('a', 0, expect.objectContaining({}));
});
it('calls the getter a single time', (): void => {
@@ -46,7 +46,7 @@ describe('lazyMethod', (): void => {
expect(getter).not.toHaveBeenCalled();
expect(test.a).toEqual(123);
expect(getter).toHaveBeenCalledWith('a');
expect(getter).toHaveBeenCalledWith('a', 0, expect.objectContaining({}));
expect(test.a).toEqual(123);
expect(getter).toHaveBeenCalledTimes(1);
});
+5 -5
View File
@@ -10,9 +10,9 @@ type WithToString = { toString: () => string };
* @description
* Creates a lazy, on-demand getter for the specific value. Upon get the value will be evaluated.
*/
export function lazyMethod <T, K> (result: Record<string, T> | AnyFn, item: K, creator: (d: K) => T, getName?: (d: K) => string): void {
export function lazyMethod <T, K, S> (result: Record<string, T> | AnyFn, item: K, creator: (item: K, index: number, self: S) => T, getName?: (item: K, index: number) => string, index = 0): void {
const name = getName
? getName(item)
? getName(item, index)
: (item as WithToString).toString();
let value: T | undefined;
@@ -30,7 +30,7 @@ export function lazyMethod <T, K> (result: Record<string, T> | AnyFn, item: K, c
// with a value below ... however we ensure we are quire vigilant against
// all environment failures, so we are rather be safe than sorry
if (value === undefined) {
value = creator(item);
value = creator(item, index, this as S);
try {
// re-define the property as a value, next time around this
@@ -54,9 +54,9 @@ export function lazyMethod <T, K> (result: Record<string, T> | AnyFn, item: K, c
* @description
* Creates lazy, on-demand getters for the specific values.
*/
export function lazyMethods <T, K> (result: Record<string, T>, items: readonly K[], creator: (v: K) => T, getName?: (m: K) => string): Record<string, T> {
export function lazyMethods <T, K, S> (result: Record<string, T>, items: readonly K[], creator: (item: K, index: number, self: S) => T, getName?: (item: K, index: number) => string): Record<string, T> {
for (let i = 0; i < items.length; i++) {
lazyMethod(result, items[i], creator, getName);
lazyMethod(result, items[i], creator, getName, i);
}
return result;
+2
View File
@@ -13,6 +13,8 @@ import { u8aToHex } from './u8a/toHex';
import { u8aToU8a } from './u8a/toU8a';
import { hasProcess } from './has';
declare const process: { env: Record<string, string> };
type ConsoleType = 'error' | 'log' | 'warn';
type LogType = ConsoleType | 'debug';
+2 -2
View File
@@ -128,7 +128,7 @@ describe('objectProperty/objectProperties', (): void => {
expect(getter).not.toHaveBeenCalled();
expect(test.a).toEqual(123);
expect(getter).toHaveBeenCalledWith('a');
expect(getter).toHaveBeenCalledWith('a', 0, expect.objectContaining({}));
});
it('calls back with the key name & index (numtiple)', (): void => {
@@ -139,7 +139,7 @@ describe('objectProperty/objectProperties', (): void => {
expect(getter).not.toHaveBeenCalled();
expect(test.b).toEqual(123);
expect(getter).toHaveBeenCalledWith('b', 1);
expect(getter).toHaveBeenCalledWith('b', 1, expect.objectContaining({}));
});
perf('objectProperties (obj)', 50_000, [[]], () => objectProperties({}, ['foo', 'bar', 'baz'], (k) => k));
+12 -6
View File
@@ -5,19 +5,25 @@
* @name objectProperty
* @summary Assign a get property on the input object
*/
export function objectProperty (that: object, key: string, getter: (k: string) => unknown): void {
export function objectProperty <S> (that: object, key: string, getter: (key: string, index: number, self: S) => unknown, getName?: (key: string, index: number) => string, index = 0): void {
const name = getName
? getName(key, index)
: key;
// There are 3 approaches here -
// - Object.prototype.hasOwnProperty.call(that, key) - this only checks the current class, i.e
// will retuirn false if the property is set in the parent class
// - isUndefined(...) - this may yield a false positive when the property is there, but not set.
// Additionally, on pre-defined getters it may make a call
// - key in that - Does not need to be combined with either of the above and checks the full chain
if (!(key in that)) {
Object.defineProperty(that, key, {
if (!(name in that)) {
Object.defineProperty(that, name, {
enumerable: true,
// Unlike in lazy, we always call into the upper function, i.e. this method
// does not cache old values (it is expected to be used for dynamic values)
get: () => getter(key)
get: function (): unknown {
return getter(key, index, this as S);
}
});
}
}
@@ -26,8 +32,8 @@ export function objectProperty (that: object, key: string, getter: (k: string) =
* @name objectProperties
* @summary Assign get properties on the input object
*/
export function objectProperties (that: object, keys: string[], getter: (k: string, i: number) => unknown): void {
export function objectProperties <S> (that: object, keys: string[], getter: (key: string, index: number, self: S) => unknown, getName?: (key: string, index: number) => string): void {
for (let i = 0; i < keys.length; i++) {
objectProperty(that, keys[i], (k) => getter(k, i));
objectProperty(that, keys[i], getter, getName, i);
}
}
+16 -3
View File
@@ -5,10 +5,22 @@ import { perf } from '../test/performance';
import { objectSpread } from '.';
describe('objectSpread', (): void => {
it('spreads obj sources', (): void => {
expect(
objectSpread({}, { a: 1, b: 2, c: 3 }, { d: 4, e: 5, f: 6 })
).toEqual({ a: 1, b: 2, c: 3, d: 4, e: 5, f: 6 });
});
it('spreads map sources', (): void => {
expect(
objectSpread({}, new Map<string, number>([['a', 1], ['b', 2], ['c', 3]]), new Map<string, number>([['d', 4], ['e', 5], ['f', 6]]))
).toEqual({ a: 1, b: 2, c: 3, d: 4, e: 5, f: 6 });
});
it('spreads an object from multiple sources', (): void => {
expect(
objectSpread({ a: 1 }, { b: 2 }, { a: 2, c: { d: 3, e: 4 } })
).toEqual({ a: 2, b: 2, c: { d: 3, e: 4 } });
objectSpread({ a: 1 }, { b: 2 }, { a: 2, c: { d: 3, e: 4 } }, new Map<string, unknown>([['f', 5], ['g', 6], ['h', { i: 7, k: 8 }]]))
).toEqual({ a: 2, b: 2, c: { d: 3, e: 4 }, f: 5, g: 6, h: { i: 7, k: 8 } });
});
it('spreads an object from multiple sources (with null & undefined)', (): void => {
@@ -17,5 +29,6 @@ describe('objectSpread', (): void => {
).toEqual({ a: 2, b: 2, c: { d: 3, e: 4 } });
});
perf('objectSpread', 500_000, [[]], () => objectSpread({}, { a: 1, b: 2, c: 3 }, { d: 4, e: 7, f: 6 }));
perf('objectSpread (obj)', 350_000, [[{}, { a: 1, b: 2, c: 3 }, { d: 4, e: 5, f: 6 }]], objectSpread);
perf('objectSpread (map)', 350_000, [[{}, new Map<string, number>([['a', 1], ['b', 2], ['c', 3]]), new Map<string, number>([['d', 4], ['e', 5], ['f', 6]])]], objectSpread);
});
+7 -1
View File
@@ -10,7 +10,13 @@ export function objectSpread <T extends object> (dest: object, ...sources: (obje
const src = sources[i];
if (src) {
Object.assign(dest, src);
if (typeof (src as Map<string, unknown>).entries === 'function') {
for (const [key, value] of (src as Map<string, unknown>).entries()) {
(dest as Record<string, unknown>)[key] = value;
}
} else {
Object.assign(dest, src);
}
}
}
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/util', path: 'auto', type: 'auto', version: '9.7.2' };
export const packageInfo = { name: '@polkadot/util', path: 'auto', type: 'auto', version: '10.1.2' };
+6 -2
View File
@@ -39,19 +39,23 @@ ${formatFixed(ops).padStart(NUM_PAD + PRE_PAD + 1)} ops/s
${formatFixed(micro).padStart(NUM_PAD + PRE_PAD + 1)} μs/op`;
}
export function perf (name: string, count: number, inputs: readonly unknown[][], exec: ExecFn): void {
export function perf (name: string, count: number, inputs: readonly unknown[][], exec: ExecFn, withLog?: boolean): void {
if (process.env.GITHUB_REPOSITORY) {
return;
}
it(`performance: ${name}`, (): void => {
const [time] = loop(count, inputs, exec);
const [time, results] = loop(count, inputs, exec);
console.log(`
performance run for ${name} completed with ${formatNumber(count)} iterations.
${`${name}:`.padStart(PRE_PAD)} ${time.toFixed(2).padStart(NUM_PAD)} ms${formatOps(count, time)}
`);
if (withLog) {
console.log(results);
}
});
}
+21
View File
@@ -1,8 +1,25 @@
// Copyright 2017-2022 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { perf } from '../test/performance';
import { u8aCmp } from '.';
const ltest = new Uint8Array(32768);
const stest = new Uint8Array(256);
const ztest = new Uint8Array(64);
for (let i = 0; i < ltest.length; i++) {
if (i < ztest.length) {
ztest[i] = i % 256;
}
if (i < stest.length) {
stest[i] = i % 256;
}
ltest[i] = i % 256;
}
describe('u8aCmp', (): void => {
it('has the same result as localCompare (equal length)', (): void => {
const a = 'test abc';
@@ -36,4 +53,8 @@ describe('u8aCmp', (): void => {
)
).toEqual(0);
});
perf('u8aCmp (64 cmp)', 100_000, [[ztest, ztest]], u8aCmp);
perf('u8aCmp (256 cmp)', 50_000, [[stest, stest]], u8aCmp);
perf('u8aCmp (32k cmp)', 500, [[ltest, ltest]], u8aCmp);
});
+2 -2
View File
@@ -8,12 +8,12 @@
* Checks to see if the input `Uint8Array` has zero length or contains all 0 values.
*/
export function u8aEmpty (value: Uint8Array): boolean {
const len = value.length;
const len = value.length | 0;
// on smaller sizes, the byte-by-byte compare is faster than allocating
// another object for DataView (on very large arrays the DataView is faster)
for (let i = 0; i < len; i++) {
if (value[i]) {
if (value[i] | 0) {
return false;
}
}
+2 -2
View File
@@ -26,8 +26,8 @@ export function u8aEq (a: HexString | Uint8Array | string, b: HexString | Uint8A
if (u8aa.length === u8ab.length) {
const dvA = new DataView(u8aa.buffer, u8aa.byteOffset);
const dvB = new DataView(u8ab.buffer, u8ab.byteOffset);
const mod = u8aa.length % 4;
const length = u8aa.length - mod;
const mod = (u8aa.length % 4) | 0;
const length = (u8aa.length - mod) | 0;
for (let i = 0; i < length; i += 4) {
if (dvA.getUint32(i) !== dvB.getUint32(i)) {
-40
View File
@@ -5,21 +5,6 @@ import { perf } from '../test/performance';
import { u8aToBn } from '.';
describe('u8aToBn', (): void => {
it('supports legacy compatibility', (): void => {
expect(
u8aToBn(
new Uint8Array([0x12, 0x34]),
true
).toString(16)
).toBe('3412');
expect(
u8aToBn(
new Uint8Array([0x12, 0x34]),
false
).toString(16)
).toBe('1234');
});
it('converts little-endian by default', (): void => {
expect(
u8aToBn(
@@ -274,31 +259,6 @@ describe('u8aToBn', (): void => {
).toBe(256);
});
it('handles backward compatibility)', (): void => {
expect(
u8aToBn(
new Uint8Array([0, 1, 0, 0, 0, 0, 0, 0]),
false
).eq(
u8aToBn(
new Uint8Array([0, 1, 0, 0, 0, 0, 0, 0]),
{ isLe: false }
)
)
).toBe(true);
expect(
u8aToBn(
new Uint8Array([0, 1, 0, 0, 0, 0, 0, 0]),
true
).eq(
u8aToBn(
new Uint8Array([0, 1, 0, 0, 0, 0, 0, 0]),
{ isLe: true }
)
)
).toBe(true);
});
perf('u8aToBn (u32)', 1_000_000, [[new Uint8Array([0x68, 0x65, 0x6c, 0x6c])]], u8aToBn);
perf('u8aToBn (i32)', 1_000_000, [[new Uint8Array([0x68, 0x65, 0x6c, 0x6c])]], (v: Uint8Array) => u8aToBn(v, { isNegative: true }));
perf('u8aToBn (u64)', 500_000, [[new Uint8Array([0x68, 0x65, 0x6c, 0x6c, 0x68, 0x65, 0x6c, 0x6c])]], u8aToBn);
+1 -13
View File
@@ -4,7 +4,6 @@
import type { ToBnOptions } from '../types';
import { BN } from '../bn/bn';
import { isBoolean } from '../is/boolean';
/**
* @name u8aToBn
@@ -24,16 +23,7 @@ import { isBoolean } from '../is/boolean';
* u8aToHex(new Uint8Array([0x68, 0x65, 0x6c, 0x6c, 0xf])); // 0x68656c0f
* ```
*/
function u8aToBn (value: Uint8Array, options?: ToBnOptions): BN;
/** @deprecated Use u8aToBn(value: Uint8Array, options?: ToBnOptions) */
function u8aToBn (value: Uint8Array, options?: boolean): BN;
/** @deprecated Use u8aToBn (value?: string | null, options?: ToBnOptions) */
function u8aToBn (value: Uint8Array, options: ToBnOptions | boolean = {}): BN {
// NOTE: This is the same process as followed in the hexToBn conversion
// For Uint8Array, default to LE
const { isLe = true, isNegative = false } = isBoolean(options)
? { isLe: options }
: options;
export function u8aToBn (value: Uint8Array, { isLe = true, isNegative = false }: ToBnOptions = {}): BN {
const count = value.length;
// shortcut for <= u48 values - in this case the manual conversion
@@ -130,5 +120,3 @@ function u8aToBn (value: Uint8Array, options: ToBnOptions | boolean = {}): BN {
? new BN(value, isLe ? 'le' : 'be').fromTwos(value.length * 8)
: new BN(value, isLe ? 'le' : 'be');
}
export { u8aToBn };
+2 -2
View File
@@ -78,12 +78,12 @@ describe('u8aToHex', (): void => {
).toEqual('0x68656c6c6f20776f726c64');
});
perfCmp('u8aToHex (32k)', ['u8aToHexBuffer', 'u8aToHex'], 2000, [[ptest32k]], (s: Uint8Array, isSecond) =>
perfCmp('u8aToHex (32k)', ['u8aToHexBuffer', 'u8aToHex'], 1000, [[ptest32k]], (s: Uint8Array, isSecond) =>
isSecond
? u8aToHex(s)
: u8aToHexBuffer(s)
);
perfCmp('u8aToHex (128)', ['u8aToHexBuffer', 'u8aToHex'], 100000, [[ptest256]], (s: Uint8Array, isSecond) =>
perfCmp('u8aToHex (128)', ['u8aToHexBuffer', 'u8aToHex'], 200_000, [[ptest256]], (s: Uint8Array, isSecond) =>
isSecond
? u8aToHex(s)
: u8aToHexBuffer(s)
+20 -17
View File
@@ -19,20 +19,16 @@ for (let i = 0; i < 256; i++) {
}
/** @internal */
function hex (value: Uint8Array): string {
const mod = value.length % 2;
const length = value.length - mod;
const dv = new DataView(value.buffer, value.byteOffset);
let result = '';
function hex (value: Uint8Array, result: HexString): HexString {
const mod = (value.length % 2) | 0;
const length = (value.length - mod) | 0;
for (let i = 0; i < length; i += 2) {
// we only use getUint16 here instead of getUint32 - at least in our
// tests this is faster to execute (both long & short strings tested)
result += U16[dv.getUint16(i)];
result += U16[(value[i] << 8) | value[i + 1]];
}
if (mod) {
result += U8[dv.getUint8(length)];
result += U8[value[length] | 0];
}
return result;
@@ -53,13 +49,20 @@ function hex (value: Uint8Array): string {
* ```
*/
export function u8aToHex (value?: Uint8Array | null, bitLength = -1, isPrefixed = true): HexString {
const length = Math.ceil(bitLength / 8);
// this is not 100% correct sinmce we support isPrefixed = false....
const empty = isPrefixed
? '0x'
: '' as HexString;
return `${isPrefixed ? '0x' : ''}${
!value || !value.length
? ''
: (bitLength > 0 && value.length > length)
? `${hex(value.subarray(0, length / 2))}…${hex(value.subarray(value.length - length / 2))}`
: hex(value)
}` as HexString;
if (!value || !value.length) {
return empty;
} else if (bitLength > 0) {
const length = Math.ceil(bitLength / 8);
if (value.length > length) {
return `${hex(value.subarray(0, length / 2), empty)}…${hex(value.subarray(value.length - length / 2), '' as HexString)}`;
}
}
return hex(value, empty);
}
+1 -1
View File
@@ -24,7 +24,7 @@ interface PjsChecks extends This {
__polkadotjs: Record<string, VersionPath[]>;
}
type PjsGlobal = (Window & This) & PjsChecks;
type PjsGlobal = This & PjsChecks & Record<string, unknown>;
type FnString = () => string | undefined;
const DEDUPE = 'Either remove and explicitly install matching versions or dedupe using your package manager.\nThe following conflicting packages were found:';
+3 -3
View File
@@ -20,9 +20,9 @@
"./shim.cjs"
],
"type": "module",
"version": "9.7.2",
"version": "10.1.2",
"dependencies": {
"@babel/runtime": "^7.18.6",
"@polkadot/x-global": "9.7.2"
"@babel/runtime": "^7.18.9",
"@polkadot/x-global": "10.1.2"
}
}
+3 -3
View File
@@ -1,8 +1,8 @@
// Copyright 2017-2022 @polkadot/x-bigint authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { xglobal } from '@polkadot/x-global';
export { packageInfo } from './packageInfo';
export const BigInt = xglobal.BigInt;
const _BigInt = BigInt;
export { _BigInt as BigInt };
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/x-bigint', path: 'auto', type: 'auto', version: '9.7.2' };
export const packageInfo = { name: '@polkadot/x-bigint', path: 'auto', type: 'auto', version: '10.1.2' };
+3 -3
View File
@@ -17,11 +17,11 @@
},
"sideEffects": false,
"type": "module",
"version": "9.7.2",
"version": "10.1.2",
"main": "index.js",
"dependencies": {
"@babel/runtime": "^7.18.6",
"@polkadot/util": "9.7.2",
"@babel/runtime": "^7.18.9",
"@polkadot/util": "10.1.2",
"buffer-es6": "^4.9.3"
}
}
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/x-bundle', path: 'auto', type: 'auto', version: '9.7.2' };
export const packageInfo = { name: '@polkadot/x-bundle', path: 'auto', type: 'auto', version: '10.1.2' };
+4 -4
View File
@@ -17,14 +17,14 @@
},
"sideEffects": false,
"type": "module",
"version": "9.7.2",
"version": "10.1.2",
"browser": "browser.js",
"main": "node.js",
"react-native": "react-native.js",
"dependencies": {
"@babel/runtime": "^7.18.6",
"@polkadot/x-global": "9.7.2",
"@babel/runtime": "^7.18.9",
"@polkadot/x-global": "10.1.2",
"@types/node-fetch": "^2.6.2",
"node-fetch": "^2.6.7"
"node-fetch": "^3.2.9"
}
}
+5 -1
View File
@@ -1,4 +1,8 @@
// Copyright 2017-2022 @polkadot/x-fetch authors & contributors
// SPDX-License-Identifier: Apache-2.0
export * from './browser';
export { packageInfo } from './packageInfo';
const _fetch = fetch;
export { _fetch as fetch };
+25 -2
View File
@@ -1,10 +1,33 @@
// Copyright 2017-2022 @polkadot/x-fetch authors & contributors
// SPDX-License-Identifier: Apache-2.0
import nodeFetch from 'node-fetch';
import { extractGlobal } from '@polkadot/x-global';
export { packageInfo } from './packageInfo';
// This is an ESM module, use the async import(...) syntax to pull it
// in. Logically we would like it in nodeFetch(...) itself, however
// while it is all-ok on Node itself, it does create issues in Jest,
// possibly due to the Jest 28 need for --experimental-vm-modules
const importFetch = import('node-fetch').catch(() => null);
// keep track of the resolved import value
let modFn: typeof fetch | null = null;
async function nodeFetch (...args: Parameters<typeof fetch>): Promise<Response> {
if (modFn) {
return modFn(...args);
}
const mod = await importFetch;
if (!mod || !mod.default) {
throw new Error('Unable to import node-fetch in this environment');
}
modFn = mod.default as unknown as typeof fetch;
return modFn(...args);
}
export const fetch = extractGlobal('fetch', nodeFetch);
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/x-fetch', path: 'auto', type: 'auto', version: '9.7.2' };
export const packageInfo = { name: '@polkadot/x-fetch', path: 'auto', type: 'auto', version: '10.1.2' };
+2 -2
View File
@@ -17,9 +17,9 @@
},
"sideEffects": false,
"type": "module",
"version": "9.7.2",
"version": "10.1.2",
"main": "index.js",
"dependencies": {
"@babel/runtime": "^7.18.6"
"@babel/runtime": "^7.18.9"
}
}
+13 -6
View File
@@ -3,14 +3,21 @@
export { packageInfo } from './packageInfo';
type GlobalThis = typeof globalThis;
// Ensure that we are able to run this without any @types/node definitions
// and without having lib: ['dom'] in our TypeScript configuration
// (may not be available in all environments, e.g. Deno springs to mind)
declare const global: unknown;
declare const self: unknown;
declare const window: unknown;
type GlobalNames = keyof typeof window;
type GlobalThis = typeof globalThis & Record<string, unknown>;
type GlobalType<T extends keyof typeof window> = typeof window[T];
type GlobalNames = keyof typeof globalThis;
function evaluateThis (fn: (code: string) => unknown): GlobalThis {
return fn('return this') as GlobalThis;
type GlobalType<N extends GlobalNames> = typeof globalThis[N];
function evaluateThis (fn: (code: string) => unknown): unknown {
return fn('return this');
}
export const xglobal = (
@@ -23,7 +30,7 @@ export const xglobal = (
: typeof window !== 'undefined'
? window
: evaluateThis(Function)
);
) as GlobalThis;
export function extractGlobal <N extends GlobalNames, T extends GlobalType<N>> (name: N, fallback: unknown): T {
// Not quite sure why this is here - snuck in with TS 4.7.2 with no real idea
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/x-global', path: 'auto', type: 'auto', version: '9.7.2' };
export const packageInfo = { name: '@polkadot/x-global', path: 'auto', type: 'auto', version: '10.1.2' };
+7 -4
View File
@@ -17,15 +17,18 @@
},
"sideEffects": false,
"type": "module",
"version": "9.7.2",
"version": "10.1.2",
"browser": "browser.js",
"main": "node.js",
"react-native": "react-native.js",
"dependencies": {
"@babel/runtime": "^7.18.6",
"@polkadot/x-global": "9.7.2"
"@babel/runtime": "^7.18.9",
"@polkadot/x-global": "10.1.2"
},
"devDependencies": {
"@types/react-native": "^0.69.1"
"@types/react-native": "^0.69.3"
},
"denoDependencies": {
"crypto": "std@0.148.0/node/crypto.ts"
}
}
+5 -1
View File
@@ -1,4 +1,8 @@
// Copyright 2017-2022 @polkadot/x-randomvalues authors & contributors
// SPDX-License-Identifier: Apache-2.0
export * from './browser';
export { packageInfo } from './packageInfo';
export function getRandomValues <T extends Uint8Array> (arr: T): T {
return crypto.getRandomValues(arr);
}
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/x-randomvalues', path: 'auto', type: 'auto', version: '9.7.2' };
export const packageInfo = { name: '@polkadot/x-randomvalues', path: 'auto', type: 'auto', version: '10.1.2' };
+6 -3
View File
@@ -17,12 +17,15 @@
},
"sideEffects": false,
"type": "module",
"version": "9.7.2",
"version": "10.1.2",
"browser": "browser.js",
"main": "node.js",
"react-native": "react-native.js",
"dependencies": {
"@babel/runtime": "^7.18.6",
"@polkadot/x-global": "9.7.2"
"@babel/runtime": "^7.18.9",
"@polkadot/x-global": "10.1.2"
},
"denoDependencies": {
"util": "std@0.148.0/node/util.ts"
}
}
+3 -3
View File
@@ -1,8 +1,8 @@
// Copyright 2017-2022 @polkadot/x-textencoder authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { xglobal } from '@polkadot/x-global';
export { packageInfo } from './packageInfo';
export const TextDecoder = xglobal.TextDecoder;
const _TextDecoder = TextDecoder;
export { _TextDecoder as TextDecoder };
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/x-textdecoder', path: 'auto', type: 'auto', version: '9.7.2' };
export const packageInfo = { name: '@polkadot/x-textdecoder', path: 'auto', type: 'auto', version: '10.1.2' };
+6 -3
View File
@@ -17,12 +17,15 @@
},
"sideEffects": false,
"type": "module",
"version": "9.7.2",
"version": "10.1.2",
"browser": "browser.js",
"main": "node.js",
"react-native": "react-native.js",
"dependencies": {
"@babel/runtime": "^7.18.6",
"@polkadot/x-global": "9.7.2"
"@babel/runtime": "^7.18.9",
"@polkadot/x-global": "10.1.2"
},
"denoDependencies": {
"util": "std@0.148.0/node/util.ts"
}
}
+3 -3
View File
@@ -1,8 +1,8 @@
// Copyright 2017-2022 @polkadot/x-textencoder authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { xglobal } from '@polkadot/x-global';
export { packageInfo } from './packageInfo';
export const TextEncoder = xglobal.TextEncoder;
const _TextEncoder = TextEncoder;
export { _TextEncoder as TextEncoder };
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/x-textencoder', path: 'auto', type: 'auto', version: '9.7.2' };
export const packageInfo = { name: '@polkadot/x-textencoder', path: 'auto', type: 'auto', version: '10.1.2' };
+3 -3
View File
@@ -17,13 +17,13 @@
},
"sideEffects": false,
"type": "module",
"version": "9.7.2",
"version": "10.1.2",
"browser": "browser.js",
"main": "node.js",
"react-native": "react-native.js",
"dependencies": {
"@babel/runtime": "^7.18.6",
"@polkadot/x-global": "9.7.2",
"@babel/runtime": "^7.18.9",
"@polkadot/x-global": "10.1.2",
"@types/websocket": "^1.0.5",
"websocket": "^1.0.34"
}
+5 -1
View File
@@ -1,4 +1,8 @@
// Copyright 2017-2022 @polkadot/x-ws authors & contributors
// SPDX-License-Identifier: Apache-2.0
export * from './browser';
export { packageInfo } from './packageInfo';
const _WebSocket = WebSocket;
export { _WebSocket as WebSocket };
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/x-ws', path: 'auto', type: 'auto', version: '9.7.2' };
export const packageInfo = { name: '@polkadot/x-ws', path: 'auto', type: 'auto', version: '10.1.2' };

Some files were not shown because too many files have changed in this diff Show More