Compare commits
36 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bbf77d7b84 | ||
|
|
3250187fbb | ||
|
|
e3168c8231 | ||
|
|
6d98c56e7a | ||
|
|
bf986c079f | ||
|
|
f0d21fa985 | ||
|
|
aad690bfda | ||
|
|
6e30befa0f | ||
|
|
4217c67acd | ||
|
|
b181da4919 | ||
|
|
6907d0c30a | ||
|
|
22c8d7ac0c | ||
|
|
a3a918b2cb | ||
|
|
656be6550a | ||
|
|
fa8697331b | ||
|
|
e392d52924 | ||
|
|
975b0a9fa2 | ||
|
|
8bd9b7b908 | ||
|
|
1a230f95f6 | ||
|
|
c1b3cc87ee | ||
|
|
e1f96f1fcf | ||
|
|
45b330aa90 | ||
|
|
172051cedc | ||
|
|
0310baa9ee | ||
|
|
78029388e5 | ||
|
|
b9b1b296a3 | ||
|
|
32086c0fc7 | ||
|
|
01d7661a5f | ||
|
|
6e97f75824 | ||
|
|
86281dca3a | ||
|
|
faed5b1474 | ||
|
|
0e0de28da4 | ||
|
|
2e99e0154f | ||
|
|
0cbf187979 | ||
|
|
0aee857525 | ||
|
|
306f30d2b5 |
2
.github/workflows/lock.yml
vendored
2
.github/workflows/lock.yml
vendored
@@ -10,7 +10,7 @@ jobs:
|
||||
env:
|
||||
YARN_ENABLE_SCRIPTS: false
|
||||
steps:
|
||||
- uses: dessant/lock-threads@f1a42f0f44eb83361d617a014663e1a76cf282d2
|
||||
- uses: dessant/lock-threads@c1b35aecc5cdb1a34539d14196df55838bb2f836
|
||||
with:
|
||||
github-token: ${{ secrets.GH_PAT_BOT }}
|
||||
issue-lock-inactive-days: '7'
|
||||
|
||||
19
.github/workflows/stale.yml
vendored
19
.github/workflows/stale.yml
vendored
@@ -1,19 +0,0 @@
|
||||
name: 'Close stale issues and PRs'
|
||||
on:
|
||||
schedule:
|
||||
- cron: '40 2/3 * * *'
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
YARN_ENABLE_SCRIPTS: false
|
||||
steps:
|
||||
- uses: actions/stale@98ed4cb500039dbcccf4bd9bedada4d0187f2757
|
||||
with:
|
||||
repo-token: ${{ secrets.GH_PAT_BOT }}
|
||||
stale-issue-message: 'This issue has been open for 21 days with no activity and is not labelled as an enhancement. It will be closed in 7 days.'
|
||||
stale-issue-label: 'stale'
|
||||
exempt-issue-labels: '-size-l,-size-m,-size-s,-size-xl,-size-xs,[bug]'
|
||||
days-before-stale: 21
|
||||
days-before-close: 7
|
||||
25
CHANGELOG.md
25
CHANGELOG.md
@@ -1,5 +1,30 @@
|
||||
# CHANGELOG
|
||||
|
||||
## 3.1.2 Mar 25, 2023
|
||||
|
||||
Changes:
|
||||
|
||||
- Cater for Ethereum-compatible multisig addresses
|
||||
- Bump to `@polkadot/util` 11.1.2
|
||||
|
||||
|
||||
## 3.1.1 Mar 19, 2023
|
||||
|
||||
Changes:
|
||||
|
||||
- Swap `vue-identitycon` to use `defineComponent` (requires vue 2.7+)
|
||||
- Swap `BeachballIcon` to use `colord` library (ESM + CJS, smaller)
|
||||
- Bump to `@polkadot/util` 11.1.1
|
||||
|
||||
|
||||
## 3.0.2 Mar 11, 2023
|
||||
|
||||
Changes:
|
||||
|
||||
- Use consistent `.js` imports in source files (TS moduleResolution)
|
||||
- Bump to `@polkadot/util` 11.0.2
|
||||
|
||||
|
||||
## 3.0.1 Mar 5, 2023
|
||||
|
||||
Changes:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
681 Jaco 3.0.1 (#725)
|
||||
699 Jaco 3.1.2 (#742)
|
||||
7 YJ fix #224: decrease frame size to 1024, set multipart bool (#225)
|
||||
4 Antoine Estienne Refactor logic to better use prefix (#491)
|
||||
4 kwingram25 fix ff api url issue (#289)
|
||||
|
||||
19
package.json
19
package.json
@@ -1,6 +1,9 @@
|
||||
{
|
||||
"author": "Jaco Greeff <jacogr@gmail.com>",
|
||||
"bugs": "https://github.com/polkadot-js/ui/issues",
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
},
|
||||
"homepage": "https://github.com/polkadot-js/ui#readme",
|
||||
"license": "Apache-2.0",
|
||||
"packageManager": "yarn@3.2.0",
|
||||
@@ -11,10 +14,10 @@
|
||||
},
|
||||
"sideEffects": false,
|
||||
"type": "module",
|
||||
"version": "3.0.1",
|
||||
"version": "3.1.2",
|
||||
"versions": {
|
||||
"git": "3.0.1",
|
||||
"npm": "3.0.1"
|
||||
"git": "3.1.2",
|
||||
"npm": "3.1.2"
|
||||
},
|
||||
"workspaces": [
|
||||
"packages/*"
|
||||
@@ -30,15 +33,15 @@
|
||||
"test:one": "polkadot-dev-run-test --env browser"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@polkadot/dev": "^0.69.27",
|
||||
"@polkadot/x-bundle": "^11.0.1",
|
||||
"@types/node": "^18.14.6",
|
||||
"@polkadot/dev": "^0.72.22",
|
||||
"@polkadot/x-bundle": "^11.1.2",
|
||||
"@types/node": "^18.15.9",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-is": "^18.2.0",
|
||||
"react-native": "^0.71.3"
|
||||
"react-native": "^0.71.4"
|
||||
},
|
||||
"resolutions": {
|
||||
"typescript": "^4.9.5"
|
||||
"typescript": "^5.0.2"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
{
|
||||
"author": "Jaco Greeff <jacogr@gmail.com>",
|
||||
"bugs": "https://github.com/polkadot-js/ui/issues",
|
||||
"contributors": [],
|
||||
"description": "Renders an SVG picture representing an address",
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
},
|
||||
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/react-identicon#readme",
|
||||
"license": "Apache-2.0",
|
||||
"maintainers": [],
|
||||
"name": "@polkadot/react-identicon",
|
||||
"repository": {
|
||||
"directory": "packages/react-identicon",
|
||||
@@ -17,26 +18,25 @@
|
||||
"./detectPackage.cjs"
|
||||
],
|
||||
"type": "module",
|
||||
"version": "3.0.1",
|
||||
"version": "3.1.2",
|
||||
"main": "index.js",
|
||||
"dependencies": {
|
||||
"@polkadot/keyring": "^11.0.1",
|
||||
"@polkadot/ui-settings": "3.0.1",
|
||||
"@polkadot/ui-shared": "3.0.1",
|
||||
"@polkadot/util": "^11.0.1",
|
||||
"@polkadot/util-crypto": "^11.0.1",
|
||||
"color": "^3.2.1",
|
||||
"@polkadot/keyring": "^11.1.2",
|
||||
"@polkadot/ui-settings": "3.1.2",
|
||||
"@polkadot/ui-shared": "3.1.2",
|
||||
"@polkadot/util": "^11.1.2",
|
||||
"@polkadot/util-crypto": "^11.1.2",
|
||||
"ethereum-blockies-base64": "^1.0.2",
|
||||
"jdenticon": "3.2.0",
|
||||
"react-copy-to-clipboard": "^5.1.0",
|
||||
"styled-components": "^5.3.8",
|
||||
"styled-components": "^5.3.9",
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/react-copy-to-clipboard": "^5.0.4",
|
||||
"@types/react-dom": "^18.0.11",
|
||||
"@types/styled-components": "^5.1.26",
|
||||
"styled-components": "^5.3.8",
|
||||
"styled-components": "^5.3.9",
|
||||
"xmlserializer": "^0.6.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
|
||||
@@ -2,26 +2,26 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { Prefix } from '@polkadot/util-crypto/address/types';
|
||||
import type { IdentityProps as Props, Props as ComponentProps } from './types';
|
||||
import type { IdentityProps as Props, Props as ComponentProps } from './types.js';
|
||||
|
||||
import React from 'react';
|
||||
import CopyToClipboard from 'react-copy-to-clipboard';
|
||||
import styledComponents from 'styled-components';
|
||||
import styledComponents, { StyledInterface } from 'styled-components';
|
||||
|
||||
import { ICON_DEFAULT_HOST, settings } from '@polkadot/ui-settings';
|
||||
import { isHex, isU8a, u8aToHex } from '@polkadot/util';
|
||||
import { decodeAddress, encodeAddress, ethereumEncode } from '@polkadot/util-crypto';
|
||||
|
||||
import { Beachball, Empty, Ethereum, Jdenticon, Polkadot } from './icons';
|
||||
import { Beachball, Empty, Ethereum, Jdenticon, Polkadot } from './icons/index.js';
|
||||
|
||||
// In styled-components v6, there is a named export which can be used
|
||||
// directly, i.e. "import { styled } from ..." with no more magic. Until
|
||||
// such time the cjs vs esm import here is problematic, so we hack around
|
||||
// the various shapes below
|
||||
const styled = (
|
||||
(styledComponents as unknown as { styled: typeof styledComponents }).styled ||
|
||||
(styledComponents as unknown as { default: typeof styledComponents }).default ||
|
||||
styledComponents
|
||||
(styledComponents as unknown as { styled: StyledInterface }).styled ||
|
||||
(styledComponents as unknown as { default: StyledInterface }).default ||
|
||||
styledComponents as unknown as StyledInterface
|
||||
);
|
||||
|
||||
const Fallback = Beachball;
|
||||
@@ -74,7 +74,7 @@ class BaseIcon extends React.PureComponent<Props, State> {
|
||||
address,
|
||||
publicKey
|
||||
};
|
||||
} catch (error) {
|
||||
} catch {
|
||||
return {
|
||||
address: '',
|
||||
publicKey: '0x'
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export * from './icons';
|
||||
export * from './icons/index.js';
|
||||
|
||||
export { Identicon } from './Identicon';
|
||||
export { packageInfo } from './packageInfo';
|
||||
export { Identicon } from './Identicon.js';
|
||||
export { packageInfo } from './packageInfo.js';
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
import { detectPackage } from '@polkadot/util';
|
||||
|
||||
import others from './detectOther';
|
||||
import { packageInfo } from './packageInfo';
|
||||
import others from './detectOther.js';
|
||||
import { packageInfo } from './packageInfo.js';
|
||||
|
||||
detectPackage(packageInfo, null, others);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { Props } from '../types';
|
||||
import type { Props } from '../types.js';
|
||||
|
||||
import React, { useCallback } from 'react';
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { Props } from '../types';
|
||||
import type { Props } from '../types.js';
|
||||
|
||||
import React from 'react';
|
||||
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { Props } from '../types';
|
||||
import type { Props } from '../types.js';
|
||||
|
||||
import makeBlockie from 'ethereum-blockies-base64';
|
||||
import React, { useMemo } from 'react';
|
||||
import styledComponents from 'styled-components';
|
||||
import styledComponents, { StyledInterface } from 'styled-components';
|
||||
|
||||
// In styled-components v6, there is a named export which can be used
|
||||
// directly, i.e. "import { styled } from ..." with no more magic. Until
|
||||
// such time the cjs vs esm import here is problematic, so we hack around
|
||||
// the various shapes below
|
||||
const styled = (
|
||||
(styledComponents as unknown as { styled: typeof styledComponents }).styled ||
|
||||
(styledComponents as unknown as { default: typeof styledComponents }).default ||
|
||||
styledComponents
|
||||
(styledComponents as unknown as { styled: StyledInterface }).styled ||
|
||||
(styledComponents as unknown as { default: StyledInterface }).default ||
|
||||
styledComponents as unknown as StyledInterface
|
||||
);
|
||||
|
||||
interface ImgProps {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { Props } from '../types';
|
||||
import type { Props } from '../types.js';
|
||||
|
||||
import * as jdenticon from 'jdenticon';
|
||||
import React, { useMemo } from 'react';
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
// - Overall it is now just a static component, expecting an address as an input value
|
||||
|
||||
import type { Circle } from '@polkadot/ui-shared/icons/types';
|
||||
import type { Props } from '../types';
|
||||
import type { Props } from '../types.js';
|
||||
|
||||
import React, { useMemo } from 'react';
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export { Beachball } from './Beachball';
|
||||
export { Empty } from './Empty';
|
||||
export { Ethereum } from './Ethereum';
|
||||
export { Jdenticon } from './Jdenticon';
|
||||
export { Polkadot } from './Polkadot';
|
||||
export { Beachball } from './Beachball.js';
|
||||
export { Empty } from './Empty.js';
|
||||
export { Ethereum } from './Ethereum.js';
|
||||
export { Jdenticon } from './Jdenticon.js';
|
||||
export { Polkadot } from './Polkadot.js';
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import './detectPackage';
|
||||
import './detectPackage.js';
|
||||
|
||||
import { Identicon } from './bundle';
|
||||
import { Identicon } from './bundle.js';
|
||||
|
||||
export * from './bundle';
|
||||
export * from './bundle.js';
|
||||
|
||||
export default Identicon;
|
||||
|
||||
@@ -3,4 +3,4 @@
|
||||
|
||||
// Do not edit, auto-generated by @polkadot/dev
|
||||
|
||||
export const packageInfo = { name: '@polkadot/react-identicon', path: 'auto', type: 'auto', version: '3.0.1' };
|
||||
export const packageInfo = { name: '@polkadot/react-identicon', path: 'auto', type: 'auto', version: '3.1.2' };
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
{
|
||||
"author": "Jaco Greeff <jacogr@gmail.com>",
|
||||
"bugs": "https://github.com/polkadot-js/ui/issues",
|
||||
"contributors": [],
|
||||
"description": "Generates and reads QR codes",
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
},
|
||||
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/react-qr#readme",
|
||||
"license": "Apache-2.0",
|
||||
"maintainers": [],
|
||||
"name": "@polkadot/react-qr",
|
||||
"repository": {
|
||||
"directory": "packages/react-qr",
|
||||
@@ -17,15 +18,15 @@
|
||||
"./detectPackage.cjs"
|
||||
],
|
||||
"type": "module",
|
||||
"version": "3.0.1",
|
||||
"version": "3.1.2",
|
||||
"main": "index.js",
|
||||
"dependencies": {
|
||||
"@polkadot/ui-settings": "3.0.1",
|
||||
"@polkadot/util": "^11.0.1",
|
||||
"@polkadot/util-crypto": "^11.0.1",
|
||||
"@polkadot/ui-settings": "3.1.2",
|
||||
"@polkadot/util": "^11.1.2",
|
||||
"@polkadot/util-crypto": "^11.1.2",
|
||||
"qrcode-generator": "^1.4.4",
|
||||
"react-qr-reader": "^2.2.1",
|
||||
"styled-components": "^5.3.8",
|
||||
"styled-components": "^5.3.9",
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -2,22 +2,22 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import React, { useEffect, useMemo, useRef, useState } from 'react';
|
||||
import styledComponents from 'styled-components';
|
||||
import styledComponents, { StyledInterface } from 'styled-components';
|
||||
|
||||
import { objectSpread } from '@polkadot/util';
|
||||
import { xxhashAsHex } from '@polkadot/util-crypto';
|
||||
|
||||
import { qrcode } from './qrcode';
|
||||
import { createFrames, createImgSize } from './util';
|
||||
import { qrcode } from './qrcode.js';
|
||||
import { createFrames, createImgSize } from './util.js';
|
||||
|
||||
// In styled-components v6, there is a named export which can be used
|
||||
// directly, i.e. "import { styled } from ..." with no more magic. Until
|
||||
// such time the cjs vs esm import here is problematic, so we hack around
|
||||
// the various shapes below
|
||||
const styled = (
|
||||
(styledComponents as unknown as { styled: typeof styledComponents }).styled ||
|
||||
(styledComponents as unknown as { default: typeof styledComponents }).default ||
|
||||
styledComponents
|
||||
(styledComponents as unknown as { styled: StyledInterface }).styled ||
|
||||
(styledComponents as unknown as { default: StyledInterface }).default ||
|
||||
styledComponents as unknown as StyledInterface
|
||||
);
|
||||
|
||||
interface Props {
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
|
||||
import React, { useMemo } from 'react';
|
||||
|
||||
import { QrDisplay } from './Display';
|
||||
import { createAddressPayload } from './util';
|
||||
import { QrDisplay } from './Display.js';
|
||||
import { createAddressPayload } from './util.js';
|
||||
|
||||
interface Props {
|
||||
address: string;
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
|
||||
import React, { useMemo } from 'react';
|
||||
|
||||
import { QrDisplay } from './Display';
|
||||
import { createSignPayload } from './util';
|
||||
import { QrDisplay } from './Display.js';
|
||||
import { createSignPayload } from './util.js';
|
||||
|
||||
interface Props {
|
||||
address: string;
|
||||
|
||||
@@ -5,8 +5,8 @@ import type { NetworkSpecsStruct } from '@polkadot/ui-settings/types';
|
||||
|
||||
import React, { useMemo } from 'react';
|
||||
|
||||
import { QrDisplay } from './Display';
|
||||
import { encodeString } from './util';
|
||||
import { QrDisplay } from './Display.js';
|
||||
import { encodeString } from './util.js';
|
||||
|
||||
interface Props {
|
||||
className?: string;
|
||||
|
||||
@@ -3,18 +3,18 @@
|
||||
|
||||
import React, { useCallback, useMemo } from 'react';
|
||||
import Reader from 'react-qr-reader';
|
||||
import styledComponents from 'styled-components';
|
||||
import styledComponents, { StyledInterface } from 'styled-components';
|
||||
|
||||
import { createImgSize } from './util';
|
||||
import { createImgSize } from './util.js';
|
||||
|
||||
// In styled-components v6, there is a named export which can be used
|
||||
// directly, i.e. "import { styled } from ..." with no more magic. Until
|
||||
// such time the cjs vs esm import here is problematic, so we hack around
|
||||
// the various shapes below
|
||||
const styled = (
|
||||
(styledComponents as unknown as { styled: typeof styledComponents }).styled ||
|
||||
(styledComponents as unknown as { default: typeof styledComponents }).default ||
|
||||
styledComponents
|
||||
(styledComponents as unknown as { styled: StyledInterface }).styled ||
|
||||
(styledComponents as unknown as { default: StyledInterface }).default ||
|
||||
styledComponents as unknown as StyledInterface
|
||||
);
|
||||
|
||||
interface Props {
|
||||
|
||||
@@ -3,11 +3,10 @@
|
||||
|
||||
import React, { useCallback } from 'react';
|
||||
|
||||
import { assert } from '@polkadot/util';
|
||||
import { decodeAddress } from '@polkadot/util-crypto';
|
||||
|
||||
import { ADDRESS_PREFIX, SEED_PREFIX } from './constants';
|
||||
import { QrScan } from './Scan';
|
||||
import { ADDRESS_PREFIX, SEED_PREFIX } from './constants.js';
|
||||
import { QrScan } from './Scan.js';
|
||||
|
||||
interface ScanType {
|
||||
isAddress: boolean;
|
||||
@@ -43,7 +42,9 @@ function ScanAddress ({ className, isEthereum, onError, onScan, size, style }: P
|
||||
const expectedPrefix = (isEthereum ? 'ethereum' : ADDRESS_PREFIX);
|
||||
const isValidPrefix = (prefix === expectedPrefix) || (prefix === SEED_PREFIX);
|
||||
|
||||
assert(isValidPrefix, `Invalid prefix received, expected '${expectedPrefix} or ${SEED_PREFIX}' , found '${prefix}'`);
|
||||
if (!isValidPrefix) {
|
||||
throw new Error(`Invalid prefix received, expected '${expectedPrefix} or ${SEED_PREFIX}' , found '${prefix}'`);
|
||||
}
|
||||
|
||||
const isAddress = prefix === expectedPrefix;
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import type { HexString } from '@polkadot/util/types';
|
||||
|
||||
import React, { useCallback } from 'react';
|
||||
|
||||
import { QrScan } from './Scan';
|
||||
import { QrScan } from './Scan.js';
|
||||
|
||||
interface ScanType {
|
||||
signature: HexString;
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export { QrDisplayAddress } from './DisplayAddress';
|
||||
export { QrDisplayPayload } from './DisplayPayload';
|
||||
export { QrScanAddress } from './ScanAddress';
|
||||
export { QrScanSignature } from './ScanSignature';
|
||||
export { QrNetworkSpecs } from './NetworkSpecs';
|
||||
export { packageInfo } from './packageInfo';
|
||||
export { QrDisplayAddress } from './DisplayAddress.js';
|
||||
export { QrDisplayPayload } from './DisplayPayload.js';
|
||||
export { QrScanAddress } from './ScanAddress.js';
|
||||
export { QrScanSignature } from './ScanSignature.js';
|
||||
export { QrNetworkSpecs } from './NetworkSpecs.js';
|
||||
export { packageInfo } from './packageInfo.js';
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
import { detectPackage } from '@polkadot/util';
|
||||
|
||||
import others from './detectOther';
|
||||
import { packageInfo } from './packageInfo';
|
||||
import others from './detectOther.js';
|
||||
import { packageInfo } from './packageInfo.js';
|
||||
|
||||
detectPackage(packageInfo, null, others);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import './detectPackage';
|
||||
import './detectPackage.js';
|
||||
|
||||
export * from './bundle';
|
||||
export * from './bundle.js';
|
||||
|
||||
@@ -3,4 +3,4 @@
|
||||
|
||||
// Do not edit, auto-generated by @polkadot/dev
|
||||
|
||||
export const packageInfo = { name: '@polkadot/react-qr', path: 'auto', type: 'auto', version: '3.0.1' };
|
||||
export const packageInfo = { name: '@polkadot/react-qr', path: 'auto', type: 'auto', version: '3.1.2' };
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// eslint-disable-next-line spaced-comment
|
||||
/// <reference types="@polkadot/dev/node/test/node" />
|
||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||
|
||||
import { u8aConcat, u8aToHex, u8aToString } from '@polkadot/util';
|
||||
import { randomAsU8a } from '@polkadot/util-crypto';
|
||||
|
||||
import { createAddressPayload, createFrames, createSignPayload, decodeString, encodeNumber, encodeString } from './util';
|
||||
import { createAddressPayload, createFrames, createSignPayload, decodeString, encodeNumber, encodeString } from './util.js';
|
||||
|
||||
describe('util', (): void => {
|
||||
describe('Uint8Array <-> string', (): void => {
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
import { isString, u8aConcat, u8aToU8a } from '@polkadot/util';
|
||||
import { decodeAddress } from '@polkadot/util-crypto';
|
||||
|
||||
import { ADDRESS_PREFIX, CRYPTO_SR25519, FRAME_SIZE, SUBSTRATE_ID } from './constants';
|
||||
import { ADDRESS_PREFIX, CRYPTO_SR25519, FRAME_SIZE, SUBSTRATE_ID } from './constants.js';
|
||||
|
||||
const MULTIPART = new Uint8Array([0]);
|
||||
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
{
|
||||
"author": "Jaco Greeff <jacogr@gmail.com>",
|
||||
"bugs": "https://github.com/polkadot-js/ui/issues",
|
||||
"contributors": [],
|
||||
"description": "Renders an SVG picture representing an address",
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
},
|
||||
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/reactnative-identicon#readme",
|
||||
"license": "Apache-2.0",
|
||||
"maintainers": [],
|
||||
"name": "@polkadot/reactnative-identicon",
|
||||
"repository": {
|
||||
"directory": "packages/reactnative-identicon",
|
||||
@@ -17,17 +18,17 @@
|
||||
"./detectPackage.cjs"
|
||||
],
|
||||
"type": "module",
|
||||
"version": "3.0.1",
|
||||
"version": "3.1.2",
|
||||
"main": "index.js",
|
||||
"dependencies": {
|
||||
"@polkadot/ui-shared": "3.0.1",
|
||||
"@polkadot/util": "^11.0.1",
|
||||
"@polkadot/util-crypto": "^11.0.1",
|
||||
"@polkadot/ui-shared": "3.1.2",
|
||||
"@polkadot/util": "^11.1.2",
|
||||
"@polkadot/util-crypto": "^11.1.2",
|
||||
"react-native-svg": "^12.5.1",
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/react-native": "^0.71.3"
|
||||
"@types/react-native": "^0.71.5"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@polkadot/util": "*",
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { Prefix } from '@polkadot/util-crypto/address/types';
|
||||
import type { Props as ComponentProps } from './types';
|
||||
import type { Props as ComponentProps } from './types.js';
|
||||
|
||||
import React from 'react';
|
||||
|
||||
import { isHex, isU8a, u8aToHex } from '@polkadot/util';
|
||||
import { decodeAddress, encodeAddress } from '@polkadot/util-crypto';
|
||||
|
||||
import { Empty, Polkadot } from './icons';
|
||||
import { Empty, Polkadot } from './icons/index.js';
|
||||
|
||||
const Fallback = Polkadot;
|
||||
|
||||
@@ -54,7 +54,7 @@ export default class IdentityIcon extends React.PureComponent<Props, State> {
|
||||
return address === prevState.address
|
||||
? null
|
||||
: { address, publicKey };
|
||||
} catch (error) {
|
||||
} catch {
|
||||
return {
|
||||
address: '',
|
||||
publicKey: '0x'
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// Copyright 2017-2023 @polkadot/reactnative-identicon authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export * from './icons';
|
||||
export { packageInfo } from './packageInfo';
|
||||
export * from './icons/index.js';
|
||||
export { packageInfo } from './packageInfo.js';
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
import { detectPackage } from '@polkadot/util';
|
||||
|
||||
import others from './detectOther';
|
||||
import { packageInfo } from './packageInfo';
|
||||
import others from './detectOther.js';
|
||||
import { packageInfo } from './packageInfo.js';
|
||||
|
||||
detectPackage(packageInfo, null, others);
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
// Copyright 2017-2023 @polkadot/reactnative-identicon authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { Props } from '../types';
|
||||
import type { Props } from '../types.js';
|
||||
|
||||
import React from 'react';
|
||||
import { View } from 'react-native';
|
||||
import Svg, { Circle } from 'react-native-svg';
|
||||
import { Circle, Svg } from 'react-native-svg';
|
||||
|
||||
export default function Empty ({ size }: Props): React.ReactElement<Props> {
|
||||
return (
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { Circle as CircleType } from '@polkadot/ui-shared/icons/types';
|
||||
import type { Props } from '../types';
|
||||
import type { Props } from '../types.js';
|
||||
|
||||
import React, { useMemo } from 'react';
|
||||
import { View } from 'react-native';
|
||||
import Svg, { Circle as SvgCircle } from 'react-native-svg';
|
||||
import { Circle as SvgCircle, Svg } from 'react-native-svg';
|
||||
|
||||
import { polkadotIcon } from '@polkadot/ui-shared';
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// Copyright 2017-2023 @polkadot/reactnative-identicon authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export { default as Empty } from './Empty';
|
||||
export { default as Polkadot } from './Polkadot';
|
||||
export { default as Empty } from './Empty.js';
|
||||
export { default as Polkadot } from './Polkadot.js';
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
// Copyright 2017-2023 @polkadot/reactnative-identicon authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import './detectPackage';
|
||||
import './detectPackage.js';
|
||||
|
||||
import Identicon from './Identicon';
|
||||
import Identicon from './Identicon.js';
|
||||
|
||||
export * from './bundle';
|
||||
export * from './bundle.js';
|
||||
|
||||
export default Identicon;
|
||||
|
||||
@@ -3,4 +3,4 @@
|
||||
|
||||
// Do not edit, auto-generated by @polkadot/dev
|
||||
|
||||
export const packageInfo = { name: '@polkadot/reactnative-identicon', path: 'auto', type: 'auto', version: '3.0.1' };
|
||||
export const packageInfo = { name: '@polkadot/reactnative-identicon', path: 'auto', type: 'auto', version: '3.1.2' };
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
{
|
||||
"author": "Jaco Greeff <jacogr@gmail.com>",
|
||||
"bugs": "https://github.com/polkadot-js/ui/issues",
|
||||
"contributors": [],
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
},
|
||||
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-keyring#readme",
|
||||
"license": "Apache-2.0",
|
||||
"maintainers": [],
|
||||
"name": "@polkadot/ui-keyring",
|
||||
"repository": {
|
||||
"directory": "packages/ui-keyring",
|
||||
@@ -16,20 +17,20 @@
|
||||
"./detectPackage.cjs"
|
||||
],
|
||||
"type": "module",
|
||||
"version": "3.0.1",
|
||||
"version": "3.1.2",
|
||||
"main": "index.js",
|
||||
"dependencies": {
|
||||
"@polkadot/keyring": "^11.0.1",
|
||||
"@polkadot/ui-settings": "3.0.1",
|
||||
"@polkadot/util": "^11.0.1",
|
||||
"@polkadot/util-crypto": "^11.0.1",
|
||||
"mkdirp": "^2.1.5",
|
||||
"@polkadot/keyring": "^11.1.2",
|
||||
"@polkadot/ui-settings": "3.1.2",
|
||||
"@polkadot/util": "^11.1.2",
|
||||
"@polkadot/util-crypto": "^11.1.2",
|
||||
"mkdirp": "^2.1.6",
|
||||
"rxjs": "^7.8.0",
|
||||
"store": "^2.0.12",
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/mkdirp": "^1.0.2",
|
||||
"@types/mkdirp": "^2.0.0",
|
||||
"@types/store": "^2.0.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
|
||||
@@ -3,17 +3,17 @@
|
||||
|
||||
import type { KeyringInstance, KeyringPair } from '@polkadot/keyring/types';
|
||||
import type { Prefix } from '@polkadot/util-crypto/address/types';
|
||||
import type { AddressSubject } from './observable/types';
|
||||
import type { KeyringOptions, KeyringStore } from './types';
|
||||
import type { AddressSubject } from './observable/types.js';
|
||||
import type { KeyringOptions, KeyringStore } from './types.js';
|
||||
|
||||
import { createTestKeyring } from '@polkadot/keyring';
|
||||
import { isBoolean, isNumber, isString } from '@polkadot/util';
|
||||
|
||||
import { accounts } from './observable/accounts';
|
||||
import { addresses } from './observable/addresses';
|
||||
import { contracts } from './observable/contracts';
|
||||
import { env } from './observable/env';
|
||||
import { BrowserStore } from './stores/Browser'; // direct import (skip index with all)
|
||||
import { accounts } from './observable/accounts.js';
|
||||
import { addresses } from './observable/addresses.js';
|
||||
import { contracts } from './observable/contracts.js';
|
||||
import { env } from './observable/env.js';
|
||||
import { BrowserStore } from './stores/Browser.js'; // direct import (skip index with all)
|
||||
|
||||
export class Base {
|
||||
#accounts: AddressSubject;
|
||||
@@ -22,6 +22,8 @@ export class Base {
|
||||
|
||||
#contracts: AddressSubject;
|
||||
|
||||
#isEthereum: boolean;
|
||||
|
||||
#keyring?: KeyringInstance;
|
||||
|
||||
protected _store: KeyringStore;
|
||||
@@ -34,6 +36,7 @@ export class Base {
|
||||
this.#accounts = accounts;
|
||||
this.#addresses = addresses;
|
||||
this.#contracts = contracts;
|
||||
this.#isEthereum = false;
|
||||
this._store = new BrowserStore();
|
||||
}
|
||||
|
||||
@@ -49,6 +52,10 @@ export class Base {
|
||||
return this.#contracts;
|
||||
}
|
||||
|
||||
public get isEthereum (): boolean {
|
||||
return this.#isEthereum;
|
||||
}
|
||||
|
||||
public get keyring (): KeyringInstance {
|
||||
if (this.#keyring) {
|
||||
return this.#keyring;
|
||||
@@ -117,6 +124,9 @@ export class Base {
|
||||
this.setDevMode(options.isDevelopment);
|
||||
}
|
||||
|
||||
// set Ethereum state
|
||||
this.#isEthereum = keyring.type === 'ethereum';
|
||||
|
||||
this.#keyring = keyring;
|
||||
this._genesisHash = options.genesisHash && (
|
||||
isString(options.genesisHash)
|
||||
|
||||
@@ -5,18 +5,18 @@ import type { KeyringPair, KeyringPair$Json, KeyringPair$Meta } from '@polkadot/
|
||||
import type { BN } from '@polkadot/util';
|
||||
import type { EncryptedJson } from '@polkadot/util-crypto/json/types';
|
||||
import type { KeypairType } from '@polkadot/util-crypto/types';
|
||||
import type { AddressSubject, SingleAddress } from './observable/types';
|
||||
import type { CreateResult, KeyringAddress, KeyringAddressType, KeyringItemType, KeyringJson, KeyringJson$Meta, KeyringOptions, KeyringPairs$Json, KeyringStruct } from './types';
|
||||
import type { AddressSubject, SingleAddress } from './observable/types.js';
|
||||
import type { CreateResult, KeyringAddress, KeyringAddressType, KeyringItemType, KeyringJson, KeyringJson$Meta, KeyringOptions, KeyringPairs$Json, KeyringStruct } from './types.js';
|
||||
|
||||
import { createPair } from '@polkadot/keyring';
|
||||
import { chains } from '@polkadot/ui-settings';
|
||||
import { bnToBn, hexToU8a, isFunction, isHex, isString, objectSpread, stringify, stringToU8a, u8aSorted, u8aToString } from '@polkadot/util';
|
||||
import { base64Decode, createKeyMulti, jsonDecrypt, jsonEncrypt } from '@polkadot/util-crypto';
|
||||
|
||||
import { env } from './observable/env';
|
||||
import { Base } from './Base';
|
||||
import { accountKey, accountRegex, addressKey, addressRegex, contractKey, contractRegex } from './defaults';
|
||||
import { KeyringOption } from './options';
|
||||
import { env } from './observable/env.js';
|
||||
import { KeyringOption } from './options/index.js';
|
||||
import { Base } from './Base.js';
|
||||
import { accountKey, accountRegex, addressKey, addressRegex, contractKey, contractRegex } from './defaults.js';
|
||||
|
||||
const RECENT_EXPIRY = 24 * 60 * 60;
|
||||
|
||||
@@ -46,10 +46,20 @@ export class Keyring extends Base implements KeyringStruct {
|
||||
}
|
||||
|
||||
public addMultisig (addresses: (string | Uint8Array)[], threshold: bigint | BN | number, meta: KeyringPair$Meta = {}): CreateResult {
|
||||
const address = createKeyMulti(addresses, threshold);
|
||||
let address = createKeyMulti(addresses, threshold);
|
||||
|
||||
// For Ethereum chains, the first 20 bytes of the hash indicates the actual address
|
||||
// Testcases via creation and on-chain events:
|
||||
// - input: 0x7a1671a0224c8927b08f978027d586ab6868de0d31bb5bc956b625ced2ab18c4
|
||||
// - output: 0x7a1671a0224c8927b08f978027d586ab6868de0d
|
||||
if (this.isEthereum) {
|
||||
address = address.slice(0, 20);
|
||||
}
|
||||
|
||||
// we could use `sortAddresses`, but rather use internal encode/decode so we are 100%
|
||||
const who = u8aSorted(addresses.map((who) => this.decodeAddress(who))).map((who) => this.encodeAddress(who));
|
||||
const who = u8aSorted(
|
||||
addresses.map((who) => this.decodeAddress(who))
|
||||
).map((who) => this.encodeAddress(who));
|
||||
|
||||
return this.addExternal(address, objectSpread<KeyringPair$Meta>({}, meta, { isMultisig: true, threshold: bnToBn(threshold).toNumber(), who }));
|
||||
}
|
||||
@@ -289,7 +299,7 @@ export class Keyring extends Base implements KeyringStruct {
|
||||
this.loadContract(json, key);
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
} catch {
|
||||
console.warn(`Keyring: Unable to load ${key}:${stringify(json)}`);
|
||||
}
|
||||
}
|
||||
@@ -299,7 +309,7 @@ export class Keyring extends Base implements KeyringStruct {
|
||||
if (this.allowGenesis(account)) {
|
||||
try {
|
||||
this.loadInjected(account.address, account.meta, account.type);
|
||||
} catch (error) {
|
||||
} catch {
|
||||
console.warn(`Keyring: Unable to inject ${stringify(account)}`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import { Keyring } from './Keyring';
|
||||
import { Keyring } from './Keyring.js';
|
||||
|
||||
export { packageInfo } from './packageInfo';
|
||||
export { packageInfo } from './packageInfo.js';
|
||||
|
||||
const keyring = new Keyring();
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
import { detectPackage } from '@polkadot/util';
|
||||
|
||||
import others from './detectOther';
|
||||
import { packageInfo } from './packageInfo';
|
||||
import others from './detectOther.js';
|
||||
import { packageInfo } from './packageInfo.js';
|
||||
|
||||
detectPackage(packageInfo, null, others);
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import './detectPackage';
|
||||
import './detectPackage.js';
|
||||
|
||||
import { keyring } from './bundle';
|
||||
import { keyring } from './bundle.js';
|
||||
|
||||
export * from './bundle';
|
||||
export * from './bundle.js';
|
||||
|
||||
export default keyring;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import { accountKey } from '../defaults';
|
||||
import { genericSubject } from './genericSubject';
|
||||
import { accountKey } from '../defaults.js';
|
||||
import { genericSubject } from './genericSubject.js';
|
||||
|
||||
export const accounts = genericSubject(accountKey, true);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import { addressKey } from '../defaults';
|
||||
import { genericSubject } from './genericSubject';
|
||||
import { addressKey } from '../defaults.js';
|
||||
import { genericSubject } from './genericSubject.js';
|
||||
|
||||
export const addresses = genericSubject(addressKey);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import { contractKey } from '../defaults';
|
||||
import { genericSubject } from './genericSubject';
|
||||
import { contractKey } from '../defaults.js';
|
||||
import { genericSubject } from './genericSubject.js';
|
||||
|
||||
export const contracts = genericSubject(contractKey);
|
||||
|
||||
@@ -2,15 +2,15 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { KeypairType } from '@polkadot/util-crypto/types';
|
||||
import type { KeyringJson, KeyringStore } from '../types';
|
||||
import type { AddressSubject, SingleAddress, SubjectInfo } from './types';
|
||||
import type { KeyringJson, KeyringStore } from '../types.js';
|
||||
import type { AddressSubject, SingleAddress, SubjectInfo } from './types.js';
|
||||
|
||||
import { BehaviorSubject } from 'rxjs';
|
||||
|
||||
import { objectCopy, objectSpread } from '@polkadot/util';
|
||||
|
||||
import { createOptionItem } from '../options/item';
|
||||
import { env } from './env';
|
||||
import { createOptionItem } from '../options/item.js';
|
||||
import { env } from './env.js';
|
||||
|
||||
function callNext (current: SubjectInfo, subject: BehaviorSubject<SubjectInfo>, withTest: boolean): void {
|
||||
const isDevMode = env.isDevelopment();
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { SubjectInfo } from './types';
|
||||
import type { SubjectInfo } from './types.js';
|
||||
|
||||
import { combineLatest, map } from 'rxjs';
|
||||
|
||||
import { accounts } from './accounts';
|
||||
import { addresses } from './addresses';
|
||||
import { contracts } from './contracts';
|
||||
import { accounts } from './accounts.js';
|
||||
import { addresses } from './addresses.js';
|
||||
import { contracts } from './contracts.js';
|
||||
|
||||
interface Result {
|
||||
accounts: SubjectInfo;
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
|
||||
import type { BehaviorSubject } from 'rxjs';
|
||||
import type { KeypairType } from '@polkadot/util-crypto/types';
|
||||
import type { KeyringSectionOption } from '../options/types';
|
||||
import type { KeyringJson, KeyringStore } from '../types';
|
||||
import type { KeyringSectionOption } from '../options/types.js';
|
||||
import type { KeyringJson, KeyringStore } from '../types.js';
|
||||
|
||||
export interface SingleAddress {
|
||||
json: KeyringJson;
|
||||
|
||||
@@ -1,25 +1,27 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// eslint-disable-next-line spaced-comment
|
||||
/// <reference types="@polkadot/dev/node/test/node" />
|
||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||
|
||||
import type { KeyringStruct } from '../types';
|
||||
import type { KeyringStruct } from '../types.js';
|
||||
|
||||
import { KeyringOption } from '.';
|
||||
|
||||
const keyringOption = new KeyringOption();
|
||||
import { KeyringOption } from './index.js';
|
||||
|
||||
describe('KeyringOption', (): void => {
|
||||
it('should not allow initOptions to be called more than once', (): void => {
|
||||
const state: Partial<KeyringStruct> = {};
|
||||
// Warning: Test "should not allow initOptions to be called more than once" generated asynchronous activity after the test ended. This activity created the error "TypeError: Cannot read properties of undefined (reading 'subject')" and would have caused the test to fail, but instead triggered an uncaughtException event.
|
||||
it.skip('should not allow initOptions to be called more than once', (): void => {
|
||||
const keyringOption = new KeyringOption();
|
||||
const state = {} as KeyringStruct;
|
||||
|
||||
// first call
|
||||
keyringOption.init(state as KeyringStruct);
|
||||
keyringOption.init(state);
|
||||
|
||||
// second call
|
||||
expect(
|
||||
() => keyringOption.init(state as KeyringStruct)
|
||||
() => keyringOption.init(state)
|
||||
).toThrow('Unable to initialise options more than once');
|
||||
|
||||
// cleanup?
|
||||
keyringOption.clear();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { SingleAddress } from '../observable/types';
|
||||
import type { KeyringStruct } from '../types';
|
||||
import type { KeyringOptionInstance, KeyringOptions, KeyringSectionOption, KeyringSectionOptions } from './types';
|
||||
import type { Subscription } from 'rxjs';
|
||||
import type { SingleAddress } from '../observable/types.js';
|
||||
import type { KeyringStruct } from '../types.js';
|
||||
import type { KeyringOptionInstance, KeyringOptions, KeyringSectionOption, KeyringSectionOptions } from './types.js';
|
||||
|
||||
import { BehaviorSubject } from 'rxjs';
|
||||
|
||||
import { assert } from '@polkadot/util';
|
||||
|
||||
import { obervableAll } from '../observable';
|
||||
import { obervableAll } from '../observable/index.js';
|
||||
|
||||
let hasCalledInitOptions = false;
|
||||
|
||||
@@ -36,6 +35,8 @@ const sortByCreated = (a: SingleAddress, b: SingleAddress): number => {
|
||||
};
|
||||
|
||||
export class KeyringOption implements KeyringOptionInstance {
|
||||
#allSub: Subscription | null = null;
|
||||
|
||||
public readonly optionsSubject: BehaviorSubject<KeyringOptions> = new BehaviorSubject(this.emptyOptions());
|
||||
|
||||
public createOptionHeader (name: string): KeyringSectionOption {
|
||||
@@ -47,9 +48,11 @@ export class KeyringOption implements KeyringOptionInstance {
|
||||
}
|
||||
|
||||
public init (keyring: KeyringStruct): void {
|
||||
assert(!hasCalledInitOptions, 'Unable to initialise options more than once');
|
||||
if (hasCalledInitOptions) {
|
||||
throw new Error('Unable to initialise options more than once');
|
||||
}
|
||||
|
||||
obervableAll.subscribe((): void => {
|
||||
this.#allSub = obervableAll.subscribe((): void => {
|
||||
const opts = this.emptyOptions();
|
||||
|
||||
this.addAccounts(keyring, opts);
|
||||
@@ -68,6 +71,12 @@ export class KeyringOption implements KeyringOptionInstance {
|
||||
hasCalledInitOptions = true;
|
||||
}
|
||||
|
||||
public clear (): void {
|
||||
if (this.#allSub) {
|
||||
this.#allSub.unsubscribe();
|
||||
}
|
||||
}
|
||||
|
||||
private linkItems (items: { [index: string]: KeyringSectionOptions }): KeyringSectionOptions {
|
||||
return Object.keys(items).reduce((result, header): KeyringSectionOptions => {
|
||||
const options = items[header];
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { KeyringSectionOption } from './types';
|
||||
import type { KeyringSectionOption } from './types.js';
|
||||
|
||||
import { isUndefined } from '@polkadot/util';
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { KeyringItemType, KeyringStruct } from '../types';
|
||||
import type { KeyringItemType, KeyringStruct } from '../types.js';
|
||||
|
||||
export interface KeyringSectionOption {
|
||||
key: string | null;
|
||||
|
||||
@@ -3,4 +3,4 @@
|
||||
|
||||
// Do not edit, auto-generated by @polkadot/dev
|
||||
|
||||
export const packageInfo = { name: '@polkadot/ui-keyring', path: 'auto', type: 'auto', version: '3.0.1' };
|
||||
export const packageInfo = { name: '@polkadot/ui-keyring', path: 'auto', type: 'auto', version: '3.1.2' };
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { KeyringJson, KeyringStore } from '../types';
|
||||
import type { KeyringJson, KeyringStore } from '../types.js';
|
||||
|
||||
import store from 'store';
|
||||
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { KeyringJson, KeyringStore } from '../types';
|
||||
import type { KeyringJson, KeyringStore } from '../types.js';
|
||||
|
||||
import fs from 'fs';
|
||||
import mkdirp from 'mkdirp';
|
||||
import path from 'path';
|
||||
|
||||
import { assert } from '@polkadot/util';
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
|
||||
// NOTE untested and unused by any known apps, probably broken in various mysterious ways
|
||||
export class FileStore implements KeyringStore {
|
||||
@@ -35,7 +33,9 @@ export class FileStore implements KeyringStore {
|
||||
public get (key: string, fn: (value: KeyringJson) => void): void {
|
||||
const value = this._readKey(key);
|
||||
|
||||
assert(value?.address, `Invalid JSON found for ${key}`);
|
||||
if (!value?.address) {
|
||||
throw new Error(`Invalid JSON found for ${key}`);
|
||||
}
|
||||
|
||||
fn(value);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export { BrowserStore } from './Browser';
|
||||
export { FileStore } from './File';
|
||||
export { BrowserStore } from './Browser.js';
|
||||
export { FileStore } from './File.js';
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
import type { KeyringInstance as BaseKeyringInstance, KeyringOptions as KeyringOptionsBase, KeyringPair, KeyringPair$Json, KeyringPair$Meta } from '@polkadot/keyring/types';
|
||||
import type { EncryptedJson } from '@polkadot/util-crypto/json/types';
|
||||
import type { KeypairType } from '@polkadot/util-crypto/types';
|
||||
import type { AddressSubject, SingleAddress } from './observable/types';
|
||||
import type { AddressSubject, SingleAddress } from './observable/types.js';
|
||||
|
||||
export interface ContractMeta {
|
||||
abi: string;
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
{
|
||||
"author": "Jaco Greeff <jacogr@gmail.com>",
|
||||
"bugs": "https://github.com/polkadot-js/ui/issues",
|
||||
"contributors": [],
|
||||
"description": "Manages app settings",
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
},
|
||||
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-settings#readme",
|
||||
"license": "Apache-2.0",
|
||||
"maintainers": [],
|
||||
"name": "@polkadot/ui-settings",
|
||||
"repository": {
|
||||
"directory": "packages/ui-settings",
|
||||
@@ -17,11 +18,11 @@
|
||||
"./detectPackage.cjs"
|
||||
],
|
||||
"type": "module",
|
||||
"version": "3.0.1",
|
||||
"version": "3.1.2",
|
||||
"main": "index.js",
|
||||
"dependencies": {
|
||||
"@polkadot/networks": "^11.0.1",
|
||||
"@polkadot/util": "^11.0.1",
|
||||
"@polkadot/networks": "^11.1.2",
|
||||
"@polkadot/util": "^11.1.2",
|
||||
"eventemitter3": "^4.0.7",
|
||||
"store": "^2.0.12",
|
||||
"tslib": "^2.5.0"
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { Endpoint, EndpointType, Option, SettingsStruct } from './types';
|
||||
import type { Endpoint, EndpointType, Option, SettingsStruct } from './types.js';
|
||||
|
||||
import EventEmitter from 'eventemitter3';
|
||||
import store from 'store';
|
||||
|
||||
import { hasProcess, isUndefined } from '@polkadot/util';
|
||||
|
||||
import { CAMERA, CAMERA_DEFAULT, CRYPTOS, CRYPTOS_ETH, CRYPTOS_LEDGER, ENDPOINT_DEFAULT, ENDPOINTS, ICON_DEFAULT, ICONS, LANGUAGE_DEFAULT, LEDGER_CONN, LEDGER_CONN_DEFAULT, LOCKING, LOCKING_DEFAULT, METADATA_UP, METADATA_UP_DEFAULT, NOTIFICATION_DEFAULT, PREFIX_DEFAULT, PREFIXES, STORAGE, STORAGE_DEFAULT, UIMODE_DEFAULT, UIMODES, UITHEME_DEFAULT, UITHEMES } from './defaults';
|
||||
import { CAMERA, CAMERA_DEFAULT, CRYPTOS, CRYPTOS_ETH, CRYPTOS_LEDGER, ENDPOINT_DEFAULT, ENDPOINTS, ICON_DEFAULT, ICONS, LANGUAGE_DEFAULT, LEDGER_CONN, LEDGER_CONN_DEFAULT, LOCKING, LOCKING_DEFAULT, METADATA_UP, METADATA_UP_DEFAULT, NOTIFICATION_DEFAULT, PREFIX_DEFAULT, PREFIXES, STORAGE, STORAGE_DEFAULT, UIMODE_DEFAULT, UIMODES, UITHEME_DEFAULT, UITHEMES } from './defaults/index.js';
|
||||
|
||||
type ChangeCallback = (settings: SettingsStruct) => void;
|
||||
type OnTypes = 'change';
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import { Settings, settings } from './Settings';
|
||||
import { Settings, settings } from './Settings.js';
|
||||
|
||||
export { ENDPOINT_DEFAULT, ICON_DEFAULT, ICON_DEFAULT_HOST, LANGUAGE_DEFAULT, LOCKING_DEFAULT, PREFIX_DEFAULT, UIMODE_DEFAULT, UITHEME_DEFAULT } from './defaults';
|
||||
export { chains } from './defaults/chains';
|
||||
export { packageInfo } from './packageInfo';
|
||||
export { ENDPOINT_DEFAULT, ICON_DEFAULT, ICON_DEFAULT_HOST, LANGUAGE_DEFAULT, LOCKING_DEFAULT, PREFIX_DEFAULT, UIMODE_DEFAULT, UITHEME_DEFAULT } from './defaults/index.js';
|
||||
export { chains } from './defaults/chains.js';
|
||||
export { packageInfo } from './packageInfo.js';
|
||||
|
||||
export { settings, Settings };
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { Option } from '../types';
|
||||
import type { Option } from '../types.js';
|
||||
|
||||
export const CRYPTOS: Option[] = [
|
||||
{
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { Option } from '../types';
|
||||
import type { Option } from '../types.js';
|
||||
|
||||
export const ENDPOINTS: Option[] = [{
|
||||
info: 'local',
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { Option } from '../types';
|
||||
import type { Option } from '../types.js';
|
||||
|
||||
import { CRYPTOS, CRYPTOS_ETH, CRYPTOS_LEDGER } from './crypto';
|
||||
import { ENDPOINT_DEFAULT, ENDPOINTS } from './endpoints';
|
||||
import { LEDGER_CONN, LEDGER_CONN_DEFAULT } from './ledger';
|
||||
import { PREFIX_DEFAULT, PREFIXES } from './ss58';
|
||||
import { ICON_DEFAULT, ICON_DEFAULT_HOST, ICONS, NOTIFICATION_DEFAULT, UIMODE_DEFAULT, UIMODES, UITHEME_DEFAULT, UITHEMES } from './ui';
|
||||
import { CRYPTOS, CRYPTOS_ETH, CRYPTOS_LEDGER } from './crypto.js';
|
||||
import { ENDPOINT_DEFAULT, ENDPOINTS } from './endpoints.js';
|
||||
import { LEDGER_CONN, LEDGER_CONN_DEFAULT } from './ledger.js';
|
||||
import { PREFIX_DEFAULT, PREFIXES } from './ss58.js';
|
||||
import { ICON_DEFAULT, ICON_DEFAULT_HOST, ICONS, NOTIFICATION_DEFAULT, UIMODE_DEFAULT, UIMODES, UITHEME_DEFAULT, UITHEMES } from './ui.js';
|
||||
|
||||
const CAMERA_DEFAULT = 'off';
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { Option } from '../types';
|
||||
import type { Option } from '../types.js';
|
||||
|
||||
export const LEDGER_CONN_DEFAULT = 'none';
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { Option } from '../types';
|
||||
import type { Option } from '../types.js';
|
||||
|
||||
import { availableNetworks } from '@polkadot/networks';
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { Option } from '../types';
|
||||
import type { Option } from '../types.js';
|
||||
|
||||
import { isPolkadot } from './type';
|
||||
import { isPolkadot } from './type.js';
|
||||
|
||||
const LANGUAGE_DEFAULT = 'default';
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
import { detectPackage } from '@polkadot/util';
|
||||
|
||||
import others from './detectOther';
|
||||
import { packageInfo } from './packageInfo';
|
||||
import others from './detectOther.js';
|
||||
import { packageInfo } from './packageInfo.js';
|
||||
|
||||
detectPackage(packageInfo, null, others);
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import { settings } from './bundle';
|
||||
import { settings } from './bundle.js';
|
||||
|
||||
export * from './bundle';
|
||||
export * from './bundle.js';
|
||||
|
||||
export default settings;
|
||||
|
||||
@@ -3,4 +3,4 @@
|
||||
|
||||
// Do not edit, auto-generated by @polkadot/dev
|
||||
|
||||
export const packageInfo = { name: '@polkadot/ui-settings', path: 'auto', type: 'auto', version: '3.0.1' };
|
||||
export const packageInfo = { name: '@polkadot/ui-settings', path: 'auto', type: 'auto', version: '3.1.2' };
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
{
|
||||
"author": "Jaco Greeff <jacogr@gmail.com>",
|
||||
"bugs": "https://github.com/polkadot-js/ui/issues",
|
||||
"contributors": [],
|
||||
"description": "Shared logic that is usable accross all frameworks-specific areas",
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
},
|
||||
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-shared#readme",
|
||||
"license": "Apache-2.0",
|
||||
"maintainers": [],
|
||||
"name": "@polkadot/ui-shared",
|
||||
"repository": {
|
||||
"directory": "packages/ui-shared",
|
||||
@@ -17,16 +18,15 @@
|
||||
"./detectPackage.cjs"
|
||||
],
|
||||
"type": "module",
|
||||
"version": "3.0.1",
|
||||
"version": "3.1.2",
|
||||
"main": "index.js",
|
||||
"dependencies": {
|
||||
"color": "^3.2.1",
|
||||
"colord": "^2.9.3",
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@polkadot/util": "^11.0.1",
|
||||
"@polkadot/util-crypto": "^11.0.1",
|
||||
"@types/color": "^3.0.3",
|
||||
"@polkadot/util": "^11.1.2",
|
||||
"@polkadot/util-crypto": "^11.1.2",
|
||||
"@types/xmlserializer": "^0.6.3",
|
||||
"xmlserializer": "^0.6.1"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// Copyright 2018-2023 @polkadot/ui-shared authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export * from './icons';
|
||||
export { packageInfo } from './packageInfo';
|
||||
export * from './icons/index.js';
|
||||
export { packageInfo } from './packageInfo.js';
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
import { detectPackage } from '@polkadot/util';
|
||||
|
||||
import others from './detectOther';
|
||||
import { packageInfo } from './packageInfo';
|
||||
import others from './detectOther.js';
|
||||
import { packageInfo } from './packageInfo.js';
|
||||
|
||||
detectPackage(packageInfo, null, others);
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// eslint-disable-next-line spaced-comment
|
||||
/// <reference types="@polkadot/dev/node/test/node" />
|
||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||
|
||||
import type { ColorGen } from './types';
|
||||
import type { ColorGen } from './types.js';
|
||||
|
||||
import { colors as newColors } from './colors';
|
||||
import { seeder as newSeeder } from './seeder';
|
||||
import { colors as newColors } from './colors.js';
|
||||
import { seeder as newSeeder } from './seeder.js';
|
||||
|
||||
describe('colors', (): void => {
|
||||
let colors: ColorGen;
|
||||
@@ -20,8 +19,9 @@ describe('colors', (): void => {
|
||||
expect(
|
||||
colors()
|
||||
).toEqual(
|
||||
// 'hsla(166.70000000000005, 98.6%, 27.6%, 0.9)'
|
||||
'hsl(37.19999999999999, 100%, 54.9%)'
|
||||
// with original color ...
|
||||
// 'hsl(37.19999999999999, 100%, 54.9%)'
|
||||
'hsl(37, 100%, 55%)'
|
||||
);
|
||||
});
|
||||
|
||||
@@ -29,17 +29,22 @@ describe('colors', (): void => {
|
||||
expect(
|
||||
colors(0.5)
|
||||
).toEqual(
|
||||
// 'hsla(166.70000000000005, 98.6%, 27.6%, 0.5)'
|
||||
'hsla(37.19999999999999, 100%, 54.9%, 0.5)'
|
||||
// with original color ...
|
||||
// 'hsla(37.19999999999999, 100%, 54.9%, 0.5)'
|
||||
'hsla(37, 100%, 55%, 0.5)'
|
||||
);
|
||||
});
|
||||
|
||||
it('rolates colors', (): void => {
|
||||
colors();
|
||||
const orig = colors();
|
||||
|
||||
expect(
|
||||
orig
|
||||
).toEqual('hsl(37, 100%, 55%)');
|
||||
|
||||
expect(
|
||||
colors()
|
||||
).not.toEqual('hsla(166.70000000000005, 98.6%, 27.6%, 0.9)');
|
||||
).not.toEqual(orig);
|
||||
});
|
||||
|
||||
it('works in edge conditions (0xff)', (): void => {
|
||||
@@ -54,8 +59,9 @@ describe('colors', (): void => {
|
||||
expect(
|
||||
colors()
|
||||
).toEqual(
|
||||
// 'hsla(234.39999999999998, 75.9%, 51.2%, 0.9)'
|
||||
'hsl(15, 0%, 100%)'
|
||||
// with original color ...
|
||||
// 'hsl(15, 0%, 100%)'
|
||||
'hsl(0, 0%, 100%)'
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -3,18 +3,19 @@
|
||||
|
||||
// Copyright 2016 Dan Finlay
|
||||
|
||||
import type { ColorGen, Seeder } from './types';
|
||||
import type { Colord } from 'colord';
|
||||
import type { ColorGen, Seeder } from './types.js';
|
||||
|
||||
import Color from 'color';
|
||||
import { colord } from 'colord';
|
||||
|
||||
import { COLORS } from './defaults';
|
||||
import { COLORS } from './defaults.js';
|
||||
|
||||
const WOBBLE = 30;
|
||||
|
||||
export function colors (seeder: Seeder): ColorGen {
|
||||
const amount = (seeder() * WOBBLE) - (WOBBLE / 2);
|
||||
const all = COLORS.map((hex): Color =>
|
||||
Color(hex).rotate(amount)
|
||||
const all = COLORS.map((hex): Colord =>
|
||||
colord(hex).rotate(amount)
|
||||
);
|
||||
|
||||
return (alpha = 1): string => {
|
||||
@@ -22,6 +23,6 @@ export function colors (seeder: Seeder): ColorGen {
|
||||
|
||||
return all.splice(index, 1)[0]
|
||||
.alpha(alpha)
|
||||
.string();
|
||||
.toHslString();
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// eslint-disable-next-line spaced-comment
|
||||
/// <reference types="@polkadot/dev/node/test/node" />
|
||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||
|
||||
import { container } from './container';
|
||||
import { container } from './container.js';
|
||||
|
||||
describe('container', (): void => {
|
||||
it('applies default styles', (): void => {
|
||||
|
||||
@@ -3,14 +3,9 @@
|
||||
|
||||
// Copyright 2016 Dan Finlay
|
||||
|
||||
const COLORS: string[] = [
|
||||
export const COLORS: readonly string[] = [
|
||||
// https://sashat.me/2017/01/11/list-of-20-simple-distinct-colors/
|
||||
'#ffe119', '#4363d8', '#f58231', '#fabebe', '#e6beff', '#800000', '#000075', '#a9a9a9', '#ffffff', '#000000'
|
||||
];
|
||||
] as const;
|
||||
|
||||
const SHAPE_COUNT = 5;
|
||||
|
||||
export {
|
||||
COLORS,
|
||||
SHAPE_COUNT
|
||||
};
|
||||
export const SHAPE_COUNT = 5 as const;
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
import { isNull } from '@polkadot/util';
|
||||
import { encodeAddress, randomAsU8a } from '@polkadot/util-crypto';
|
||||
|
||||
import { beachballIcon } from '.';
|
||||
import { beachballIcon } from './index.js';
|
||||
|
||||
const element = document.getElementById('demo');
|
||||
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// eslint-disable-next-line spaced-comment
|
||||
/// <reference types="@polkadot/dev/node/test/node" />
|
||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||
|
||||
import xmlserializer from 'xmlserializer';
|
||||
|
||||
import { beachballIcon } from '.';
|
||||
import { beachballIcon } from './index.js';
|
||||
|
||||
describe('identicon', (): void => {
|
||||
it('generates a basic [0,..,0] identicon', (): void => {
|
||||
@@ -16,7 +15,9 @@ describe('identicon', (): void => {
|
||||
beachballIcon(new Uint8Array(32), { isAlternative: false, size: 256 }) as any
|
||||
)
|
||||
).toEqual(
|
||||
'<div xmlns="http://www.w3.org/1999/xhtml" class="" style="background: white; border-radius: 128px; display: inline-block; height: 256px; margin: 0px; overflow: hidden; padding: 0px; width: 256px;"><div class="" style="background: rgb(20, 20, 20); border-radius: 128px; display: inline-block; height: 256px; margin: 0px; overflow: hidden; padding: 0px; width: 256px;"><svg xmlns="http://www.w3.org/2000/svg" x="0" y="0" width="256" height="256"><circle cx="128" cy="140.8" r="128" fill="hsl(212.10000000000002, 65.6%, 55.5%)"/><circle cx="128" cy="153.6" r="102.4" fill="hsl(9.800000000000011, 90.7%, 57.6%)"/><circle cx="128" cy="166.4" r="76.8" fill="hsl(345, 85.7%, 86.3%)"/><circle cx="128" cy="179.2" r="51.2" fill="hsl(261.9, 100%, 87.3%)"/><circle cx="128" cy="192" r="25.6" fill="hsl(345, 100%, 25.1%)"/></svg></div></div>'
|
||||
// with original color ...
|
||||
// '<div xmlns="http://www.w3.org/1999/xhtml" class="" style="background: white; border-radius: 128px; display: inline-block; height: 256px; margin: 0px; overflow: hidden; padding: 0px; width: 256px;"><div class="" style="background: rgb(20, 20, 20); border-radius: 128px; display: inline-block; height: 256px; margin: 0px; overflow: hidden; padding: 0px; width: 256px;"><svg xmlns="http://www.w3.org/2000/svg" x="0" y="0" width="256" height="256"><circle cx="128" cy="140.8" r="128" fill="hsl(212.10000000000002, 65.6%, 55.5%)"/><circle cx="128" cy="153.6" r="102.4" fill="hsl(9.800000000000011, 90.7%, 57.6%)"/><circle cx="128" cy="166.4" r="76.8" fill="hsl(345, 85.7%, 86.3%)"/><circle cx="128" cy="179.2" r="51.2" fill="hsl(261.9, 100%, 87.3%)"/><circle cx="128" cy="192" r="25.6" fill="hsl(345, 100%, 25.1%)"/></svg></div></div>'
|
||||
'<div xmlns="http://www.w3.org/1999/xhtml" class="" style="background: white; border-radius: 128px; display: inline-block; height: 256px; margin: 0px; overflow: hidden; padding: 0px; width: 256px;"><div class="" style="background: rgb(26, 26, 26); border-radius: 128px; display: inline-block; height: 256px; margin: 0px; overflow: hidden; padding: 0px; width: 256px;"><svg xmlns="http://www.w3.org/2000/svg" x="0" y="0" width="256" height="256"><circle cx="128" cy="140.8" r="128" fill="hsl(212, 66%, 55%)"/><circle cx="128" cy="153.6" r="102.4" fill="hsl(10, 91%, 58%)"/><circle cx="128" cy="166.4" r="76.8" fill="hsl(345, 86%, 86%)"/><circle cx="128" cy="179.2" r="51.2" fill="hsl(262, 100%, 87%)"/><circle cx="128" cy="192" r="25.6" fill="hsl(345, 100%, 25%)"/></svg></div></div>'
|
||||
);
|
||||
});
|
||||
|
||||
@@ -27,7 +28,9 @@ describe('identicon', (): void => {
|
||||
beachballIcon(new Uint8Array(32), { isAlternative: false, size: 100 }, 'testClass', { display: 'block' }) as any
|
||||
)
|
||||
).toEqual(
|
||||
'<div xmlns="http://www.w3.org/1999/xhtml" class="testClass" style="background: white; border-radius: 50px; display: block; height: 100px; margin: 0px; overflow: hidden; padding: 0px; width: 100px;"><div class="" style="background: rgb(20, 20, 20); border-radius: 50px; display: inline-block; height: 100px; margin: 0px; overflow: hidden; padding: 0px; width: 100px;"><svg xmlns="http://www.w3.org/2000/svg" x="0" y="0" width="100" height="100"><circle cx="50" cy="55" r="50" fill="hsl(212.10000000000002, 65.6%, 55.5%)"/><circle cx="50" cy="60" r="40" fill="hsl(9.800000000000011, 90.7%, 57.6%)"/><circle cx="50" cy="65" r="30" fill="hsl(345, 85.7%, 86.3%)"/><circle cx="50" cy="70" r="20" fill="hsl(261.9, 100%, 87.3%)"/><circle cx="50" cy="75" r="10" fill="hsl(345, 100%, 25.1%)"/></svg></div></div>'
|
||||
// with original color ...
|
||||
// '<div xmlns="http://www.w3.org/1999/xhtml" class="testClass" style="background: white; border-radius: 50px; display: block; height: 100px; margin: 0px; overflow: hidden; padding: 0px; width: 100px;"><div class="" style="background: rgb(20, 20, 20); border-radius: 50px; display: inline-block; height: 100px; margin: 0px; overflow: hidden; padding: 0px; width: 100px;"><svg xmlns="http://www.w3.org/2000/svg" x="0" y="0" width="100" height="100"><circle cx="50" cy="55" r="50" fill="hsl(212.10000000000002, 65.6%, 55.5%)"/><circle cx="50" cy="60" r="40" fill="hsl(9.800000000000011, 90.7%, 57.6%)"/><circle cx="50" cy="65" r="30" fill="hsl(345, 85.7%, 86.3%)"/><circle cx="50" cy="70" r="20" fill="hsl(261.9, 100%, 87.3%)"/><circle cx="50" cy="75" r="10" fill="hsl(345, 100%, 25.1%)"/></svg></div></div>'
|
||||
'<div xmlns="http://www.w3.org/1999/xhtml" class="testClass" style="background: white; border-radius: 50px; display: block; height: 100px; margin: 0px; overflow: hidden; padding: 0px; width: 100px;"><div class="" style="background: rgb(26, 26, 26); border-radius: 50px; display: inline-block; height: 100px; margin: 0px; overflow: hidden; padding: 0px; width: 100px;"><svg xmlns="http://www.w3.org/2000/svg" x="0" y="0" width="100" height="100"><circle cx="50" cy="55" r="50" fill="hsl(212, 66%, 55%)"/><circle cx="50" cy="60" r="40" fill="hsl(10, 91%, 58%)"/><circle cx="50" cy="65" r="30" fill="hsl(345, 86%, 86%)"/><circle cx="50" cy="70" r="20" fill="hsl(262, 100%, 87%)"/><circle cx="50" cy="75" r="10" fill="hsl(345, 100%, 25%)"/></svg></div></div>'
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -3,14 +3,14 @@
|
||||
|
||||
// Copyright 2016 Dan Finlay
|
||||
|
||||
import type { Options } from '../types';
|
||||
import type { Options } from '../types.js';
|
||||
|
||||
import { circle } from './shape/circle';
|
||||
import { element } from './svg/element';
|
||||
import { colors } from './colors';
|
||||
import { container as newContainer } from './container';
|
||||
import { SHAPE_COUNT } from './defaults';
|
||||
import { seeder as newSeeder } from './seeder';
|
||||
import { circle } from './shape/circle.js';
|
||||
import { element } from './svg/element.js';
|
||||
import { colors } from './colors.js';
|
||||
import { container as newContainer } from './container.js';
|
||||
import { SHAPE_COUNT } from './defaults.js';
|
||||
import { seeder as newSeeder } from './seeder.js';
|
||||
|
||||
export function beachballIcon (seed: string | Uint8Array, { size = 256 }: Options, className = '', style?: { [index: string]: string }): HTMLElement {
|
||||
const seeder = newSeeder(seed);
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// eslint-disable-next-line spaced-comment
|
||||
/// <reference types="@polkadot/dev/node/test/node" />
|
||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||
|
||||
import type { Seeder } from './types';
|
||||
import type { Seeder } from './types.js';
|
||||
|
||||
import { seeder as newSeeder } from './seeder';
|
||||
import { seeder as newSeeder } from './seeder.js';
|
||||
|
||||
describe('seeder', (): void => {
|
||||
let seeder: Seeder;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { Seeder } from './types';
|
||||
import type { Seeder } from './types.js';
|
||||
|
||||
import { isU8a, stringToU8a } from '@polkadot/util';
|
||||
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// eslint-disable-next-line spaced-comment
|
||||
/// <reference types="@polkadot/dev/node/test/node" />
|
||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||
|
||||
import xmlserializer from 'xmlserializer';
|
||||
|
||||
import { seeder } from '../seeder';
|
||||
import { circle } from './circle';
|
||||
import { seeder } from '../seeder.js';
|
||||
import { circle } from './circle.js';
|
||||
|
||||
describe('circle', (): void => {
|
||||
it('creates a circle shape', (): void => {
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
|
||||
// Copyright 2016 Dan Finlay
|
||||
|
||||
import type { Seeder } from '../types';
|
||||
import type { Seeder } from '../types.js';
|
||||
|
||||
import { SHAPE_COUNT } from '../defaults';
|
||||
import { circle as newCircle } from '../svg/circle';
|
||||
import { SHAPE_COUNT } from '../defaults.js';
|
||||
import { circle as newCircle } from '../svg/circle.js';
|
||||
|
||||
export function circle (seeder: Seeder, fill: string, diameter: number, count: number): Element {
|
||||
const center = diameter / 2;
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
|
||||
// Copyright 2016 Dan Finlay
|
||||
|
||||
import type { Seeder } from '../types';
|
||||
import type { Seeder } from '../types.js';
|
||||
|
||||
import { SHAPE_COUNT } from '../defaults';
|
||||
import { rect as newRect } from '../svg/rect';
|
||||
import { SHAPE_COUNT } from '../defaults.js';
|
||||
import { rect as newRect } from '../svg/rect.js';
|
||||
|
||||
export function square (seeder: Seeder, fill: string, diameter: number, count: number): Element {
|
||||
const center = diameter / 2;
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// eslint-disable-next-line spaced-comment
|
||||
/// <reference types="@polkadot/dev/node/test/node" />
|
||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||
|
||||
import xs from 'xmlserializer';
|
||||
|
||||
import { circle } from './circle';
|
||||
import { circle } from './circle.js';
|
||||
|
||||
describe('circle', (): void => {
|
||||
it('creates a basic SVG circle element', (): void => {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import { svg } from './svg';
|
||||
import { svg } from './svg.js';
|
||||
|
||||
export function circle (r: number, cx: number, cy: number): Element {
|
||||
const elem = svg('circle');
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// eslint-disable-next-line spaced-comment
|
||||
/// <reference types="@polkadot/dev/node/test/node" />
|
||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||
|
||||
import xs from 'xmlserializer';
|
||||
|
||||
import { element } from './element';
|
||||
import { element } from './element.js';
|
||||
|
||||
describe('element', (): void => {
|
||||
it('creates a basic SVG element', (): void => {
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
// Copyright 2016 Dan Finlay
|
||||
|
||||
import { svg } from './svg';
|
||||
import { svg } from './svg.js';
|
||||
|
||||
export function element (size: number, type = 'svg', x = 0, y = 0): Element {
|
||||
const elem = svg(type);
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// eslint-disable-next-line spaced-comment
|
||||
/// <reference types="@polkadot/dev/node/test/node" />
|
||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||
|
||||
import xs from 'xmlserializer';
|
||||
|
||||
import { rect } from './rect';
|
||||
import { rect } from './rect.js';
|
||||
|
||||
describe('rect', (): void => {
|
||||
it('creates a basic SVG rect element', (): void => {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import { element } from './element';
|
||||
import { element } from './element.js';
|
||||
|
||||
export function rect (size: number): Element {
|
||||
const elem = element(size, 'rect');
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// eslint-disable-next-line spaced-comment
|
||||
/// <reference types="@polkadot/dev/node/test/node" />
|
||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||
|
||||
import xs from 'xmlserializer';
|
||||
|
||||
import { svg } from './svg';
|
||||
import { svg } from './svg.js';
|
||||
|
||||
describe('svg', (): void => {
|
||||
it('creates a basic SVG element', (): void => {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// Copyright 2018-2023 @polkadot/ui-shared authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export { beachballIcon } from './beachball';
|
||||
export { polkadotIcon } from './polkadot';
|
||||
export { beachballIcon } from './beachball/index.js';
|
||||
export { polkadotIcon } from './polkadot.js';
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
// Copyright 2018-2023 @polkadot/ui-shared authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// eslint-disable-next-line spaced-comment
|
||||
/// <reference types="@polkadot/dev/node/test/node" />
|
||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||
|
||||
import { polkadotIcon } from './polkadot';
|
||||
import { polkadotIcon } from './polkadot.js';
|
||||
|
||||
describe('polkadotIcon', (): void => {
|
||||
it('generates the correct points from known', (): void => {
|
||||
|
||||
@@ -7,33 +7,32 @@
|
||||
//
|
||||
// https://github.com/paritytech/oo7/blob/251ba2b7c45503b68eab4320c270b5afa9bccb60/packages/polkadot-identicon/src/index.jsx
|
||||
|
||||
import type { Circle, Options } from './types';
|
||||
import type { Circle, Options } from './types.js';
|
||||
|
||||
import { blake2AsU8a, decodeAddress } from '@polkadot/util-crypto';
|
||||
|
||||
interface Scheme {
|
||||
freq: number;
|
||||
colors: number[];
|
||||
colors: readonly number[];
|
||||
}
|
||||
|
||||
const blake2 = (value: Uint8Array): Uint8Array =>
|
||||
blake2AsU8a(value, 512);
|
||||
|
||||
const S = 64;
|
||||
const C = S / 2;
|
||||
const Z = S / 64 * 5;
|
||||
|
||||
/* eslint-disable sort-keys */
|
||||
const SCHEMA: { [index: string]: Scheme } = {
|
||||
target: { colors: [0, 28, 0, 0, 28, 0, 0, 28, 0, 0, 28, 0, 0, 28, 0, 0, 28, 0, 1], freq: 1 },
|
||||
cube: { colors: [0, 1, 3, 2, 4, 3, 0, 1, 3, 2, 4, 3, 0, 1, 3, 2, 4, 3, 5], freq: 20 },
|
||||
quazar: { colors: [1, 2, 3, 1, 2, 4, 5, 5, 4, 1, 2, 3, 1, 2, 4, 5, 5, 4, 0], freq: 16 },
|
||||
flower: { colors: [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 3], freq: 32 },
|
||||
cyclic: { colors: [0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 6], freq: 32 },
|
||||
vmirror: { colors: [0, 1, 2, 3, 4, 5, 3, 4, 2, 0, 1, 6, 7, 8, 9, 7, 8, 6, 10], freq: 128 },
|
||||
hmirror: { colors: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 8, 6, 7, 5, 3, 4, 2, 11], freq: 128 }
|
||||
};
|
||||
/* eslint-enable sort-keys */
|
||||
const SCHEMES: readonly Scheme[] = [
|
||||
/* target */ { colors: [0, 28, 0, 0, 28, 0, 0, 28, 0, 0, 28, 0, 0, 28, 0, 0, 28, 0, 1], freq: 1 },
|
||||
/* cube */ { colors: [0, 1, 3, 2, 4, 3, 0, 1, 3, 2, 4, 3, 0, 1, 3, 2, 4, 3, 5], freq: 20 },
|
||||
/* quazar */ { colors: [1, 2, 3, 1, 2, 4, 5, 5, 4, 1, 2, 3, 1, 2, 4, 5, 5, 4, 0], freq: 16 },
|
||||
/* flower */ { colors: [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 3], freq: 32 },
|
||||
/* cyclic */ { colors: [0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 6], freq: 32 },
|
||||
/* vmirror */ { colors: [0, 1, 2, 3, 4, 5, 3, 4, 2, 0, 1, 6, 7, 8, 9, 7, 8, 6, 10], freq: 128 },
|
||||
/* hmirror */ { colors: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 8, 6, 7, 5, 3, 4, 2, 11], freq: 128 }
|
||||
];
|
||||
|
||||
const SCHEMES_TOTAL = SCHEMES
|
||||
.map((s): number => s.freq)
|
||||
.reduce((a, b): number => a + b);
|
||||
|
||||
const OUTER_CIRCLE: Circle = {
|
||||
cx: C,
|
||||
@@ -57,7 +56,7 @@ function getRotation (isSixPoint: boolean): { r: number; ro2: number; r3o4: numb
|
||||
return { r, r3o4, ro2, ro4, rroot3o2, rroot3o4 };
|
||||
}
|
||||
|
||||
function getCircleXY (isSixPoint: boolean): [number, number][] {
|
||||
function getCircleXY (isSixPoint = false): [number, number][] {
|
||||
const { r, r3o4, ro2, ro4, rroot3o2, rroot3o4 } = getRotation(isSixPoint);
|
||||
|
||||
return [
|
||||
@@ -85,7 +84,7 @@ function getCircleXY (isSixPoint: boolean): [number, number][] {
|
||||
|
||||
function findScheme (d: number): Scheme {
|
||||
let cum = 0;
|
||||
const schema = Object.values(SCHEMA).find((schema): boolean => {
|
||||
const schema = SCHEMES.find((schema): boolean => {
|
||||
cum += schema.freq;
|
||||
|
||||
return d < cum;
|
||||
@@ -100,16 +99,15 @@ function findScheme (d: number): Scheme {
|
||||
|
||||
function addressToId (address: string): Uint8Array {
|
||||
if (!zeroHash.length) {
|
||||
zeroHash = blake2(new Uint8Array(32));
|
||||
zeroHash = blake2AsU8a(new Uint8Array(32), 512);
|
||||
}
|
||||
|
||||
return blake2(decodeAddress(address)).map((x, i) => (x + 256 - zeroHash[i]) % 256);
|
||||
return blake2AsU8a(decodeAddress(address), 512).map((x, i) => (x + 256 - zeroHash[i]) % 256);
|
||||
}
|
||||
|
||||
function getColors (address: string): string[] {
|
||||
const total = Object.values(SCHEMA).map((s): number => s.freq).reduce((a, b): number => a + b);
|
||||
const id = addressToId(address);
|
||||
const d = Math.floor((id[30] + id[31] * 256) % total);
|
||||
const d = Math.floor((id[30] + id[31] * 256) % SCHEMES_TOTAL);
|
||||
const rot = (id[28] % 6) * 3;
|
||||
const sat = (Math.floor(id[29] * 70 / 256 + 26) % 80) + 30;
|
||||
const scheme = findScheme(d);
|
||||
@@ -134,7 +132,7 @@ function getColors (address: string): string[] {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description Generate a array of the circles that make up an identicon
|
||||
* @description Generates an array of the circles that make up an identicon
|
||||
*/
|
||||
export function polkadotIcon (address: string, { isAlternative }: Options): Circle[] {
|
||||
const xy = getCircleXY(isAlternative);
|
||||
|
||||
@@ -9,6 +9,6 @@ export interface Circle {
|
||||
}
|
||||
|
||||
export interface Options {
|
||||
isAlternative: boolean;
|
||||
isAlternative?: boolean;
|
||||
size?: number;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Copyright 2018-2023 @polkadot/ui-shared authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import './detectPackage';
|
||||
import './detectPackage.js';
|
||||
|
||||
export * from './bundle';
|
||||
export * from './bundle.js';
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user