Browse Source

Fetch and display address balance & transactions

master
meriadec 7 years ago
parent
commit
ee01b05c2a
No known key found for this signature in database GPG Key ID: 1D2FC2305E2CB399
  1. 1
      package.json
  2. 29
      src/actions/accounts.js
  3. 53
      src/components/AccountPage.js
  4. 40
      src/reducers/accounts.js
  5. 3
      src/renderer/index.js
  6. 20
      src/types/common.js
  7. 163
      yarn.lock

1
package.json

@ -46,6 +46,7 @@
"history": "^4.7.2",
"i18next": "^10.2.2",
"i18next-node-fs-backend": "^1.0.0",
"ledger-wallet-common": "github:LedgerHQ/ledger-wallet-common",
"lodash": "^4.17.4",
"object-path": "^0.11.4",
"react": "^16.2.0",

29
src/actions/accounts.js

@ -1,8 +1,17 @@
// @flow
import values from 'lodash/values'
import { createAction } from 'redux-actions'
import type { Dispatch } from 'redux'
import db from 'helpers/db'
import type { Account } from 'types/common'
import type { State } from 'reducers'
import { getAccounts } from 'reducers/accounts'
import { getAddressData } from 'helpers/btc'
export type AddAccount = Account => { type: string, payload: Account }
export const addAccount: AddAccount = payload => ({
@ -15,3 +24,23 @@ export const fetchAccounts: FetchAccounts = () => ({
type: 'FETCH_ACCOUNTS',
payload: db('accounts'),
})
const setAccountData = createAction('SET_ACCOUNT_DATA', (accountID, data) => ({ accountID, data }))
export const syncAccount: Function = account => async (dispatch: Dispatch<*>) => {
const { address } = account
const addressData = await getAddressData(address)
dispatch(setAccountData(account.id, addressData))
}
export const syncAccounts = () => async (dispatch: Dispatch<*>, getState: () => State) => {
const state = getState()
const accountsMap = getAccounts(state)
const accounts = values(accountsMap)
console.log(`syncing accounts...`)
await Promise.all(accounts.map(account => dispatch(syncAccount(account))))
console.log(`all accounts synced`)
}

53
src/components/AccountPage.js

@ -1,33 +1,70 @@
// @flow
import React, { PureComponent } from 'react'
import React, { PureComponent, Fragment } from 'react'
import { connect } from 'react-redux'
import { formatCurrencyUnit } from 'ledger-wallet-common/lib/data/currency'
import type { MapStateToProps } from 'react-redux'
import type { Account } from 'types/common'
import type { Account, AccountData } from 'types/common'
import { getAccountById } from 'reducers/accounts'
import { getAccountById, getAccountData } from 'reducers/accounts'
import Box from 'components/base/Box'
import Box, { Card } from 'components/base/Box'
import Text from 'components/base/Text'
type Props = {
account: Account,
accountData: AccountData,
}
const mapStateToProps: MapStateToProps<*, *, *> = (state, props) => ({
account: getAccountById(state, props.match.params.id),
accountData: getAccountData(state, props.match.params.id),
})
function formatBTC(v) {
return formatCurrencyUnit(
{
name: 'bitcoin',
code: 'BTC',
symbol: 'b',
magnitude: 8,
},
v,
true,
true,
)
}
class AccountPage extends PureComponent<Props> {
render() {
const { account } = this.props
const { account, accountData } = this.props
return (
<Box>
<Box>{'account page'}</Box>
<Box p={3} flow={3}>
<Box>
{account.name} - {account.address}
<Text fontSize={4}>{`${account.name} account`}</Text>
</Box>
{accountData && (
<Fragment>
<Box horizontal flow={3}>
<Box flex={1}>
<Card title="Balance">{formatBTC(accountData.balance)}</Card>
</Box>
<Box flex={1}>
<Card title="Receive" />
</Box>
</Box>
<Card title="Last operations">
{accountData.transactions.map(tr => (
<Box horizontal key={tr.hash}>
<Box grow>{'-'}</Box>
<Box>{formatBTC(tr.balance)}</Box>
</Box>
))}
</Card>
</Fragment>
)}
</Box>
)
}

40
src/reducers/accounts.js

@ -2,16 +2,14 @@
import { handleActions } from 'redux-actions'
import shortid from 'shortid'
import get from 'lodash/get'
import type { Account, Accounts } from 'types/common'
import type { State } from 'reducers'
import type { Account, Accounts, AccountData } from 'types/common'
export type AccountsState = {
accounts: Accounts,
}
export type AccountsState = Accounts
const state: AccountsState = {
accounts: {},
}
const state: AccountsState = {}
const handlers: Object = {
ADD_ACCOUNT: (state: AccountsState, { payload: account }: { payload: Account }) => {
@ -19,27 +17,37 @@ const handlers: Object = {
return {
...state,
accounts: {
...state.accounts,
[id]: {
id,
...account,
},
[id]: {
id,
...account,
},
}
},
FETCH_ACCOUNTS: (state: AccountsState, { payload: accounts }: { payload: Accounts }) => ({
FETCH_ACCOUNTS: (state: AccountsState, { payload: accounts }: { payload: Accounts }) => accounts,
SET_ACCOUNT_DATA: (
state: AccountsState,
{ payload: { accountID, data } }: { payload: { accountID: string, data: AccountData } },
): AccountsState => ({
...state,
accounts,
[accountID]: {
...state[accountID],
data,
},
}),
}
// Selectors
export function getAccounts(state: { accounts: AccountsState }) {
return state.accounts.accounts
return state.accounts
}
export function getAccountById(state: { accounts: AccountsState }, id: string) {
return getAccounts(state)[id]
}
export function getAccountData(state: State, id: string): AccountData | null {
return get(getAccountById(state, id), 'data', null)
}
export default handleActions(handlers, state)

3
src/renderer/index.js

@ -8,7 +8,7 @@ import createHistory from 'history/createHashHistory'
import createStore from 'renderer/createStore'
import events from 'renderer/events'
import { fetchAccounts } from 'actions/accounts'
import { fetchAccounts, syncAccounts } from 'actions/accounts'
import { fetchSettings } from 'actions/settings'
import { isLocked } from 'reducers/application'
@ -28,6 +28,7 @@ const state = store.getState() || {}
if (!isLocked(state)) {
store.dispatch(fetchAccounts())
store.dispatch(syncAccounts())
}
function r(Comp) {

20
src/types/common.js

@ -8,14 +8,32 @@ export type Device = {
export type Devices = Array<Device>
// -------------------- Transactions
export type Transaction = {
balance: number,
hash: string,
}
// -------------------- Accounts
export type AccountData = {
address: string,
balance: number,
transactions: Array<Transaction>,
}
export type Account = {
id: string,
name: string,
type: string,
address: string,
data?: AccountData,
}
export type Accounts = Object
export type Accounts = { [_: string]: Account }
// -------------------- Settings
export type Settings = Object

163
yarn.lock

@ -565,7 +565,7 @@ array.prototype.flatten@^1.1.1:
es-abstract "^1.10.0"
function-bind "^1.1.1"
arrify@^1.0.0:
arrify@^1.0.0, arrify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
@ -731,7 +731,7 @@ babel-eslint@^8.2.1:
eslint-scope "~3.7.1"
eslint-visitor-keys "^1.0.0"
babel-generator@^6.26.0:
babel-generator@^6.18.0, babel-generator@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5"
dependencies:
@ -898,6 +898,13 @@ babel-helpers@^6.24.1:
babel-runtime "^6.22.0"
babel-template "^6.24.1"
babel-jest@^22.0.4:
version "22.1.0"
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.1.0.tgz#7fae6f655fffe77e818a8c2868c754a42463fdfd"
dependencies:
babel-plugin-istanbul "^4.1.5"
babel-preset-jest "^22.1.0"
babel-loader@^7.1.2:
version "7.1.2"
resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.2.tgz#f6cbe122710f1aa2af4d881c6d5b54358ca24126"
@ -938,6 +945,18 @@ babel-plugin-dynamic-import-node@1.1.0:
babel-template "^6.26.0"
babel-types "^6.26.0"
babel-plugin-istanbul@^4.1.5:
version "4.1.5"
resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e"
dependencies:
find-up "^2.1.0"
istanbul-lib-instrument "^1.7.5"
test-exclude "^4.1.1"
babel-plugin-jest-hoist@^22.1.0:
version "22.1.0"
resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.1.0.tgz#c1281dd7887d77a1711dc760468c3b8285dde9ee"
babel-plugin-minify-builtins@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.2.0.tgz#317f824b0907210b6348671bb040ca072e2e0c82"
@ -1069,7 +1088,7 @@ babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0:
version "6.18.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
babel-plugin-syntax-object-rest-spread@^6.8.0:
babel-plugin-syntax-object-rest-spread@^6.13.0, babel-plugin-syntax-object-rest-spread@^6.8.0:
version "6.13.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
@ -1481,6 +1500,13 @@ babel-preset-flow@^6.23.0:
dependencies:
babel-plugin-transform-flow-strip-types "^6.22.0"
babel-preset-jest@^22.1.0:
version "22.1.0"
resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.1.0.tgz#ff4e704102f9642765e2254226050561d8942ec9"
dependencies:
babel-plugin-jest-hoist "^22.1.0"
babel-plugin-syntax-object-rest-spread "^6.13.0"
babel-preset-minify@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/babel-preset-minify/-/babel-preset-minify-0.2.0.tgz#006566552d9b83834472273f306c0131062a0acc"
@ -1592,7 +1618,7 @@ babel-runtime@6.x.x, babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime
core-js "^2.4.0"
regenerator-runtime "^0.11.0"
babel-template@^6.24.1, babel-template@^6.26.0:
babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
dependencies:
@ -1602,7 +1628,7 @@ babel-template@^6.24.1, babel-template@^6.26.0:
babylon "^6.18.0"
lodash "^4.17.4"
babel-traverse@^6.24.1, babel-traverse@^6.26.0:
babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
dependencies:
@ -1616,7 +1642,7 @@ babel-traverse@^6.24.1, babel-traverse@^6.26.0:
invariant "^2.2.2"
lodash "^4.17.4"
babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
dependencies:
@ -1710,12 +1736,28 @@ block-stream@*:
dependencies:
inherits "~2.0.0"
blockchain.info@^2.11.0:
version "2.11.0"
resolved "https://registry.yarnpkg.com/blockchain.info/-/blockchain.info-2.11.0.tgz#63b46617e194164d377e183e6c667d3ef38ad5b6"
dependencies:
q "^1.4.1"
request-promise "^0.4.3"
url-join "0.0.1"
url-parse "^1.0.5"
url-pattern "^0.10.2"
optionalDependencies:
ws "^1.1.2"
bluebird-lst@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.5.tgz#bebc83026b7e92a72871a3dc599e219cbfb002a9"
dependencies:
bluebird "^3.5.1"
bluebird@^2.3:
version "2.11.0"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1"
bluebird@^3.4.7, bluebird@^3.5.0, bluebird@^3.5.1:
version "3.5.1"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
@ -2089,7 +2131,7 @@ chalk@0.5.1:
strip-ansi "^0.3.0"
supports-color "^0.2.0"
chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
dependencies:
@ -5132,6 +5174,22 @@ isstream@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
istanbul-lib-coverage@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da"
istanbul-lib-instrument@^1.7.5:
version "1.9.1"
resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e"
dependencies:
babel-generator "^6.18.0"
babel-template "^6.16.0"
babel-traverse "^6.18.0"
babel-types "^6.18.0"
babylon "^6.18.0"
istanbul-lib-coverage "^1.1.1"
semver "^5.3.0"
isurl@^1.0.0-alpha5:
version "1.0.0"
resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67"
@ -5322,6 +5380,23 @@ lcid@^1.0.0:
dependencies:
invert-kv "^1.0.0"
"ledger-wallet-common@github:LedgerHQ/ledger-wallet-common":
version "0.0.0"
resolved "https://codeload.github.com/LedgerHQ/ledger-wallet-common/tar.gz/efc7c7970ef4c9bf327d8f5272d700c46c8f4764"
dependencies:
babel-jest "^22.0.4"
fbjs "^0.8.16"
invariant "^2.2.2"
lodash "^4.17.4"
normalizr-gre "^3.2.4"
prop-types "^15.5.10"
query-string "^5.0.0"
react "^16.0.0"
react-redux "^5.0.5"
react-test-renderer "^16.2.0"
redux "^3.7.2"
redux-thunk "^2.2.0"
leven@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
@ -5525,7 +5600,7 @@ lodash.uniq@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
lodash@^3.10.1:
lodash@^3.10.0, lodash@^3.10.1:
version "3.10.1"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
@ -6036,6 +6111,10 @@ normalize-url@^1.4.0, normalize-url@^1.9.1:
query-string "^4.1.0"
sort-keys "^1.0.0"
normalizr-gre@^3.2.4:
version "3.2.4"
resolved "https://registry.yarnpkg.com/normalizr-gre/-/normalizr-gre-3.2.4.tgz#1e0bbd84dad08f00a222c0cf89764b115e9f83f0"
npm-path@^2.0.2:
version "2.0.4"
resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64"
@ -6214,6 +6293,10 @@ optionator@^0.8.2:
type-check "~0.3.2"
wordwrap "~1.0.0"
options@>=0.0.5:
version "0.0.6"
resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f"
ora@^0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4"
@ -6976,7 +7059,7 @@ punycode@^1.2.4, punycode@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
q@^1.1.2:
q@^1.1.2, q@^1.4.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
@ -6995,6 +7078,14 @@ query-string@^4.1.0:
object-assign "^4.1.0"
strict-uri-encode "^1.0.0"
query-string@^5.0.0:
version "5.0.1"
resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.0.1.tgz#6e2b86fe0e08aef682ecbe86e85834765402bd88"
dependencies:
decode-uri-component "^0.2.0"
object-assign "^4.1.0"
strict-uri-encode "^1.0.0"
querystring-es3@^0.2.0:
version "0.2.1"
resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
@ -7194,7 +7285,7 @@ react-portal@^4.0.0:
dependencies:
prop-types "^15.5.8"
react-redux@^5.0.6:
react-redux@^5.0.5, react-redux@^5.0.6:
version "5.0.6"
resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.6.tgz#23ed3a4f986359d68b5212eaaa681e60d6574946"
dependencies:
@ -7258,6 +7349,14 @@ react-style-proptype@^3.0.0:
dependencies:
prop-types "^15.5.4"
react-test-renderer@^16.2.0:
version "16.2.0"
resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.2.0.tgz#bddf259a6b8fcd8555f012afc8eacc238872a211"
dependencies:
fbjs "^0.8.16"
object-assign "^4.1.1"
prop-types "^15.6.0"
react-textarea-autosize@^5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-5.2.1.tgz#2b78f9067180f41b08ac59f78f1581abadd61e54"
@ -7285,7 +7384,7 @@ react-treebeard@^2.1.0:
shallowequal "^0.2.2"
velocity-react "^1.3.1"
react@^16.1.1, react@^16.2.0:
react@^16.0.0, react@^16.1.1, react@^16.2.0:
version "16.2.0"
resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba"
dependencies:
@ -7581,6 +7680,15 @@ repeating@^2.0.0:
dependencies:
is-finite "^1.0.0"
request-promise@^0.4.3:
version "0.4.3"
resolved "https://registry.yarnpkg.com/request-promise/-/request-promise-0.4.3.tgz#3c8ddc82f06f8908d720aede1d6794258e22121c"
dependencies:
bluebird "^2.3"
chalk "^1.1.0"
lodash "^3.10.0"
request "^2.34"
request@2.81.0:
version "2.81.0"
resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
@ -7608,7 +7716,7 @@ request@2.81.0:
tunnel-agent "^0.6.0"
uuid "^3.0.0"
request@^2.45.0, request@^2.81.0, request@^2.83.0:
request@^2.34, request@^2.45.0, request@^2.81.0, request@^2.83.0:
version "2.83.0"
resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356"
dependencies:
@ -8502,6 +8610,16 @@ term-size@^1.2.0:
dependencies:
execa "^0.7.0"
test-exclude@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26"
dependencies:
arrify "^1.0.1"
micromatch "^2.3.11"
object-assign "^4.1.0"
read-pkg-up "^1.0.1"
require-main-filename "^1.0.1"
text-table@~0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
@ -8708,6 +8826,10 @@ uid-number@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
ultron@1.0.x:
version "1.0.2"
resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa"
union-value@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
@ -8805,6 +8927,10 @@ urix@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
url-join@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/url-join/-/url-join-0.0.1.tgz#1db48ad422d3402469a87f7d97bdebfe4fb1e3c8"
url-loader@^0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.6.2.tgz#a007a7109620e9d988d14bce677a1decb9a993f7"
@ -8826,13 +8952,17 @@ url-parse@1.0.x:
querystringify "0.0.x"
requires-port "1.0.x"
url-parse@^1.1.8:
url-parse@^1.0.5, url-parse@^1.1.8:
version "1.2.0"
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.2.0.tgz#3a19e8aaa6d023ddd27dcc44cb4fc8f7fec23986"
dependencies:
querystringify "~1.0.0"
requires-port "~1.0.0"
url-pattern@^0.10.2:
version "0.10.2"
resolved "https://registry.yarnpkg.com/url-pattern/-/url-pattern-0.10.2.tgz#e9f07104982b72312db4473dd86a527b580015da"
url-to-options@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9"
@ -9140,6 +9270,13 @@ write@^0.2.1:
dependencies:
mkdirp "^0.5.1"
ws@^1.1.2:
version "1.1.5"
resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51"
dependencies:
options ">=0.0.5"
ultron "1.0.x"
xdg-basedir@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"

Loading…
Cancel
Save