diff --git a/.babelrc b/.babelrc index 12c82ed8d..a8e305805 100644 --- a/.babelrc +++ b/.babelrc @@ -6,8 +6,19 @@ "targets": { "node": 8 }, - "useBuiltIns": "entry" + "useBuiltIns": "entry", + "exclude": ["transform-regenerator"] } ] + ], + "plugins": [ + [ + "component", + { + "libraryName": "element-ui", + "styleLibraryName": "theme-chalk" + } + ], + "@babel/plugin-syntax-dynamic-import" ] } \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js index 57a6277e0..a1fd69fc1 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,7 +1,17 @@ module.exports = { root: true, + env: { + node: true + }, 'extends': [ 'plugin:vue/essential', '@vue/standard' - ] + ], + rules: { + 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' + }, + parserOptions: { + parser: 'babel-eslint' + } } \ No newline at end of file diff --git a/.gitignore b/.gitignore index 31c533209..3b3e9d174 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,14 @@ .DS_Store node_modules -/dist -/dist_electron +dist +dist_electron /tests/e2e/reports/ selenium-debug.log +.nyc_output +coverage + # local env files .env.local .env.*.local @@ -23,3 +26,7 @@ yarn-error.log* *.njsproj *.sln *.sw* + +# Cypress +/tests/e2e/screenshots +/tests/e2e/videos diff --git a/.jenkinsci/cancel-builds-same-job.groovy b/.jenkinsci/cancel-builds-same-job.groovy new file mode 100644 index 000000000..73d253ca0 --- /dev/null +++ b/.jenkinsci/cancel-builds-same-job.groovy @@ -0,0 +1,16 @@ +#!/usr/bin/env groovy + +def cancelSameJobBuilds() { + def jobname = env.JOB_NAME + def buildnum = env.BUILD_NUMBER.toInteger() + def job = Jenkins.instance.getItemByFullName(jobname) + + if (jobname =~ /^.*\/${job.name}$/) { + for (build in job.builds) { + if (!build.isBuilding()) { continue; } + if (buildnum == build.getNumber().toInteger()) { continue; } + build.doStop(); + } + } +} +return this diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 000000000..14f5a7791 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,98 @@ +pipeline { + environment { + DOCKER_NETWORK = '' + } + options { + skipDefaultCheckout() + buildDiscarder(logRotator(numToKeepStr: '20')) + timestamps() + } + agent any + stages { + stage ('Stop same job builds') { + agent { label 'master' } + steps { + script { + def scmVars = checkout scm + // need this for develop->master PR cases + // CHANGE_BRANCH is not defined if this is a branch build + try { + scmVars.CHANGE_BRANCH_LOCAL = scmVars.CHANGE_BRANCH + } + catch(MissingPropertyException e) { } + if (scmVars.GIT_LOCAL_BRANCH != "develop" && scmVars.CHANGE_BRANCH_LOCAL != "develop") { + def builds = load ".jenkinsci/cancel-builds-same-job.groovy" + builds.cancelSameJobBuilds() + } + } + } + } + stage('Tests (unit, e2e)') { + agent { label 'd3-build-agent' } + steps { + script { + def scmVars = checkout scm + DOCKER_NETWORK = "${scmVars.CHANGE_ID}-${scmVars.GIT_COMMIT}-${BUILD_NUMBER}" + writeFile file: ".env", text: "SUBNET=${DOCKER_NETWORK}" + sh(returnStdout: true, script: "docker-compose -f docker/docker-compose.yaml pull") + sh(returnStdout: true, script: "docker-compose -f docker/docker-compose.yaml up --build -d") + sh(returnStdout: true, script: "docker exec d3-back-office-${DOCKER_NETWORK} /app/docker/back-office/wait-for-up.sh") + iC = docker.image('cypress/base:10') + iC.inside("--network='d3-${DOCKER_NETWORK}' --shm-size 4096m --ipc=host") { + sh(script: "yarn global add cypress") + var = sh(returnStatus:true, script: "yarn test:unit") + if (var != 0) { + echo '[FAILURE] Unit tests failed' + currentBuild.result = 'FAILURE'; + return var + } + var = sh(returnStatus:true, script: "CYPRESS_baseUrl=http://d3-back-office:8080 CYPRESS_IROHA=http://grpcwebproxy:8080 cypress run") + if (var != 0) { + echo '[FAILURE] E2E tests failed' + currentBuild.result = 'FAILURE'; + return var + } + } + } + } + post { + success { + script { + if (env.GIT_LOCAL_BRANCH in ["develop"] || env.CHANGE_BRANCH_LOCAL == 'develop') { + def branch = env.CHANGE_BRANCH_LOCAL == 'develop' ? env.CHANGE_BRANCH_LOCAL : env.GIT_LOCAL_BRANCH + sshagent(['jenkins-back-office']) { + sh "ssh-agent" + sh """ + rsync \ + -e 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' \ + -rzcv --delete \ + dist/* \ + root@95.179.153.222:/var/www/dev/ + """ + } + } + } + } + always { + script { + withCredentials([usernamePassword(credentialsId: 'jenkins_nexus_creds', passwordVariable: 'NEXUS_PASS', usernameVariable: 'NEXUS_USER')]) { + sh(script: "find \$(pwd)/tests/e2e/videos/*.mp4 -type f -exec curl -u ${NEXUS_USER}:${NEXUS_PASS} --upload-file {} https://nexus.iroha.tech/repository/back-office/crashes/${DOCKER_NETWORK}/ \\;", returnStdout: true) + echo "You can find all videos here: https://nexus.iroha.tech/service/rest/repository/browse/back-office/crashes/${DOCKER_NETWORK}/" + } + } + } + cleanup { + sh "mkdir build-logs" + sh """ + while read -r LINE; do \ + docker logs \$(echo \$LINE | cut -d ' ' -f1) | gzip -6 > build-logs/\$(echo \$LINE | cut -d ' ' -f2).log.gz; \ + done < <(docker ps --filter "network=d3-${DOCKER_NETWORK}" --format "{{.ID}} {{.Names}}") + """ + archiveArtifacts artifacts: 'build-logs/*.log.gz' + sh "docker-compose -f docker/docker-compose.yaml down" + cleanWs() + } + } + } + } +} diff --git a/README.md b/README.md index 652dda7e1..e612e07ff 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,64 @@ -# back-office -> Web application for an operator of D3 notary +# D3 +

+ +

-## Build Setup +## What is it? +Distributed Digital Depository is a service platform for decentralized safekeeping and settlements of tokenized crypto assets. Financial intermediaries, or custodians, directly participate in the maintenance of the system by auditing exchange process, and by voting during sidechain-to-D3 tokenization process. +[Hyperledger Iroha](https://github.com/hyperledger/iroha) is D3 ledger, which is used for voting (via multisignature accounts) and decentralized data storage. + +## Getting started +To start use this application you should run this commands in terminal. +``` bash +$ git clone https://github.com/d3ledger/back-office +$ cd back-office +$ yarn +``` + +**IMPORTANT** in our application we use `yarn` for dependency management if you do not have it, you should install it - [Installation | Yarn](https://yarnpkg.com/en/docs/install) + +#### ENV +1. `VUE_APP_ETH_NOTARY_URL=http://127.0.0.1:8083` - Used to connect to notary etherium registration service, provide IP of notary. Use this ENV when going to run or build application +1. `VUE_APP_BTC_NOTARY_URL=http://127.0.0.1:8084` - Used to connect to notary bitcoin registration service, provide IP of notary. Use this ENV when going to run or build application +2. `CYPRESS_IROHA=http://127.0.0.1:8081` - Used to run e2e tests, provide IP of gRPC IROHA. +3. `CYPRESS_baseUrl=http://127.0.0.1:8080` - Can be used in e2e tests, provide IP of D3 application + +#### Data +In our application we are use mock data that historically became our main data. We are use them to fill IROHA, to provide list of nodes or registration services. You can check them in `data` folder. + +### How to run +To run application ``` bash -# install dependencies -yarn +$ yarn serve +``` +This will serve application with hot reload. -# rebuild native modules for Electron environment -yarn rebuild +### How to build +To build application for deployment +``` bash +$ yarn build +``` + +If you are run out of memory while building application you can try another command, but it requires at least **4GB** of RAM +``` bash +$ yarn build:more-memory +``` -# serve with hot reload -yarn serve:electron +### How to test +To run tests all unit tests +``` bash +$ yarn test:unit +``` -# build electron application for production -# See [electron-builder docs](https://www.electron.build/multi-platform-build) for multi platform build -yarn build:electron +To run all e2e tests +``` bash +$ yarn test:e2e +``` -# run unit tests -yarn run unit +**IMPORTANT** to run any e2e test need to provide `CYPRESS_IROHA`. -# run all tests -yarn test +``` bash +$ CYPRESS_IROHA=http://127.0.0.1:8081 yarn test:e2e ``` \ No newline at end of file diff --git a/cypress.json b/cypress.json new file mode 100644 index 000000000..3d823080a --- /dev/null +++ b/cypress.json @@ -0,0 +1,12 @@ +{ + "baseUrl": "http://127.0.0.1:8080", + "fileServerFolder": "tests/e2e", + "fixturesFolder": "tests/e2e/fixtures", + "integrationFolder": "tests/e2e/integration", + "pluginsFile": false, + "screenshotsFolder": "tests/e2e/screenshots", + "supportFile": "tests/e2e/support", + "videosFolder": "tests/e2e/videos", + "viewportWidth": 1200, + "requestTimeout": 10000 +} diff --git a/docker/README.md b/docker/README.md new file mode 100644 index 000000000..64895d24a --- /dev/null +++ b/docker/README.md @@ -0,0 +1,8 @@ +### How to run? + +``` docker-compose up --build ``` + +### How to kill? + +``` docker-compose down ``` + diff --git a/docker/back-office/Dockerfile b/docker/back-office/Dockerfile new file mode 100644 index 000000000..e7eba0232 --- /dev/null +++ b/docker/back-office/Dockerfile @@ -0,0 +1,6 @@ +FROM cypress/base:10 + +# RUN yarn global add cypress +RUN npm install -g yarn && npm install -g http-server + +ENTRYPOINT /app/docker/back-office/entrypoint.sh diff --git a/docker/back-office/entrypoint.sh b/docker/back-office/entrypoint.sh new file mode 100755 index 000000000..e3c594854 --- /dev/null +++ b/docker/back-office/entrypoint.sh @@ -0,0 +1,13 @@ +#!/bin/bash +cd /app +yarn +yarn build + +printf 'Waiting for iroha and grpc-server become ready' +while [[ "$(curl -s -o /dev/null -m 5 -w ''%{http_code}'' grpcwebproxy:8080)" != "500" ]]; do + printf '.'; + sleep 5; +done + +NODE_IP=http://grpcwebproxy:8080 DEBUG=iroha-util node scripts/setup.js +http-server --cors ./dist diff --git a/docker/back-office/wait-for-up.sh b/docker/back-office/wait-for-up.sh new file mode 100755 index 000000000..6361ee421 --- /dev/null +++ b/docker/back-office/wait-for-up.sh @@ -0,0 +1,6 @@ +#!/bin/bash +printf 'Waiting for back-office backend-server become ready' +until $(curl --output /dev/null -m 5 --silent --head --fail http://localhost:8080); do + printf '.' + sleep 5 +done diff --git a/docker/docker-compose-dev.yaml b/docker/docker-compose-dev.yaml new file mode 100644 index 000000000..2d6d8bf91 --- /dev/null +++ b/docker/docker-compose-dev.yaml @@ -0,0 +1,51 @@ +version: '3.5' + +networks: + d3-back-office: + name: d3-${SUBNET} + attachable: true + +services: + d3-iroha: + image: hyperledger/iroha:snapshot-29a7517 + container_name: d3-iroha-${SUBNET} + depends_on: + - d3-iroha-postgres + tty: true + environment: + - KEY=keys/node0 + entrypoint: + - /opt/iroha_data/entrypoint.sh + networks: + - d3-back-office + volumes: + - ./iroha:/opt/iroha_data + ports: + - 50051:50051 + + d3-iroha-postgres: + image: postgres:9.5 + container_name: d3-iroha-postgres-${SUBNET} + environment: + - POSTGRES_PASSWORD=mysecretpassword + networks: + - d3-back-office + logging: + driver: none + + grpcwebproxy: + build: + context: grpcwebproxy/ + container_name: d3-grpcwebproxy-${SUBNET} + depends_on: + - d3-iroha + entrypoint: + - grpcwebproxy + - --backend_addr=d3-iroha:50051 + - --run_tls_server=false + networks: + - d3-back-office + logging: + driver: none + ports: + - 8081:8080 diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml new file mode 100644 index 000000000..6b765173c --- /dev/null +++ b/docker/docker-compose.yaml @@ -0,0 +1,63 @@ +version: '3.5' + +networks: + d3-back-office: + name: d3-${SUBNET} + attachable: true + +services: + d3-iroha: + image: hyperledger/iroha:snapshot-29a7517 + container_name: d3-iroha-${SUBNET} + depends_on: + - d3-iroha-postgres + tty: true + environment: + - KEY=keys/node0 + entrypoint: + - /opt/iroha_data/entrypoint.sh + networks: + - d3-back-office + volumes: + - ./iroha:/opt/iroha_data + logging: + driver: none + + d3-iroha-postgres: + image: postgres:9.5 + container_name: d3-iroha-postgres-${SUBNET} + environment: + - POSTGRES_PASSWORD=mysecretpassword + networks: + - d3-back-office + logging: + driver: none + + grpcwebproxy: + build: + context: grpcwebproxy/ + container_name: d3-grpcwebproxy-${SUBNET} + depends_on: + - d3-iroha + entrypoint: + - grpcwebproxy + - --backend_addr=d3-iroha:50051 + - --run_tls_server=false + networks: + - d3-back-office + logging: + driver: none + # ports: + # - 8081:8080 + + d3-back-office: + build: + context: back-office + container_name: d3-back-office-${SUBNET} + depends_on: + - grpcwebproxy + networks: + - d3-back-office + volumes: + - ..:/app + # - /dev/null:/app/node_modules diff --git a/docker/grpcwebproxy/Dockerfile b/docker/grpcwebproxy/Dockerfile new file mode 100644 index 000000000..185c0621e --- /dev/null +++ b/docker/grpcwebproxy/Dockerfile @@ -0,0 +1,62 @@ +# Use the `golang` image to build a statically linked binary. +# https://blog.codeship.com/building-minimal-docker-containers-for-go-applications/ +# +# Tested with: +# golang@sha256:4826b5c314a498142c7291ad835ab6be1bf02f7813d6932d01f1f0f1383cdda1 +FROM golang as gobin + +# Clone the improbable-eng/grpc-web repo. +WORKDIR /go/src/github.com/improbable-eng +RUN git clone https://github.com/improbable-eng/grpc-web.git + +# Use `dep` to ensure the correct versions of vendor dependencies are used. +# See: https://github.com/improbable-eng/grpc-web/issues/174 +WORKDIR /go/src/github.com/improbable-eng/grpc-web +RUN go get github.com/golang/dep/cmd/dep +RUN dep ensure + +# Build a static binary for `grpcwebproxy`. +WORKDIR /go/src/github.com/improbable-eng/grpc-web/go/grpcwebproxy +ENV CGO_ENABLED='0' GOOS='linux' +RUN go install + +# Use the `alpine` image to get `ca-certificates`. +# +# Tested with: +# alpine@sha256:7df6db5aa61ae9480f52f0b3a06a140ab98d427f86d8d5de0bedab9b8df6b1c0 +FROM alpine as certs +RUN apk update +RUN apk add ca-certificates + +# Build the image from the `scratch` (empty) container by copying the binary +# and SSL certificates into an approapriate location. +FROM scratch +COPY --from=gobin ["/go/bin/grpcwebproxy", "/bin/"] +COPY --from=gobin ["/go/src/github.com/improbable-eng/grpc-web/misc/localhost.*", "/misc/"] +COPY --from=certs ["/etc/ssl/*", "/etc/ssl/"] + +# Advertise ports 8080 and 8443. +EXPOSE 8080 8443 + +# Start the `grpcwebproxy` binary as the main process. +ENTRYPOINT ["/bin/grpcwebproxy"] + +# Provide default arguments for `grpcwebproxy`. These will normally be +# overridden when running the container. Using ENV for HOST and PORT would +# be better here, but ENV variables don't expand without a shell. +# +# See: https://github.com/moby/moby/issues/5509#issuecomment-42173047 +# +# Instead, `dev.localdomain` is used for the host. This can be set when +# running the container by using the argument: +# +# `--add-host dev.localdomain:192.0.2.1 +# +# Replace 192.0.2.1 with the IP address of the host. +# +# Port 50051 is used because it's the most common port used in the GRPC +# quickstart examples. +CMD ["--server_tls_cert_file=/misc/localhost.crt", \ + "--server_tls_key_file=/misc/localhost.key", \ + "--backend_addr=dev.localdomain:50051", \ + "--backend_tls_noverify"] diff --git a/docker/iroha/config.docker b/docker/iroha/config.docker new file mode 100755 index 000000000..f851a1ab5 --- /dev/null +++ b/docker/iroha/config.docker @@ -0,0 +1,11 @@ +{ + "block_store_path" : "/tmp/block_store/", + "torii_port" : 50051, + "internal_port" : 10001, + "pg_opt" : "host=d3-iroha-postgres port=5432 user=postgres password=mysecretpassword", + "max_proposal_size" : 10, + "proposal_delay" : 5000, + "vote_delay" : 5000, + "load_delay" : 5000, + "mst_enable" : true +} diff --git a/docker/iroha/entrypoint.sh b/docker/iroha/entrypoint.sh new file mode 100755 index 000000000..4822d6533 --- /dev/null +++ b/docker/iroha/entrypoint.sh @@ -0,0 +1,6 @@ +#!/bin/sh +#while ! curl http://d3-iroha-postgres:5432/ 2>&1 | grep '52' +#do +#done +sleep 10 +irohad --genesis_block genesis.block --config config.docker --keypair_name $KEY --overwrite-ledger diff --git a/docker/iroha/genesis.block b/docker/iroha/genesis.block new file mode 100755 index 000000000..ba7d86f78 --- /dev/null +++ b/docker/iroha/genesis.block @@ -0,0 +1,443 @@ +{ + "payload": { + "transactions": [ + { + "payload": { + "reducedPayload": { + "commands": [ + { + "addPeer": { + "peer": { + "address": "localhost:10001", + "peerKey": "0E2icbV/5jQmrh3Jf2lSEEA3QR/PTztzncIX9F5fyZs=" + } + } + }, + { + "createRole": { + "roleName": "notary", + "permissions": [ + "can_get_all_acc_ast", + "can_get_all_accounts", + "can_create_asset", + "can_add_asset_qty", + "can_transfer", + "can_set_detail", + "can_get_all_txs", + "can_receive", + "can_get_blocks", + "can_read_assets", + "can_add_signatory", + "can_set_quorum", + "can_grant_can_set_my_quorum", + "can_grant_can_add_my_signatory", + "can_grant_can_transfer_my_assets" + ] + } + }, + { + "createRole": { + "roleName": "relay_deployer", + "permissions": [ + "can_set_detail" + ] + } + }, + { + "createRole": { + "roleName": "eth_token_list_storage", + "permissions": [ + "can_set_detail", + "can_create_asset" + ] + } + }, + { + "createRole": { + "roleName": "registration_service", + "permissions": [ + "can_create_account", + "can_set_detail", + "can_get_all_accounts", + "can_get_domain_accounts", + "can_get_all_txs", + "can_get_blocks", + "can_set_quorum" + ] + } + }, + { + "createRole": { + "roleName": "client", + "permissions": [ + "can_get_my_account", + "can_get_my_acc_ast", + "can_get_my_acc_ast_txs", + "can_get_my_acc_txs", + "can_get_my_txs", + "can_transfer", + "can_receive", + "can_set_quorum", + "can_add_signatory", + "can_get_my_signatories", + "can_remove_signatory" + ] + } + }, + { + "createRole": { + "roleName": "admin", + "permissions": [ + "can_get_all_accounts" + ] + } + }, + { + "createRole": { + "roleName": "withdrawal", + "permissions": [ + "can_get_all_accounts", + "can_get_blocks", + "can_read_assets", + "can_receive", + "can_get_all_txs" + ] + } + }, + { + "createRole": { + "roleName": "signature_collector", + "permissions": [ + "can_create_account", + "can_set_detail", + "can_get_all_accounts" + ] + } + }, + { + "createRole": { + "roleName": "vacuumer", + "permissions": [ + "can_get_domain_accounts", + "can_read_assets" + ] + } + }, + { + "createRole": { + "roleName": "none", + "permissions": [ + ] + } + }, + { + "createRole": { + "roleName": "tester", + "permissions": [ + "can_get_all_accounts", + "can_get_all_acc_ast", + "can_add_asset_qty", + "can_transfer", + "can_create_asset", + "can_create_account", + "can_receive", + "can_read_assets", + "can_append_role", + "can_add_peer", + "can_set_detail", + "can_get_blocks", + "can_get_domain_accounts", + "can_set_quorum", + "can_add_signatory", + "can_create_account", + "can_get_all_txs", + "can_get_domain_acc_detail", + "can_read_assets", + "can_grant_can_set_my_quorum", + "can_grant_can_add_my_signatory", + "can_grant_can_transfer_my_assets", + "can_get_my_signatories", + "can_remove_signatory" + ] + } + }, + { + "createRole": { + "roleName": "whitelist_setter", + "permissions": [ + "can_set_detail" + ] + } + }, + { + "createRole": { + "roleName": "notary_list_holder", + "permissions": [ + "can_set_detail" + ] + } + }, + { + "createDomain": { + "domainId": "notary", + "defaultRole": "none" + } + }, + { + "createDomain": { + "domainId": "d3", + "defaultRole": "client" + } + }, + { + "createDomain": { + "domainId": "btcSession", + "defaultRole": "none" + } + }, + { + "createDomain": { + "domainId": "ethereum", + "defaultRole": "none" + } + }, + { + "createAsset": { + "assetName": "ether", + "domainId": "ethereum", + "precision": 18 + } + }, + { + "createDomain": { + "domainId": "bitcoin", + "defaultRole": "none" + } + }, + { + "createDomain": { + "domainId": "btcSignCollect", + "defaultRole": "none" + } + }, + { + "createAsset": { + "assetName": "btc", + "domainId": "bitcoin", + "precision": 8 + } + }, + { + "createAccount": { + "accountName": "notary", + "domainId": "notary", + "publicKey": "gl/XANujspTdZQKbLsHyG1v0ZOb3lcSHliy1mHgKsNE=" + } + }, + { + "appendRole": { + "accountId": "notary@notary", + "roleName": "notary" + } + }, + { + "createAccount": { + "accountName": "eth_registration_service", + "domainId": "notary", + "publicKey": "/iaL2sezwMrJRx6RUpm0gZkcmwsUVD9lhoxWHa/Wtok=" + } + }, + { + "appendRole": { + "accountId": "eth_registration_service@notary", + "roleName": "registration_service" + } + }, + { + "appendRole": { + "accountId": "eth_registration_service@notary", + "roleName": "relay_deployer" + } + }, + { + "appendRole": { + "accountId": "eth_registration_service@notary", + "roleName": "whitelist_setter" + } + }, + { + "createAccount": { + "accountName": "btc_registration_service", + "domainId": "notary", + "publicKey": "5I4AOZEUK5CjVp1oBHOMaSlvM5IWFmo+bSDWOAr7JbE=" + } + }, + { + "appendRole": { + "accountId": "btc_registration_service@notary", + "roleName": "registration_service" + } + }, + { + "createAccount": { + "accountName": "mst_btc_registration_service", + "domainId": "notary", + "publicKey": "qJWq9AOcKadQ5+mZC33Y8Fsdx4LEipp8X3DQCmZdfQI=" + + } + }, + { + "setAccountQuorum":{ + "accountId":"mst_btc_registration_service@notary", + "quorum":1 + } + }, + { + "appendRole": { + "accountId": "mst_btc_registration_service@notary", + "roleName": "registration_service" + } + }, + { + "createAccount": { + "accountName": "eth_token_storage_service", + "domainId": "notary", + "publicKey": "jw9s6xR2efuBVJxI5yA0XxTtA0CHnkrTcKIbbdwygck=" + } + }, + { + "appendRole": { + "accountId": "eth_token_storage_service@notary", + "roleName": "eth_token_list_storage" + } + }, + { + "createAccount": { + "accountName": "withdrawal", + "domainId": "notary", + "publicKey": "CSdCcCMvQ/15TFyBdirByGh/cINoJlRlbqltH5sU9NM=" + } + }, + { + "appendRole": { + "accountId": "withdrawal@notary", + "roleName": "withdrawal" + } + }, + { + "createAccount": { + "accountName": "btc_withdrawal_service", + "domainId": "notary", + "publicKey": "CSdCcCMvQ/15TFyBdirByGh/cINoJlRlbqltH5sU9NM=" + } + }, + { + "appendRole": { + "accountId": "btc_withdrawal_service@notary", + "roleName": "withdrawal" + } + }, + { + "appendRole": { + "accountId": "btc_withdrawal_service@notary", + "roleName": "signature_collector" + } + }, + { + "createAccount": { + "accountName": "test", + "domainId": "notary", + "publicKey": "CS5xsDGlGtrpJPfNlE8Dca6LhQJGnjJpOIUzTe3MYAE=" + } + }, + { + "appendRole": { + "accountId": "test@notary", + "roleName": "tester" + } + }, + { + "createAccount": { + "accountName": "test", + "domainId": "d3", + "publicKey": "iJ9riB4zG+IUh9t33PMsX409XoBm540v6sQjn+kdQW8=" + } + }, + { + "appendRole": { + "accountId": "test@d3", + "roleName": "tester" + } + }, + { + "createAccount": { + "accountName": "vacuumer", + "domainId": "notary", + "publicKey": "YU+qjFi+kKa8BtEEFk0JknDiQ9GLzgKlX23SVzKIeHY=" + } + }, + { + "appendRole": { + "accountId": "vacuumer@notary", + "roleName": "vacuumer" + } + }, + { + "createAccount": { + "accountName": "notaries", + "domainId": "notary", + "publicKey": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" + } + }, + { + "createAccount": { + "accountName": "btc_change_addresses", + "domainId": "notary", + "publicKey": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" + } + }, + { + "appendRole": { + "accountId": "notaries@notary", + "roleName": "notary_list_holder" + } + }, + { + "setAccountDetail": { + "accountId": "notaries@notary", + "key": "some_notary", + "value": "http://localhost:20000" + } + }, + { + "createAccount": { + "accountName": "gen_btc_pk_trigger", + "domainId": "notary", + "publicKey": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" + } + }, + { + "createAccount": { + "accountName": "admin", + "domainId": "notary", + "publicKey": "CS5xsDGlGtrpJPfNlE8Dca6LhQJGnjJpOIUzTe3MYAE=" + } + }, + { + "appendRole": { + "accountId": "admin@notary", + "roleName": "admin" + } + } + ], + "creatorAccountId": "notary@notary", + "quorum": 1 + } + } + } + ], + "txNumber": 1, + "height": "1", + "prevBlockHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" + } +} diff --git a/docker/iroha/keys/admin@notary.priv b/docker/iroha/keys/admin@notary.priv new file mode 100755 index 000000000..6f50dee45 --- /dev/null +++ b/docker/iroha/keys/admin@notary.priv @@ -0,0 +1 @@ +0f0ce16d2afbb8eca23c7d8c2724f0c257a800ee2bbd54688cec6b898e3f7e33 diff --git a/scripts/admin@test.pub b/docker/iroha/keys/admin@notary.pub old mode 100644 new mode 100755 similarity index 98% rename from scripts/admin@test.pub rename to docker/iroha/keys/admin@notary.pub index 1dfda5428..758c32b34 --- a/scripts/admin@test.pub +++ b/docker/iroha/keys/admin@notary.pub @@ -1 +1 @@ -889f6b881e331be21487db77dcf32c5f8d3d5e8066e78d2feac4239fe91d416f \ No newline at end of file +889f6b881e331be21487db77dcf32c5f8d3d5e8066e78d2feac4239fe91d416f diff --git a/docker/iroha/keys/node0.priv b/docker/iroha/keys/node0.priv new file mode 100755 index 000000000..901e6aa51 --- /dev/null +++ b/docker/iroha/keys/node0.priv @@ -0,0 +1 @@ +41209bd907789fd5a796ac6bdff908bac2f7abcf7a1d0b99a18290f285f6e965 diff --git a/docker/iroha/keys/node0.pub b/docker/iroha/keys/node0.pub new file mode 100755 index 000000000..94eb8428f --- /dev/null +++ b/docker/iroha/keys/node0.pub @@ -0,0 +1 @@ +d04da271b57fe63426ae1dc97f6952104037411fcf4f3b739dc217f45e5fc99b diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 11917cc56..000000000 --- a/jest.config.js +++ /dev/null @@ -1,22 +0,0 @@ -module.exports = { - moduleFileExtensions: [ - 'js', - 'jsx', - 'json', - 'vue' - ], - transform: { - '^.+\\.vue$': 'vue-jest', - '.+\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub', - '^.+\\.jsx?$': 'babel-jest' - }, - moduleNameMapper: { - '^@/(.*)$': '/src/$1' - }, - snapshotSerializers: [ - 'jest-serializer-vue' - ], - testMatch: [ - '/(tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx))' - ] -} diff --git a/package.json b/package.json index bdb2c4ca0..dca0dbf78 100644 --- a/package.json +++ b/package.json @@ -3,47 +3,68 @@ "version": "0.1.0", "private": true, "scripts": { - "serve": "vue-cli-service serve --open", + "serve": "vue-cli-service serve", "build": "vue-cli-service build", + "build:more-memory": "node --max_old_space_size=4096 node_modules/.bin/vue-cli-service build", "lint": "vue-cli-service lint", - "test:unit": "vue-cli-service test:unit", + "test:unit": "nyc --reporter=lcov --reporter=text vue-cli-service test:unit", "test:e2e": "vue-cli-service test:e2e", - "build:electron": "vue-cli-service build:electron", - "serve:electron": "vue-cli-service serve:electron", - "rebuild": "node-pre-gyp --target=2.0.1 --runtime=electron --fallback-to-build --directory node_modules/grpc install" + "init-fake-tokens": "node scripts/setup" }, "dependencies": { + "@fortawesome/fontawesome-svg-core": "^1.2.3", + "@fortawesome/free-solid-svg-icons": "^5.3.0", + "@fortawesome/vue-fontawesome": "^0.1.1", + "axios": "^0.18.0", + "cryptocoins-icons": "^2.8.0", + "csv.js": "^1.0.6", "date-fns": "^1.29.0", - "element-ui": "^2.3.8", - "grpc": "^1.12.2", - "iroha-lib": "^0.1.4", + "echarts": "^4.1.0", + "ed25519.js": "^1.3.0", + "element-ui": "^2.4.6", + "file-saver": "^1.3.8", + "grpc-web-client": "^0.6.3", + "iroha-helpers": "^0.3.0", + "json2csv": "^4.2.1", "lodash": "^4.17.10", - "normalize.css": "^8.0.0", - "source-map-support": "^0.5.4", - "vue": "^2.5.16", + "numbro": "^2.1.0", + "pdfmake-lite": "^0.1.36", + "qrcode.vue": "^1.6.0", + "source-map-support": "^0.5.9", + "timezones.json": "^1.4.5", + "vue": "^2.5.17", + "vue-clipboard2": "^0.2.1", + "vue-echarts": "^3.1.1", "vue-router": "^3.0.1", "vuex": "^3.0.1" }, "devDependencies": { - "@babel/polyfill": "^7.0.0-beta.49", - "@babel/preset-env": "^7.0.0-beta.49", - "@vue/cli-plugin-babel": "3.0.0-beta.15", - "@vue/cli-plugin-e2e-nightwatch": "3.0.0-beta.15", - "@vue/cli-plugin-eslint": "3.0.0-beta.15", - "@vue/cli-plugin-unit-jest": "3.0.0-beta.15", - "@vue/cli-service": "3.0.0-beta.15", - "@vue/eslint-config-standard": "3.0.0-beta.15", - "@vue/test-utils": "1.0.0-beta.16", + "@babel/core": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/polyfill": "^7.0.0", + "@babel/preset-env": "^7.0.0", + "@babel/register": "^7.0.0", + "@vue/cli-plugin-babel": "3.0.1", + "@vue/cli-plugin-e2e-cypress": "^3.0.4", + "@vue/cli-plugin-eslint": "3.0.1", + "@vue/cli-plugin-unit-mocha": "^3.0.1", + "@vue/cli-service": "3.0.1", + "@vue/eslint-config-standard": "3.0.1", + "@vue/test-utils": "^1.0.0-beta.24", "babel-core": "^7.0.0-0", - "babel-jest": "^22.0.4", - "electron": "^2.0.2", - "electron-builder": "^20.14.7", - "electron-webpack": "^2.1.2", - "lint-staged": "^6.0.0", - "node-sass": "^4.7.2", - "sass-loader": "^6.0.6", - "vue-cli-plugin-electron-builder": "^0.3.2", - "vue-template-compiler": "^2.5.13" + "babel-loader": "^7.1.5", + "babel-plugin-component": "^1.1.1", + "chai": "^4.1.2", + "chai-things": "^0.2.0", + "eslint-plugin-cypress": "^2.0.1", + "inject-loader": "^4.0.1", + "istanbul-instrumenter-loader": "^3.0.1", + "lint-staged": "^7.2.2", + "node-sass": "^4.9.3", + "nyc": "^13.0.1", + "sass-loader": "^7.1.0", + "sinon": "^6.1.5", + "vue-template-compiler": "^2.5.17" }, "browserslist": [ "> 1%", @@ -63,23 +84,12 @@ "git add" ] }, - "electronWebpack": { - "renderer": { - "sourceDirectory": "src", - "webpackConfig": "dist_electron/webpack.renderer.additions.js" - }, - "main": { - "webpackConfig": "dist_electron/webpack.main.additions.js" - } - }, - "build": { - "directories": { - "output": "dist_electron" - }, - "files": [ - "dist/**/*", - "node_modules/**/*", - "package.json" - ] + "nyc": { + "include": [ + "src/store/**/*.js", + "src/util/report-util.js" + ], + "instrument": false, + "sourceMap": false } } diff --git a/public/favicon.ico b/public/favicon.ico index c7b9a43c8..6dccaa76a 100644 Binary files a/public/favicon.ico and b/public/favicon.ico differ diff --git a/public/fonts/Roboto-Italic.ttf b/public/fonts/Roboto-Italic.ttf new file mode 100755 index 000000000..6a1cee5b2 Binary files /dev/null and b/public/fonts/Roboto-Italic.ttf differ diff --git a/public/fonts/Roboto-Medium.ttf b/public/fonts/Roboto-Medium.ttf new file mode 100755 index 000000000..1a7f3b0bb Binary files /dev/null and b/public/fonts/Roboto-Medium.ttf differ diff --git a/public/fonts/Roboto-MediumItalic.ttf b/public/fonts/Roboto-MediumItalic.ttf new file mode 100755 index 000000000..003029527 Binary files /dev/null and b/public/fonts/Roboto-MediumItalic.ttf differ diff --git a/public/fonts/Roboto-Regular.ttf b/public/fonts/Roboto-Regular.ttf new file mode 100755 index 000000000..2c97eeadf Binary files /dev/null and b/public/fonts/Roboto-Regular.ttf differ diff --git a/public/index.html b/public/index.html index 89cc66770..ad1814551 100644 --- a/public/index.html +++ b/public/index.html @@ -5,13 +5,15 @@ - back-office + D3 -
+
+ Loading... +
diff --git a/scripts/alice@test.priv b/scripts/alice@d3.priv similarity index 100% rename from scripts/alice@test.priv rename to scripts/alice@d3.priv diff --git a/scripts/alice@test.pub b/scripts/alice@test.pub deleted file mode 100644 index f05ad5751..000000000 --- a/scripts/alice@test.pub +++ /dev/null @@ -1 +0,0 @@ -bcc4ab167ae7db371672170ed31e382f7c612fbfe918f99c276cd9dc199446a4 diff --git a/scripts/setup-accounts-and-assets.js b/scripts/setup-accounts-and-assets.js index f61eb3f10..a85f07af0 100644 --- a/scripts/setup-accounts-and-assets.js +++ b/scripts/setup-accounts-and-assets.js @@ -1,22 +1,28 @@ /* eslint-disable no-unused-vars */ /* - * NODE_IP=localhost:50051 DEBUG=iroha-util node example/setup-accounts-and-assets.js + * NODE_IP=http://localhost:8080 DEBUG=iroha-util node scripts/setup.js */ -const fs = require('fs') -const path = require('path') -const _ = require('lodash') -const iroha = require('iroha-lib') -const irohaUtil = require('../src/util/iroha-util') - -const crypto = new iroha.ModelCrypto() -const adminPrivKeyHex = fs.readFileSync(path.join(__dirname, 'admin@test.priv')).toString().trim() -const adminPubKey = crypto.fromPrivateKey(adminPrivKeyHex).publicKey() -const alicePrivKeyHex = fs.readFileSync(path.join(__dirname, 'alice@test.priv')).toString().trim() -const alicePubKey = crypto.fromPrivateKey(alicePrivKeyHex).publicKey() - -const nodeIp = process.env.NODE_IP || 'localhost:50051' -const DUMMY_FILE_PATH = path.join(__dirname, '../src/mocks/wallets.json') -const accounts = ['admin@test', 'alice@test'] + +import fs from 'fs' +import path from 'path' +import _ from 'lodash' +import irohaUtil from '../src/util/iroha' +import { derivePublicKey } from 'ed25519.js' + +const irohaDomain = 'd3' +const testAccName = 'test' +const aliceAccName = 'alice' +const testAccFull = `${testAccName}@${irohaDomain}` +const aliceAccFull = `${aliceAccName}@${irohaDomain}` + +const testPrivKeyHex = fs.readFileSync(path.join(__dirname, `${testAccFull}.priv`)).toString().trim() +const testPubKey = derivePublicKey(Buffer.from(testPrivKeyHex, 'hex')) +const alicePrivKeyHex = fs.readFileSync(path.join(__dirname, `${aliceAccFull}.priv`)).toString().trim() +const alicePubKey = derivePublicKey(Buffer.from(alicePrivKeyHex, 'hex')) + +const nodeIp = process.env.NODE_IP || 'http://127.0.0.1:8081' +const DUMMY_FILE_PATH = path.join(__dirname, '../src/data/wallets.json') +const accounts = [testAccFull, aliceAccFull] const wallets = require(DUMMY_FILE_PATH).wallets console.log(`setting up accounts and assets with using '${DUMMY_FILE_PATH}'`) @@ -24,12 +30,19 @@ console.log(`accounts: ${accounts.join(', ')}`) console.log(`assets: ${wallets.map(w => w.name).join(', ')}`) console.log('') -irohaUtil.login('admin@test', adminPrivKeyHex, nodeIp) - .then(() => tryToCreateAccount('alice', 'test', alicePubKey)) +irohaUtil.login(testAccFull, testPrivKeyHex, nodeIp) + .then(() => tryToCreateAccount(aliceAccName, irohaDomain, alicePubKey)) + .then(() => irohaUtil.setAccountDetail([testPrivKeyHex], testAccFull, 'ethereum_wallet', '0xAdmin-ethereum_wallet')) + .then(() => irohaUtil.setAccountDetail([testPrivKeyHex], testAccFull, 'eth_whitelist', '0x1234567890123456789012345678901234567890')) + .then(() => irohaUtil.setAccountDetail([testPrivKeyHex], aliceAccFull, 'ethereum_wallet', '0xAlice-ethereum_wallet')) + .then(() => irohaUtil.setAccountDetail([testPrivKeyHex], aliceAccFull, 'bitcoin', 'Alice-bitcoin-wallet')) .then(() => initializeAssets()) .then(() => irohaUtil.logout()) - .then(() => setupAccountTransactions('admin@test', adminPrivKeyHex)) - .then(() => setupAccountTransactions('alice@test', alicePrivKeyHex)) + .then(() => setupAccountTransactions(testAccFull, testPrivKeyHex)) + .then(() => setupAccountTransactions(aliceAccFull, alicePrivKeyHex)) + // Let's use alice's private key as 2nd key for now + .then(() => tryToAddSignatory(testPrivKeyHex, testAccFull, alicePubKey)) + .then(() => tryToSetQuorum(testPrivKeyHex, testAccFull, 2)) .then(() => console.log('done!')) .catch(err => console.error(err)) @@ -40,21 +53,34 @@ function initializeAssets () { const precision = String(w.amount).split('.')[1].length const amount = String(w.amount) const assetName = w.name.toLowerCase() - const assetId = assetName + '#test' + const assetId = assetName + `#${irohaDomain}` - return tryToCreateAsset(assetName, 'test', precision) + return tryToCreateAsset(assetName, irohaDomain, precision) .then(() => { - console.log(`adding initial amount of ${assetId} to admin@test`) - - return irohaUtil.addAssetQuantity('admin@test', `${w.name.toLowerCase()}#test`, amount) + console.log(`adding initial amount of ${assetId} to ${testAccFull}`) + return irohaUtil.addAssetQuantity([testPrivKeyHex], assetId, amount) + }).catch((error) => { + console.log(error) + }) + .then(() => { + const splittedAmount = String(Math.round(amount * 0.3)) + console.log(`transfer 1/3 ${splittedAmount} initial amount of ${assetId} to ${aliceAccFull}`) + return irohaUtil.transferAsset( + [testPrivKeyHex], + testAccFull, + aliceAccFull, + `${w.name.toLowerCase()}#${irohaDomain}`, + 'transfer 1/3', + splittedAmount + ) }) .then(() => { console.log(`distributing initial amount of ${assetId} to every account`) - const transferringInitialAssets = _.without(accounts, 'admin@test').map(accountId => { + const transferringInitialAssets = _.without(accounts, testAccFull).map(accountId => { const amount = String(Math.random() + 1).substr(0, precision + 2) - return irohaUtil.transferAsset('admin@test', accountId, `${w.name.toLowerCase()}#test`, 'initial tx', amount).catch(() => {}) + return irohaUtil.transferAsset([testPrivKeyHex], testAccFull, accountId, assetId, 'initial tx', amount).catch(() => {}) }) return Promise.all(transferringInitialAssets) @@ -77,10 +103,10 @@ function setupAccountTransactions (accountId, accountPrivKeyHex) { _.times(_.random(3, 5), () => { const from = accountId const to = _.sample(_.without(accounts, from)) - const message = _.sample(['hello', 'hi', '']) + const message = _.sample(['Deal #1', 'Deal #2', 'Deal #3', 'PART_OF_DUMMY_SETTLEMENT']) const amount = String(Math.random()).substr(0, precision + 2) - const p = irohaUtil.transferAsset(from, to, `${w.name.toLowerCase()}#test`, message, amount).catch(() => {}) + const p = irohaUtil.transferAsset([accountPrivKeyHex], from, to, `${w.name.toLowerCase()}#${irohaDomain}`, message, amount).catch(() => {}) txs.push(p) }) @@ -95,7 +121,7 @@ function tryToCreateAccount (accountName, domainId, publicKey) { console.log(`trying to create an account: ${accountName}@${domainId}`) return new Promise((resolve, reject) => { - irohaUtil.createAccount(accountName, domainId, publicKey) + irohaUtil.createAccount([testPrivKeyHex], accountName, domainId, publicKey) .then(() => { console.log(`${accountName}@${domainId} has successfully been created`) resolve() @@ -115,7 +141,7 @@ function tryToCreateAsset (assetName, domainId, precision) { console.log(`trying to create an asset: ${assetName}#${domainId} (precision=${precision})`) return new Promise((resolve, reject) => { - irohaUtil.createAsset(assetName, domainId, precision) + irohaUtil.createAsset([testPrivKeyHex], assetName, domainId, precision) .then(() => { console.log(`${assetName}#${domainId} (precision: ${precision}) has successfully been created`) resolve() @@ -134,3 +160,39 @@ function tryToCreateAsset (assetName, domainId, precision) { }) }) } + +function tryToAddSignatory (accountPrivKeyHex, accountId, publicKey) { + console.log(`trying to add signature to account: ${accountId}`) + + return new Promise((resolve, reject) => { + irohaUtil.login(accountId, accountPrivKeyHex, nodeIp) + .then(() => { + console.log(`add signature to account: ${accountId} (signature:${publicKey})`) + irohaUtil.addSignatory([accountPrivKeyHex], accountId, publicKey) + }) + .then(() => { + console.log(`siganture is added`) + irohaUtil.logout() + resolve() + }) + .catch((err) => reject(err)) + }) +} + +function tryToSetQuorum (accountPrivKeyHex, accountId, quorum) { + console.log(`trying to add signature and set quorum to account: ${accountId}`) + + return new Promise((resolve, reject) => { + irohaUtil.login(accountId, accountPrivKeyHex, nodeIp) + .then(() => { + console.log(`set account quorum to account: ${accountId} (quorum:${quorum})`) + irohaUtil.setAccountQuorum([accountPrivKeyHex], accountId, quorum) + }) + .then(() => { + console.log(`siganture and quorum are added`) + irohaUtil.logout() + resolve() + }) + .catch((err) => reject(err)) + }) +} diff --git a/scripts/setup.js b/scripts/setup.js new file mode 100644 index 000000000..0d3371fb9 --- /dev/null +++ b/scripts/setup.js @@ -0,0 +1,9 @@ +/* + * NODE_IP=http://localhost:8080 DEBUG=iroha-util node scripts/setup.js + */ + +require('@babel/register')({ + presets: [ '@babel/env' ] +}) + +module.exports = require('./setup-accounts-and-assets') diff --git a/scripts/admin@test.priv b/scripts/test@d3.priv similarity index 100% rename from scripts/admin@test.priv rename to scripts/test@d3.priv diff --git a/scripts/test@notary.priv b/scripts/test@notary.priv new file mode 100644 index 000000000..239cdf17d --- /dev/null +++ b/scripts/test@notary.priv @@ -0,0 +1 @@ +e51123b78d658418d018e7d2486021209af3cff82714b4cb7925870fec6097dc \ No newline at end of file diff --git a/src/App.vue b/src/App.vue index b40af6e1f..e98a68412 100644 --- a/src/App.vue +++ b/src/App.vue @@ -5,18 +5,48 @@ diff --git a/src/assets/icons/coins.svg b/src/assets/icons/coins.svg index 8f4f687a8..511b03316 100644 --- a/src/assets/icons/coins.svg +++ b/src/assets/icons/coins.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/assets/logo-small.svg b/src/assets/logo-small.svg new file mode 100644 index 000000000..f36242161 --- /dev/null +++ b/src/assets/logo-small.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logo.svg b/src/assets/logo.svg new file mode 100644 index 000000000..16d040cc3 --- /dev/null +++ b/src/assets/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/menu/charts.vue b/src/assets/menu/charts.vue new file mode 100644 index 000000000..3d35fa551 --- /dev/null +++ b/src/assets/menu/charts.vue @@ -0,0 +1,3 @@ + diff --git a/src/assets/menu/exchange.vue b/src/assets/menu/exchange.vue new file mode 100644 index 000000000..3694577f5 --- /dev/null +++ b/src/assets/menu/exchange.vue @@ -0,0 +1,3 @@ + diff --git a/src/assets/menu/logout.vue b/src/assets/menu/logout.vue new file mode 100644 index 000000000..e0b6b4c45 --- /dev/null +++ b/src/assets/menu/logout.vue @@ -0,0 +1,3 @@ + diff --git a/src/assets/menu/reports.vue b/src/assets/menu/reports.vue new file mode 100644 index 000000000..15c60cc23 --- /dev/null +++ b/src/assets/menu/reports.vue @@ -0,0 +1,3 @@ + diff --git a/src/assets/menu/settings.vue b/src/assets/menu/settings.vue new file mode 100644 index 000000000..d3a8f284a --- /dev/null +++ b/src/assets/menu/settings.vue @@ -0,0 +1,3 @@ + diff --git a/src/assets/menu/transactions.vue b/src/assets/menu/transactions.vue new file mode 100644 index 000000000..0a5eed802 --- /dev/null +++ b/src/assets/menu/transactions.vue @@ -0,0 +1,3 @@ + diff --git a/src/assets/menu/wallet.vue b/src/assets/menu/wallet.vue new file mode 100644 index 000000000..3b8e24215 --- /dev/null +++ b/src/assets/menu/wallet.vue @@ -0,0 +1,3 @@ + diff --git a/src/assets/qr.png b/src/assets/qr.png deleted file mode 100644 index 665857d19..000000000 Binary files a/src/assets/qr.png and /dev/null differ diff --git a/src/components/Dashboard/Charts/DonutChart.vue b/src/components/Dashboard/Charts/DonutChart.vue new file mode 100644 index 000000000..a4319146e --- /dev/null +++ b/src/components/Dashboard/Charts/DonutChart.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/src/components/Dashboard/Charts/LineChartPortfolio.vue b/src/components/Dashboard/Charts/LineChartPortfolio.vue new file mode 100644 index 000000000..dc07f8030 --- /dev/null +++ b/src/components/Dashboard/Charts/LineChartPortfolio.vue @@ -0,0 +1,166 @@ + + + + + diff --git a/src/components/Dashboard/Charts/LineChartTable.vue b/src/components/Dashboard/Charts/LineChartTable.vue new file mode 100644 index 000000000..6b71de04d --- /dev/null +++ b/src/components/Dashboard/Charts/LineChartTable.vue @@ -0,0 +1,204 @@ + + + + + diff --git a/src/components/Dashboard/DashboardChart.vue b/src/components/Dashboard/DashboardChart.vue new file mode 100644 index 000000000..89af76727 --- /dev/null +++ b/src/components/Dashboard/DashboardChart.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/src/components/Dashboard/DashboardDonutChart.vue b/src/components/Dashboard/DashboardDonutChart.vue new file mode 100644 index 000000000..19df13d39 --- /dev/null +++ b/src/components/Dashboard/DashboardDonutChart.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/src/components/Dashboard/DashboardPage.vue b/src/components/Dashboard/DashboardPage.vue new file mode 100644 index 000000000..33b29c889 --- /dev/null +++ b/src/components/Dashboard/DashboardPage.vue @@ -0,0 +1,99 @@ + + + + + diff --git a/src/components/Dashboard/DashboardPortfolio.vue b/src/components/Dashboard/DashboardPortfolio.vue new file mode 100644 index 000000000..0b75658cd --- /dev/null +++ b/src/components/Dashboard/DashboardPortfolio.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/src/components/Dashboard/DashboardTable.vue b/src/components/Dashboard/DashboardTable.vue new file mode 100644 index 000000000..cb280b6b9 --- /dev/null +++ b/src/components/Dashboard/DashboardTable.vue @@ -0,0 +1,324 @@ + + + + + diff --git a/src/components/Home.vue b/src/components/Home.vue index f938de14e..0531c1d6f 100644 --- a/src/components/Home.vue +++ b/src/components/Home.vue @@ -1,67 +1,427 @@ - -.el-menu-item { - font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + diff --git a/src/components/Home/Menu.vue b/src/components/Home/Menu.vue new file mode 100644 index 000000000..98a8c8cf4 --- /dev/null +++ b/src/components/Home/Menu.vue @@ -0,0 +1,141 @@ + + + + + diff --git a/src/components/Login.vue b/src/components/Login.vue index 8b7c069dc..7df6653f4 100644 --- a/src/components/Login.vue +++ b/src/components/Login.vue @@ -1,65 +1,96 @@ + + diff --git a/src/components/Settings/SettingsPage.vue b/src/components/Settings/SettingsPage.vue index 3ad744c87..4a301672e 100644 --- a/src/components/Settings/SettingsPage.vue +++ b/src/components/Settings/SettingsPage.vue @@ -1,87 +1,636 @@ - diff --git a/src/components/Settings/WalletsCard.vue b/src/components/Settings/WalletsCard.vue deleted file mode 100644 index 04d84d4ec..000000000 --- a/src/components/Settings/WalletsCard.vue +++ /dev/null @@ -1,64 +0,0 @@ - - - - - diff --git a/src/components/Settlements/SettlementsHistory.vue b/src/components/Settlements/SettlementsHistory.vue index 96331282b..0408a70e7 100644 --- a/src/components/Settlements/SettlementsHistory.vue +++ b/src/components/Settlements/SettlementsHistory.vue @@ -2,71 +2,101 @@ - + - + - + - - - + + diff --git a/src/components/Settlements/SettlementsIncoming.vue b/src/components/Settlements/SettlementsIncoming.vue new file mode 100644 index 000000000..cb3a57359 --- /dev/null +++ b/src/components/Settlements/SettlementsIncoming.vue @@ -0,0 +1,220 @@ + + + + diff --git a/src/components/Settlements/SettlementsOutgoing.vue b/src/components/Settlements/SettlementsOutgoing.vue new file mode 100644 index 000000000..324529e34 --- /dev/null +++ b/src/components/Settlements/SettlementsOutgoing.vue @@ -0,0 +1,99 @@ + + + + diff --git a/src/components/Settlements/SettlementsPage.vue b/src/components/Settlements/SettlementsPage.vue index 8a31ef8c3..ec3522024 100644 --- a/src/components/Settlements/SettlementsPage.vue +++ b/src/components/Settlements/SettlementsPage.vue @@ -1,117 +1,83 @@ diff --git a/src/components/Settlements/SettlementsWaiting.vue b/src/components/Settlements/SettlementsWaiting.vue deleted file mode 100644 index fd36e0967..000000000 --- a/src/components/Settlements/SettlementsWaiting.vue +++ /dev/null @@ -1,143 +0,0 @@ - - diff --git a/src/components/Signup.vue b/src/components/Signup.vue new file mode 100644 index 000000000..c739e0c6f --- /dev/null +++ b/src/components/Signup.vue @@ -0,0 +1,308 @@ + + + + + diff --git a/src/components/Transactions/TransactionPage.vue b/src/components/Transactions/TransactionPage.vue new file mode 100644 index 000000000..851a84d75 --- /dev/null +++ b/src/components/Transactions/TransactionPage.vue @@ -0,0 +1,181 @@ + + + + + diff --git a/src/components/WalletPage.vue b/src/components/WalletPage.vue deleted file mode 100644 index 4b05dff87..000000000 --- a/src/components/WalletPage.vue +++ /dev/null @@ -1,268 +0,0 @@ - - - - diff --git a/src/components/Wallets/Wallet.vue b/src/components/Wallets/Wallet.vue new file mode 100644 index 000000000..bec56b16a --- /dev/null +++ b/src/components/Wallets/Wallet.vue @@ -0,0 +1,819 @@ + + + + diff --git a/src/components/Wallets/WalletCard.vue b/src/components/Wallets/WalletCard.vue deleted file mode 100644 index 24cf386c0..000000000 --- a/src/components/Wallets/WalletCard.vue +++ /dev/null @@ -1,75 +0,0 @@ - - - - - diff --git a/src/components/Wallets/WalletMenuItem.vue b/src/components/Wallets/WalletMenuItem.vue new file mode 100644 index 000000000..40aaa6815 --- /dev/null +++ b/src/components/Wallets/WalletMenuItem.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/src/components/Wallets/WalletsPage.vue b/src/components/Wallets/WalletsPage.vue index 500671ea6..316a2bc0c 100644 --- a/src/components/Wallets/WalletsPage.vue +++ b/src/components/Wallets/WalletsPage.vue @@ -1,35 +1,189 @@ + + diff --git a/src/components/common/AssetIcon.vue b/src/components/common/AssetIcon.vue new file mode 100644 index 000000000..3528cbda6 --- /dev/null +++ b/src/components/common/AssetIcon.vue @@ -0,0 +1,179 @@ + + + diff --git a/src/components/common/NoAssetsCard.vue b/src/components/common/NoAssetsCard.vue new file mode 100644 index 000000000..8e48459a9 --- /dev/null +++ b/src/components/common/NoAssetsCard.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/src/components/common/SvgIcon.vue b/src/components/common/SvgIcon.vue new file mode 100644 index 000000000..b899612da --- /dev/null +++ b/src/components/common/SvgIcon.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/src/components/mixins/currencySymbol.js b/src/components/mixins/currencySymbol.js new file mode 100644 index 000000000..500960e6e --- /dev/null +++ b/src/components/mixins/currencySymbol.js @@ -0,0 +1,22 @@ +const symbols = { + USD: '$', + RUB: '₽', + EUR: '€' +} + +const currencySymbol = { + methods: { + assetName (assetId) { + const wallet = this.$store.getters.wallets.find(w => w.assetId === assetId) || {} + return wallet.asset + } + }, + computed: { + currencySymbol () { + const view = this.$store.getters.settingsView.fiat + return symbols[view] + } + } +} + +export default currencySymbol diff --git a/src/components/mixins/dateFormat.js b/src/components/mixins/dateFormat.js index d0e6ed7b3..6f6073d84 100644 --- a/src/components/mixins/dateFormat.js +++ b/src/components/mixins/dateFormat.js @@ -1,9 +1,53 @@ -import { format } from 'date-fns' +import map from 'lodash/fp/map' +import flatten from 'lodash/fp/flatten' +import sortedUniq from 'lodash/fp/sortedUniq' +import flow from 'lodash/fp/flow' +import tz from 'timezones.json' +import format from 'date-fns/format' +import differenceInMinutes from 'date-fns/difference_in_minutes' -var dateFormat = { - filters: { - formatDate: date => format(date, 'MMM. D, HH:mm'), - formatDateLong: date => format(date, 'MMMM D, YYYY HH:mm:ss') +const timezones = flow(map(t => t.utc), flatten, sortedUniq)(tz) + +const offsetByZone = (zone) => + tz.find(t => + t.utc.find(region => region === zone)) + +const convertTime = (date, zone) => { + const timeZone = offsetByZone(zone).offset + const targetTime = new Date(date) + const tzDifference = timeZone * 60 + targetTime.getTimezoneOffset() + return new Date(targetTime.getTime() + tzDifference * 60 * 1000) +} + +const dateFormat = { + methods: { + formatDate (date) { + const timeZoneLabel = this.$store.getters.settingsView.timezone + const time = convertTime(date, timeZoneLabel) + return format(time, 'MMM D, HH:mm').toUpperCase() + }, + formatDateLong (date) { + const timeZoneLabel = this.$store.getters.settingsView.timezone + const time = convertTime(date, timeZoneLabel) + return format(time, 'MMM D, YYYY HH:mm:ss').toUpperCase() + }, + formatDateWith (date, formatString) { + const timeZoneLabel = this.$store.getters.settingsView.timezone + const time = convertTime(date, timeZoneLabel) + return format(time, formatString) + }, + compareDates (laterDate, earlierDate) { + const diff = differenceInMinutes(laterDate, earlierDate) + const hours = ~~(diff / 60) // return the quotient from division + const minutes = diff % 60 + const formatMin = String(minutes).length < 2 ? `0${minutes}` : minutes + return `${hours}:${formatMin}` + } + }, + data () { + return { + timezones + } } } diff --git a/src/components/mixins/inputValidation.js b/src/components/mixins/inputValidation.js new file mode 100644 index 000000000..e93189fc1 --- /dev/null +++ b/src/components/mixins/inputValidation.js @@ -0,0 +1,115 @@ +import gt from 'lodash/fp/gt' +import lte from 'lodash/fp/lte' +import { derivePublicKey } from 'ed25519.js' + +const privateKey = { + pattern: /^[A-Za-z0-9]{64}$/, + message: 'Private key should match [A-Za-z0-9]{64}' +} + +const set = { + name: [ + { required: true, message: 'Please input username', trigger: 'change' }, + { pattern: /^[a-z_0-9]{1,32}$/, message: 'Username should match [a-Z_0-9]{1,32}', trigger: 'change' } + ], + nameDomain: [ + { required: true, message: 'Please input username', trigger: 'change' }, + { pattern: /^[a-z_0-9]{1,32}@[a-z_0-9]{1,9}$/, message: 'Username should match [a-Z_0-9]{1,32}@[a-Z_0-9]{1,9}', trigger: 'change' } + ], + privateKey: [ + { pattern: privateKey.pattern, message: privateKey.message, trigger: 'change' } + ], + nodeIp: [ + { required: true, message: 'Please input node ip', trigger: 'change' }, + { pattern: /^([a-z0-9\-.]*)\.(([a-z]{2,4})|([0-9]{1,3}\.([0-9]{1,3})\.([0-9]{1,3})))|(:[0-9]{1,5})$/, message: 'Invalid IP', trigger: 'change' } + ], + walletAddress: [ + { required: true, message: 'Please input wallet address', trigger: 'change' } + ], + tokensAmount: [ + { required: true, message: 'Please input amount', trigger: 'change' }, + { pattern: /^(?![0.]+$)\d+(\.\d+)?$/, message: 'Invalid amount', trigger: 'change' } + ] +} + +set['privateKeyRequired'] = [ + { required: true, message: 'Please input private key', trigger: 'change' }, + ...set['privateKey'] +] + +const getPrecision = (v) => (v.split('.')[1] || []).length + +function checkBalance (maxValue, maxPrecision, asset) { + return function validator (rule, value, callback, source, options) { + const errors = [] + if (!asset) errors.push('Please select asset') + else if (isNaN(Number(value))) errors.push('Invalid amount') + else if (value !== null && gt(getPrecision(value))(maxPrecision)) errors.push(`Too big precision, maximum precision is ${maxPrecision}`) + else if (value !== null && value.length === 0) errors.push('Please input amount') + else if (gt(Number(value))(Number(maxValue))) errors.push('Current amount is bigger than your available balance') + else if (lte(Number(value))(0)) errors.push('Current amount is smaller or equal to 0') + callback(errors) + } +} + +function checkWallet (wallets) { + return function validator (rule, value, callback, source, options) { + const errors = [] + const validateBTC = /^[123][a-km-zA-HJ-NP-Z1-9]{25,34}$/.test(value) + const validateETH = /^0x[a-fA-F0-9]{40}$/.test(value) + if (!validateBTC && !validateETH) errors.push('Invalid wallet address') + else if (wallets && wallets.includes(value)) errors.push('This wallet is already in the whitelist') + callback(errors) + } +} + +function checkRepeatingPrivateKey (keys) { + return function validator (rule, value, callback, source, options) { + const errors = [] + if (!!value && !privateKey.pattern.test(value)) errors.push(privateKey.message) + else if (keys.includes(derivePublicKey(Buffer.from(value, 'hex')).toString('hex'))) errors.push('Transaction is already signed with this key') + callback(errors) + } +} + +function generateRules (form) { + let rules = {} + Object.keys(form).forEach(key => { + const validationRule = form[key] + if (validationRule.pattern === 'tokensAmount') { + const tokensAmountRule = Object.assign([], set[validationRule.pattern]) + tokensAmountRule.push({ + validator: checkBalance(validationRule.amount, validationRule.precision, validationRule.asset) + }) + rules[key] = tokensAmountRule + } else if (validationRule.pattern === 'walletAddress') { + const walletAddressRule = Object.assign([], set[validationRule]) + walletAddressRule.push({ validator: checkWallet(validationRule.wallets) }) + rules[key] = walletAddressRule + } else if (validationRule.pattern === 'repeatingPrivateKey') { + const privateKeyRule = [{ validator: checkRepeatingPrivateKey(validationRule.keys) }] + rules[key] = privateKeyRule + } else { + rules[key] = set[validationRule] + } + }) + return rules +} + +const inputValidation = (form) => { + return { + data () { + return { + rules: generateRules(form) + } + }, + methods: { + _refreshRules (form) { + const newRules = generateRules(form) + this.rules = Object.assign(this.rules, newRules) + } + } + } +} + +export default inputValidation diff --git a/src/components/mixins/message.js b/src/components/mixins/message.js new file mode 100644 index 000000000..aa6874976 --- /dev/null +++ b/src/components/mixins/message.js @@ -0,0 +1,20 @@ +const message = { + methods: { + showMessageFromStatus (isCompleted, messageCompleted, messageIncompleted) { + let message = isCompleted + ? messageCompleted + : messageIncompleted + + let type = isCompleted + ? 'success' + : 'warning' + + this.$message({ + message, + type + }) + } + } +} + +export default message diff --git a/src/components/mixins/numberFormat.js b/src/components/mixins/numberFormat.js new file mode 100644 index 000000000..4b417004b --- /dev/null +++ b/src/components/mixins/numberFormat.js @@ -0,0 +1,46 @@ +import numbro from 'numbro' + +const dateFormat = { + filters: { + formatNumberShort: value => numbro(value).format({ + mantissa: 2, + average: true + }), + formatNumberLong: value => numbro(value).format({ + mantissa: 2, + thousandSeparated: true + }), + formatPercent: value => { + const nP = numbro(value).format({ + mantissa: 2, + average: true, + forceSign: true + }) + return `${nP}%` + }, + formatNumberPercentDiff: value => { + const nV = numbro(value.diff).format({ + mantissa: 2, + average: true, + forceSign: true, + spaceSeparated: true + }) + const nP = numbro(value.percent).format({ + mantissa: 2, + average: true, + forceSign: true + }) + return `${nV} (${nP}%)` + }, + formatPrecision: value => { + const removeZeros = (v) => v.replace(/0+$/, '') + const arrRepOfValue = `${value}`.split('.') + const beforeDecimal = arrRepOfValue[0] + const afterDecimal = removeZeros(arrRepOfValue[1] || '') + const format = afterDecimal.length ? `.${afterDecimal}` : '' + return `${beforeDecimal}${format}` + } + } +} + +export default dateFormat diff --git a/src/data/enums.js b/src/data/enums.js new file mode 100644 index 000000000..e3b4225d5 --- /dev/null +++ b/src/data/enums.js @@ -0,0 +1,4 @@ +export const WalletTypes = Object.freeze({ + ETH: Symbol('ETH'), + BTC: Symbol('BTC') +}) diff --git a/src/data/nodes.json b/src/data/nodes.json new file mode 100644 index 000000000..9defe70b7 --- /dev/null +++ b/src/data/nodes.json @@ -0,0 +1,10 @@ +[{ + "value": "http://localhost:8081", + "label": "Local Node 1" +}, { + "value": "http://localhost:8082", + "label": "Local Node 2" +}, { + "value": "http://localhost:8083", + "label": "Local Node 3" +}] \ No newline at end of file diff --git a/src/data/notaryIPs.json b/src/data/notaryIPs.json new file mode 100644 index 000000000..0e889324c --- /dev/null +++ b/src/data/notaryIPs.json @@ -0,0 +1,9 @@ +[{ + "value": "http://localhost:8083", + "label": "Local registration Etherium" +}, +{ + "value": "http://localhost:8084", + "label": "Local registration Bitcoin" +} +] \ No newline at end of file diff --git a/src/data/urls.js b/src/data/urls.js new file mode 100644 index 000000000..358889da0 --- /dev/null +++ b/src/data/urls.js @@ -0,0 +1,13 @@ +export const ETH_NOTARY_URL = process.env.VUE_APP_ETH_NOTARY_URL || 'http://localhost:8083' +export const BTC_NOTARY_URL = process.env.VUE_APP_BTC_NOTARY_URL || 'http://localhost:8084' + +export const registrationIPs = [ + { + 'value': ETH_NOTARY_URL, + 'label': 'Etherium registration' + }, + { + 'value': BTC_NOTARY_URL, + 'label': 'Bitcoin registartion' + } +] diff --git a/src/data/wallets.json b/src/data/wallets.json new file mode 100644 index 000000000..e9a9286d6 --- /dev/null +++ b/src/data/wallets.json @@ -0,0 +1,74 @@ +{ + "wallets": [ + { + "name": "OmiseGo", + "asset": "OMG", + "amount": "124.58", + "color": "ffb055", + "address": "d8e18bb63161f6e4ee173d2408f2cccd75" + }, + { + "name": "BasicAttentionToken", + "asset": "BAT", + "amount": "2922.7", + "color": "0055fe", + "address": "8cddd8adc2b68bae49252fa890a782b8f4" + }, + { + "name": "Augur", + "asset": "REP", + "amount": "31.998", + "color": "494949", + "address": "3a31544553484cc7702685c57327378dc6" + }, + { + "name": "EOS", + "asset": "EOS", + "amount": "116.40", + "color": "ffb055", + "address": "2daf13ad98241dcc51324253fc7767ef4b" + }, + { + "name": "Bytom", + "asset": "BTM", + "amount": "2658.9", + "color": "0055fe", + "address": "63a06e61df809b1c50b53d577dff64102b" + }, + { + "name": "Golem", + "asset": "GNT", + "amount": "2913.5", + "color": "f4f4f8", + "address": "c32fd5538a577fc9033363bd6f137d977f" + }, + { + "name": "DGD", + "asset": "DGD", + "amount": "9.800", + "color": "e6e6ea", + "address": "c32fd5538a577fc9033363bd6f137d977f" + }, + { + "name": "Monaco", + "asset": "MCO", + "amount": "130.46", + "color": "fed766", + "address": "c32fd5538a577fc9033363bd6f137d976f" + }, + { + "name": "Salt", + "asset": "SALT", + "amount": "712.25", + "color": "2ab7ca", + "address": "c32fd5538a577fc9033363bd6f137d975f" + }, + { + "name": "ICONOMI", + "asset": "ICN", + "amount": "1501.4", + "color": "fe4a49", + "address": "c32fd5538a577fc9033363bd6f137d974f" + } + ] +} \ No newline at end of file diff --git a/src/main.js b/src/main.js index 0ff48e719..030b07416 100644 --- a/src/main.js +++ b/src/main.js @@ -5,13 +5,154 @@ import App from './App.vue' import router from './router' import store from './store' -import ElementUI from 'element-ui' -import 'normalize.css/normalize.css' -import 'element-ui/lib/theme-chalk/index.css' -import locale from 'element-ui/lib/locale/lang/en' +import { library } from '@fortawesome/fontawesome-svg-core' + +import { faCog } from '@fortawesome/free-solid-svg-icons/faCog' +import { faChartLine } from '@fortawesome/free-solid-svg-icons/faChartLine' +import { faWallet } from '@fortawesome/free-solid-svg-icons/faWallet' +import { faSignOutAlt } from '@fortawesome/free-solid-svg-icons/faSignOutAlt' +import { faFileInvoice } from '@fortawesome/free-solid-svg-icons/faFileInvoice' +import { faExchangeAlt } from '@fortawesome/free-solid-svg-icons/faExchangeAlt' +import { faAngleDoubleDown } from '@fortawesome/free-solid-svg-icons/faAngleDoubleDown' +import { faAngleDoubleUp } from '@fortawesome/free-solid-svg-icons/faAngleDoubleUp' +import { faArrowRight } from '@fortawesome/free-solid-svg-icons/faArrowRight' +import { faDownload } from '@fortawesome/free-solid-svg-icons/faDownload' +import { faUpload } from '@fortawesome/free-solid-svg-icons/faUpload' +import { faClock } from '@fortawesome/free-solid-svg-icons/faClock' +import { faSearch } from '@fortawesome/free-solid-svg-icons/faSearch' +import { faSortAlphaUp } from '@fortawesome/free-solid-svg-icons/faSortAlphaUp' +import { faSortAlphaDown } from '@fortawesome/free-solid-svg-icons/faSortAlphaDown' +import { faSortNumericUp } from '@fortawesome/free-solid-svg-icons/faSortNumericUp' +import { faSortNumericDown } from '@fortawesome/free-solid-svg-icons/faSortNumericDown' +import { faSortAmountUp } from '@fortawesome/free-solid-svg-icons/faSortAmountUp' +import { faSortAmountDown } from '@fortawesome/free-solid-svg-icons/faSortAmountDown' +import { faFile } from '@fortawesome/free-solid-svg-icons/faFile' +import { faFilePdf } from '@fortawesome/free-solid-svg-icons/faFilePdf' +import { faFileExcel } from '@fortawesome/free-solid-svg-icons/faFileExcel' +import { faPlus } from '@fortawesome/free-solid-svg-icons/faPlus' +import { faPencilAlt } from '@fortawesome/free-solid-svg-icons/faPencilAlt' +import { faTrashAlt } from '@fortawesome/free-solid-svg-icons/faTrashAlt' + +import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome' + +import { + Dialog, + Menu, + MenuItem, + Input, + InputNumber, + Radio, + RadioGroup, + Select, + Option, + Button, + Table, + TableColumn, + DatePicker, + Form, + FormItem, + Tag, + Row, + Col, + Upload, + Card, + Container, + Header, + Aside, + Main, + Loading, + Message, + MessageBox, + Dropdown, + DropdownMenu, + DropdownItem, + Tooltip, + Switch +} from 'element-ui' +import lang from 'element-ui/lib/locale/lang/en' +import locale from 'element-ui/lib/locale' +import 'cryptocoins-icons/webfont/cryptocoins.css' + +import ECharts from 'vue-echarts/components/ECharts' +import 'echarts/lib/chart/line' +import 'echarts/lib/chart/candlestick' +import 'echarts/lib/chart/pie' +import 'echarts/lib/component/tooltip' +import 'echarts/lib/component/legendScroll' +import 'echarts/lib/component/dataZoom' + +import VueClipboard from 'vue-clipboard2' + +VueClipboard.config.autoSetContainer = true +Vue.use(VueClipboard) + +Vue.component('ECharts', ECharts) + +Vue.use(Dialog) +Vue.use(Menu) +Vue.use(MenuItem) +Vue.use(Input) +Vue.use(InputNumber) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Select) +Vue.use(Option) +Vue.use(Button) +Vue.use(Table) +Vue.use(TableColumn) +Vue.use(DatePicker) +Vue.use(Form) +Vue.use(FormItem) +Vue.use(Tag) +Vue.use(Row) +Vue.use(Col) +Vue.use(Upload) +Vue.use(Card) +Vue.use(Container) +Vue.use(Header) +Vue.use(Aside) +Vue.use(Main) +Vue.use(Dropdown) +Vue.use(DropdownMenu) +Vue.use(DropdownItem) +Vue.use(Tooltip) +Vue.use(Switch) +Vue.use(Loading.directive) +const MsgBox = MessageBox +Vue.prototype.$prompt = MsgBox.prompt +Vue.prototype.$alert = MsgBox.alert +Vue.prototype.$message = Message +locale.use(lang) + +library.add( + faCog, + faChartLine, + faWallet, + faSignOutAlt, + faFileInvoice, + faExchangeAlt, + faAngleDoubleDown, + faAngleDoubleUp, + faArrowRight, + faDownload, + faUpload, + faClock, + faSearch, + faSortAlphaUp, + faSortAlphaDown, + faSortNumericUp, + faSortNumericDown, + faSortAmountUp, + faSortAmountDown, + faFile, + faFileExcel, + faFilePdf, + faPlus, + faPencilAlt, + faTrashAlt +) +Vue.component('fa-icon', FontAwesomeIcon) -// TODO: import only necessary components -Vue.use(ElementUI, { locale }) Vue.config.productionTip = false new Vue({ diff --git a/src/main/index.js b/src/main/index.js deleted file mode 100644 index d12c11515..000000000 --- a/src/main/index.js +++ /dev/null @@ -1,63 +0,0 @@ -'use strict' - -import { app, BrowserWindow } from 'electron' -import * as path from 'path' -import { format as formatUrl } from 'url' - -const isDevelopment = process.env.NODE_ENV !== 'production' - -// global reference to mainWindow (necessary to prevent window from being garbage collected) -let mainWindow - -function createMainWindow () { - const window = new BrowserWindow() - - if (isDevelopment) { - window.webContents.openDevTools() - } - - if (isDevelopment) { - window.loadURL(`http://localhost:${process.env.ELECTRON_WEBPACK_WDS_PORT}`) - } else { - window.loadURL( - formatUrl({ - pathname: path.join(__dirname, 'index.html'), - protocol: 'file', - slashes: true - }) - ) - } - - window.on('closed', () => { - mainWindow = null - }) - - window.webContents.on('devtools-opened', () => { - window.focus() - setImmediate(() => { - window.focus() - }) - }) - - return window -} - -// quit application when all windows are closed -app.on('window-all-closed', () => { - // on macOS it is common for applications to stay open until the user explicitly quits - if (process.platform !== 'darwin') { - app.quit() - } -}) - -app.on('activate', () => { - // on macOS it is common to re-create a window even after all windows have been closed - if (mainWindow === null) { - mainWindow = createMainWindow() - } -}) - -// create main BrowserWindow when electron is ready -app.on('ready', () => { - mainWindow = createMainWindow() -}) diff --git a/src/mocks/settlements.json b/src/mocks/settlements.json index 2fa6796b1..be5b29d3f 100644 --- a/src/mocks/settlements.json +++ b/src/mocks/settlements.json @@ -2,10 +2,10 @@ { "id": 1, "from": "you", - "offer_amount": 0.350556, + "offer_amount": "0.350556", "offer_asset": "WVS", "to": "yuriy@ru", - "request_amount": 0.26483, + "request_amount": "0.26483", "request_asset": "ETH", "date": "2017-11-15T17:29:50Z", "message": "hello", @@ -14,10 +14,10 @@ { "id": 2, "from": "yuriy@ru", - "offer_amount": 0.796463, + "offer_amount": "0.796463", "offer_asset": "ETH", "to": "you", - "request_amount": 0.212971, + "request_amount": "0.212971", "request_asset": "WVS", "date": "2018-03-24T00:19:35Z", "message": "hello", @@ -26,10 +26,10 @@ { "id": 3, "from": "test@ru", - "offer_amount": 0.442722, + "offer_amount": "0.442722", "offer_asset": "WVS", "to": "you", - "request_amount": 0.252603, + "request_amount": "0.252603", "request_asset": "ETH", "date": "2017-10-14T11:12:03Z", "message": "hello", @@ -38,10 +38,10 @@ { "id": 4, "from": "test@ru", - "offer_amount": 0.283456, + "offer_amount": "0.283456", "offer_asset": "ETH", "to": "you", - "request_amount": 0.624359, + "request_amount": "0.624359", "request_asset": "WVS", "date": "2017-05-23T08:00:44Z", "message": "hello", @@ -50,13 +50,25 @@ { "id": 5, "from": "admin@ru", - "offer_amount": 0.25946, + "offer_amount": "0.25946", "offer_asset": "ETH", "to": "you", - "request_amount": 0.058569, + "request_amount": "0.058569", "request_asset": "WVS", "date": "2017-08-22T19:56:27Z", "message": "hello", "status": "rejected" + }, + { + "id": 6, + "from": "you", + "offer_amount": "0.186241", + "offer_asset": "WVS", + "to": "yuriy@ru", + "request_amount": "0.30074", + "request_asset": "ETH", + "date": "2018-06-20T18:00:01Z", + "message": "hi", + "status": "waiting" } ] diff --git a/src/mocks/transactions.json b/src/mocks/transactions.json deleted file mode 100644 index 04f325b9f..000000000 --- a/src/mocks/transactions.json +++ /dev/null @@ -1,185 +0,0 @@ -[ - { - "id": 1, - "from": "you", - "amount": 0.350556, - "to": "yuriy@ru", - "date": "2017-11-15T17:29:50Z", - "message": "hello", - "status": "declined" - }, - { - "id": 2, - "from": "yuriy@ru", - "amount": 0.26483, - "to": "you", - "date": "2018-03-24T00:19:35Z", - "message": "hello", - "status": "done", - "settlement": { - "id": 1, - "from": "you", - "offer_amount": 0.796463, - "offer_asset": "WVS", - "to": "yuriy@ru", - "request_amount": 0.26483, - "request_asset": "ETH", - "date": "2018-03-24T00:19:35Z", - "message": "hello", - "status": "accepted" - } - }, - { - "id": 3, - "from": "test@ru", - "amount": 0.442722, - "to": "you", - "date": "2017-10-14T11:12:03Z", - "message": "hello", - "status": "done" - }, - { - "id": 4, - "from": "test@ru", - "amount": 0.283456, - "to": "you", - "date": "2017-05-23T08:00:44Z", - "message": "hello", - "status": "done" - }, - { - "id": 5, - "from": "admin@ru", - "amount": 0.25946, - "to": "you", - "date": "2017-08-22T19:56:27Z", - "message": "hello", - "status": "declined" - }, - { - "id": 6, - "from": "nikolay@ru", - "amount": 0.129626, - "to": "you", - "date": "2017-08-29T09:45:48Z", - "message": "hello", - "status": "declined" - }, - { - "id": 7, - "from": "admin@ru", - "amount": 0.699506, - "to": "you", - "date": "2017-08-19T11:49:59Z", - "message": "hello", - "status": "done" - }, - { - "id": 8, - "from": "admin@ru", - "amount": 0.316812, - "to": "you", - "date": "2017-11-09T22:05:58Z", - "message": "hello", - "status": "done" - }, - { - "id": 9, - "from": "you", - "amount": 0.520856, - "to": "admin@ru", - "date": "2017-05-22T19:07:47Z", - "message": "hello", - "status": "done" - }, - { - "id": 10, - "from": "you", - "amount": 0.852744, - "to": "test@ru", - "date": "2018-02-16T11:47:55Z", - "message": "hello", - "status": "done" - }, - { - "id": 11, - "from": "yuriy@ru", - "amount": 0.19864, - "to": "you", - "date": "2018-03-29T14:18:48Z", - "message": "hello", - "status": "done" - }, - { - "id": 12, - "from": "you", - "amount": 0.665101, - "to": "yuriy@ru", - "date": "2018-01-15T07:13:25Z", - "message": "hello", - "status": "done" - }, - { - "id": 13, - "from": "test@ru", - "amount": 0.049468, - "to": "you", - "date": "2017-07-03T11:49:34Z", - "message": "hello", - "status": "done" - }, - { - "id": 14, - "from": "you", - "amount": 0.829115, - "to": "yuriy@ru", - "date": "2018-03-06T12:18:58Z", - "message": "hello", - "status": "done" - }, - { - "id": 15, - "from": "you", - "amount": 0.217472, - "to": "admin@ru", - "date": "2017-10-18T11:27:19Z", - "message": "hello", - "status": "done" - }, - { - "id": 16, - "from": "you", - "amount": 0.81711, - "to": "admin@ru", - "date": "2017-10-22T01:39:24Z", - "message": "hello", - "status": "done" - }, - { - "id": 17, - "from": "you", - "amount": 0.697086, - "to": "nikolay@ru", - "date": "2017-11-04T11:55:53Z", - "message": "hello", - "status": "done" - }, - { - "id": 18, - "from": "nikolay@ru", - "amount": 0.746103, - "to": "you", - "date": "2017-05-21T10:58:59Z", - "message": "hello", - "status": "declined" - }, - { - "id": 19, - "from": "test@ru", - "amount": 0.121857, - "to": "you", - "date": "2017-06-01T08:04:00Z", - "message": "hello", - "status": "declined" - } -] diff --git a/src/mocks/wallets.json b/src/mocks/wallets.json deleted file mode 100644 index 51e659752..000000000 --- a/src/mocks/wallets.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "wallets": [ - { - "name": "Bitcoin", - "asset": "BTC", - "amount": 10.80368522, - "color": "ffb055", - "address": "d8e18bb63161f6e4ee173d2408f2cccd75" - }, - { - "name": "Waves", - "asset": "WVS", - "amount": 200.04, - "color": "0055fe", - "address": "8cddd8adc2b68bae49252fa890a782b8f4" - }, - { - "name": "Etherium", - "asset": "ETH", - "amount": 100.803685, - "color": "494949", - "address": "3a31544553484cc7702685c57327378dc6" - }, - { - "name": "Bitcoin1", - "asset": "BTC", - "amount": 10.80368522, - "color": "ffb055", - "address": "2daf13ad98241dcc51324253fc7767ef4b" - }, - { - "name": "Waves1", - "asset": "WVS", - "amount": 200.04, - "color": "0055fe", - "address": "63a06e61df809b1c50b53d577dff64102b" - }, - { - "name": "Etherium1", - "asset": "ETH", - "amount": 100.803685, - "color": "494949", - "address": "c32fd5538a577fc9033363bd6f137d977f" - } - ] -} \ No newline at end of file diff --git a/src/router.js b/src/router.js index e254682b8..b598fded4 100644 --- a/src/router.js +++ b/src/router.js @@ -1,62 +1,82 @@ import Vue from 'vue' import Router from 'vue-router' -import irohaUtil from 'util/iroha-util' - -import Home from '@/components/Home' -import WalletsPage from '@/components/Wallets/WalletsPage' -import WalletPage from '@/components/WalletPage' -import SettlementsPage from '@/components/Settlements/SettlementsPage' -import SettlementsWaiting from '@/components/Settlements/SettlementsWaiting' -import SettlementsHistory from '@/components/Settlements/SettlementsHistory' -import SettingsPage from '@/components/Settings/SettingsPage' -import Login from '@/components/Login' +import irohaUtil from '@util/iroha' Vue.use(Router) +export const lazyComponent = (name) => () => import(`@/components/${name}.vue`) + const defaultRouter = new Router({ mode: 'hash', routes: [ { path: '/', - component: Home, + component: lazyComponent('Home'), children: [ { path: '', + name: 'dashboard', + component: lazyComponent('Dashboard/DashboardPage') + }, + { + path: 'wallets', name: 'wallets', - component: WalletsPage + component: lazyComponent('Wallets/WalletsPage'), + children: [ + { + path: ':walletId', + component: lazyComponent('Wallets/Wallet') + } + ] }, { path: 'settlements', name: 'settlements-page', - component: SettlementsPage, + component: lazyComponent('Settlements/SettlementsPage'), children: [ - { - path: '', - name: 'settlements-waiting', - component: SettlementsWaiting - }, { path: 'history', name: 'settlements-history', - component: SettlementsHistory + component: lazyComponent('Settlements/SettlementsHistory') + }, + { + path: 'incoming', + name: 'settlements-incoming', + component: lazyComponent('Settlements/SettlementsIncoming') + }, + { + path: 'outgoing', + name: 'settlements-outgoing', + component: lazyComponent('Settlements/SettlementsOutgoing') } ] }, + { + path: 'reports', + name: 'reports', + component: lazyComponent('Reports/ReportsPage') + }, + { + path: 'transactions', + name: 'transactions', + component: lazyComponent('Transactions/TransactionPage') + }, { path: 'settings', - name: 'settings-page', - component: SettingsPage + name: 'settings', + component: lazyComponent('Settings/SettingsPage') } ] }, - { - path: '/wallet/:walletId', - component: WalletPage - }, { path: '/login', name: 'login', - component: Login + component: lazyComponent('Login') + }, + { + path: '/signup', + name: 'signup', + component: lazyComponent('Signup') }, { path: '*', @@ -66,7 +86,7 @@ const defaultRouter = new Router({ }) defaultRouter.beforeEach((to, from, next) => { - if (to.name === 'login') return next() + if (to.name === 'login' || to.name === 'signup') return next() if (irohaUtil.isLoggedIn()) { next() diff --git a/src/store/Account.js b/src/store/Account.js index 9f4d0bf71..b4ee07204 100644 --- a/src/store/Account.js +++ b/src/store/Account.js @@ -1,137 +1,180 @@ import Vue from 'vue' -import _ from 'lodash' -import grpc from 'grpc' -import irohaUtil from 'util/iroha-util' -import { amountToString } from 'util/iroha-amount' - -// TODO: To be removed. This is used for 2 reasons for now: -// 1. to get assetIds, because previous GetAccountAssets API required a client -// to know assetIds in advance. -// 2. to get asset's properties (e.g. color) which cannot be fetched from API. -const DUMMY_ASSETS = require('@/mocks/wallets.json').wallets -const DUMMY_ASSET_IDS = DUMMY_ASSETS.map(a => `${a.name.toLowerCase()}#test`) - -const types = { - RESET: 'RESET', - LOGIN_REQUEST: 'LOGIN_REQUEST', - LOGIN_SUCCESS: 'LOGIN_SUCCESS', - LOGIN_FAILURE: 'LOGIN_FAILURE', - LOGOUT_REQUEST: 'LOGOUT_REQUEST', - LOGOUT_SUCCESS: 'LOGOUT_SUCCESS', - LOGOUT_FAILURE: 'LOGOUT_FAILURE', - GET_ACCOUNT_TRANSACTIONS_REQUEST: 'GET_ACCOUNT_TRANSACTIONS_REQUEST', - GET_ACCOUNT_TRANSACTIONS_SUCCESS: 'GET_ACCOUNT_TRANSACTIONS_SUCCESS', - GET_ACCOUNT_TRANSACTIONS_FAILURE: 'GET_ACCOUNT_TRANSACTIONS_FAILURE', - GET_ACCOUNT_ASSET_TRANSACTIONS_REQUEST: 'GET_ACCOUNT_ASSET_TRANSACTIONS_REQUEST', - GET_ACCOUNT_ASSET_TRANSACTIONS_SUCCESS: 'GET_ACCOUNT_ASSET_TRANSACTIONS_SUCCESS', - GET_ACCOUNT_ASSET_TRANSACTIONS_FAILURE: 'GET_ACCOUNT_ASSET_TRANSACTIONS_FAILURE', - GET_ACCOUNT_ASSETS_REQUEST: 'GET_ACCOUNT_ASSETS_REQUEST', - GET_ACCOUNT_ASSETS_SUCCESS: 'GET_ACCOUNT_ASSETS_SUCCESS', - GET_ACCOUNT_ASSETS_FAILURE: 'GET_ACCOUNT_ASSETS_FAILURE', - TRANSFER_ASSET_REQUEST: 'TRANSFER_ASSET_REQUEST', - TRANSFER_ASSET_SUCCESS: 'TRANSFER_ASSET_SUCCESS', - TRANSFER_ASSET_FAILURE: 'TRANSFER_ASSET_FAILURE' -} +import map from 'lodash/fp/map' +import flatMap from 'lodash/fp/flatMap' +import concat from 'lodash/fp/concat' +import fromPairs from 'lodash/fp/fromPairs' +import flow from 'lodash/fp/flow' +import find from 'lodash/fp/find' +import cloneDeep from 'lodash/fp/cloneDeep' +import flatten from 'lodash/fp/flatten' +import { grpc } from 'grpc-web-client' +import irohaUtil from '@util/iroha' +import notaryUtil from '@util/notary-util' +import { getTransferAssetsFrom, getSettlementsFrom, findBatchFromRaw } from '@util/store-util' +import { derivePublicKey } from 'ed25519.js' +import { WalletTypes } from '@/data/enums' + +// TODO: Move it into notary's API so we have the same list +const ASSETS = require('@util/crypto-list.json') + +const types = flow( + flatMap(x => [x + '_REQUEST', x + '_SUCCESS', x + '_FAILURE']), + concat([ + 'RESET', + 'SET_NOTARY_IP' + ]), + map(x => [x, x]), + fromPairs +)([ + 'SIGNUP', + 'LOGIN', + 'LOGOUT', + 'UPDATE_ACCOUNT', + 'GET_ACCOUNT_TRANSACTIONS', + 'GET_ACCOUNT_ASSET_TRANSACTIONS', + 'GET_ACCOUNT_ASSETS', + 'GET_ALL_ASSET_TRANSACTIONS', + 'GET_ACCOUNT_SIGNATORIES', + 'GET_ALL_UNSIGNED_TRANSACTIONS', + 'GET_PENDING_TRANSACTIONS', + 'ADD_ACCOUNT_SIGNATORY', + 'REMOVE_ACCOUNT_SIGNATORY', + 'TRANSFER_ASSET', + 'CREATE_SETTLEMENT', + 'ACCEPT_SETTLEMENT', + 'REJECT_SETTLEMENT', + 'SIGN_PENDING', + 'EDIT_ACCOUNT_QUORUM', + 'GET_ACCOUNT_QUORUM' +]) function initialState () { return { accountId: '', nodeIp: irohaUtil.getStoredNodeIp(), + notaryIp: notaryUtil.baseURL, accountInfo: {}, + accountQuorum: 0, + accountSignatories: [], rawAssetTransactions: {}, + rawUnsignedTransactions: [], + rawTransactions: [], + rawPendingTransactions: null, assets: [], connectionError: null } } -function transformTransactions (transactions) { - if (!transactions) return [] - - const transformed = [] - - transactions.forEach(t => { - const { commandsList, createdTime } = t.payload - - commandsList.forEach(c => { - if (!c.transferAsset) return - - const { - amount, - destAccountId, - srcAccountId, - description - } = c.transferAsset - - transformed.push({ - from: srcAccountId === state.accountId ? 'you' : srcAccountId, - to: destAccountId === state.accountId ? 'you' : destAccountId, - amount: amountToString(amount), - date: createdTime, - message: description, - // TODO: set appropreate tx status ('accepted', 'rejected', 'canceled') - status: 'accepted' - }) - }) - }) - - /* - * As actions.getAccountTransactions() does, we fetch account's txs - * by multiple getAccount*Asset*Transactions calls. - * - * Also, getAccount*Asset*Transactions returns txs each of which includes - * one or more command(s), which possibly includes also commands issued - * against different asset. - * - * Therefore, when merging transactions for multiple assets, duplication - * possibly occurs. - * e.g. - * accountAssetTransactions_of_asset_A = [ - * { commands: [command_for_asset_A_1, command_for_asset_B_1] }, - * { commands: [command_for_asset_A_2] } - * ] - * accountAssetTransactions_of_asset_B = [ - * { commands: [command_for_asset_A_1, command_for_asset_B_1] } - * ] - * // -> command_for_asset_A_1 and B_1 duplicates! - * - * To avoid it, we uniq the transactions. - */ - return _(transformed) - .chain() - .uniqWith(_.isEqual) - .sortBy('date') - .reverse() - .value() -} - const state = initialState() const getters = { wallets (state) { return state.assets.map(a => { - // TODO: remove it after irohaUtil.getAccountAssets is updated - const DUMMY_ASSET = DUMMY_ASSETS.find(d => { - return (d.name.toLowerCase() === a.accountAsset.assetId.split('#')[0]) + // TODO: it is to get asset's properties (e.g. color) which cannot be fetched from API. + const ASSET = ASSETS.find(d => { + return (d.name.toLowerCase() === a.assetId.split('#')[0].toLowerCase() || d.asset.toLowerCase() === a.assetId.split('#')[0].toLowerCase()) }) return { - id: a.accountAsset.assetId.replace(/#/g, '$'), - assetId: a.accountAsset.assetId, + id: a.assetId.replace(/#/g, '$'), + assetId: a.assetId, + domain: a.assetId.split('#')[1], - // TODO: change these to use API, not dummy - name: DUMMY_ASSET.name, - asset: DUMMY_ASSET.asset, - color: DUMMY_ASSET.color, - address: DUMMY_ASSET.address, + name: ASSET.name, + asset: ASSET.asset, + color: ASSET.color, - amount: amountToString(a.accountAsset.balance), - precision: a.accountAsset.balance.precision + amount: a.balance, + precision: a.balance.split('.')[1] ? a.balance.split('.')[1].length : 0 } }) }, getTransactionsByAssetId: (state) => (assetId) => { - return transformTransactions(state.rawAssetTransactions[assetId]) + const resolvedSettlements = getters.resolvedSettlements(state) + return getTransferAssetsFrom( + state.rawAssetTransactions[assetId], + state.accountId, + resolvedSettlements + ) + }, + + allAssetTransactions () { + return flatten(Object.values(state.rawAssetTransactions)) + }, + + allPendingTransactions: (state) => { + let pendingTransactionsCopy = cloneDeep(state.rawPendingTransactions) + return pendingTransactionsCopy ? getTransferAssetsFrom( + pendingTransactionsCopy.toObject().transactionsList, + state.accountId + ).filter(tx => tx.from === 'you') : [] + }, + + waitingSettlements () { + let rawUnsignedTransactionsCopy = cloneDeep(state.rawUnsignedTransactions) + return !Array.isArray(rawUnsignedTransactionsCopy) ? getSettlementsFrom( + rawUnsignedTransactionsCopy.toObject().transactionsList, + state.accountId + ) : [] + }, + + incomingSettlements () { + return getters.waitingSettlements().filter(pair => { + return pair.to.signatures.length > 0 + }) + }, + + outgoingSettlements () { + return getters.waitingSettlements().filter(pair => { + return pair.from.signatures.length > 0 + }) + }, + + resolvedSettlements (state) { + let allAssetTransactionsCopy = getters.allAssetTransactions() + return getSettlementsFrom( + allAssetTransactionsCopy, + state.accountId + ) + }, + + walletType (state) { + const walletType = [] + if (find('ethereum_wallet', state.accountInfo)) { + walletType.push(WalletTypes.ETH) + } + + if (find('bitcoin', state.accountInfo)) { + walletType.push(WalletTypes.BTC) + } + + return walletType + }, + + ethWalletAddress (state) { + const ethWallet = find('ethereum_wallet', state.accountInfo) + + return ethWallet ? ethWallet.ethereum_wallet : null + }, + + btcWalletAddress (state) { + const btcWallet = find('bitcoin', state.accountInfo) + + return btcWallet ? btcWallet.bitcoin : null + }, + + withdrawWalletAddresses (state) { + const wallet = find('eth_whitelist', state.accountInfo) + return wallet ? wallet.eth_whitelist.split(',').map(w => w.trim()) : [] + }, + + accountQuorum (state) { + return state.accountQuorum + }, + + accountSignatories (state) { + return state.accountSignatories.map((s) => Buffer.from(s, 'base64').toString('hex')) } } @@ -142,8 +185,8 @@ const getters = { */ function handleError (state, err) { switch (err.code) { - case grpc.status.UNAVAILABLE: - case grpc.status.CANCELLED: + case grpc.Code.Unavailable: + case grpc.Code.Canceled: state.connectionError = err break @@ -153,6 +196,11 @@ function handleError (state, err) { } const mutations = { + [types.SET_NOTARY_IP] (state, ip) { + notaryUtil.baseURL = ip + state.notaryIp = ip + }, + [types.RESET] (state) { const s = initialState() @@ -161,10 +209,21 @@ const mutations = { }) }, + [types.SIGNUP_REQUEST] (state) {}, + + [types.SIGNUP_SUCCESS] (state, params) { + }, + + [types.SIGNUP_FAILURE] (state, err) { + handleError(state, err) + }, + [types.LOGIN_REQUEST] (state) {}, [types.LOGIN_SUCCESS] (state, account) { state.accountId = account.accountId + state.accountInfo = JSON.parse(account.jsonData) + state.accountQuorum = account.quorum }, [types.LOGIN_FAILURE] (state, err) { @@ -179,6 +238,18 @@ const mutations = { handleError(state, err) }, + [types.UPDATE_ACCOUNT_REQUEST] (state) {}, + + [types.UPDATE_ACCOUNT_SUCCESS] (state, { account }) { + state.accountId = account.accountId + state.accountInfo = JSON.parse(account.jsonData) + state.accountQuorum = account.quorum + }, + + [types.UPDATE_ACCOUNT_FAILURE] (state, err) { + handleError(state, err) + }, + [types.GET_ACCOUNT_ASSET_TRANSACTIONS_REQUEST] (state) {}, [types.GET_ACCOUNT_ASSET_TRANSACTIONS_SUCCESS] (state, { assetId, transactions }) { @@ -199,16 +270,163 @@ const mutations = { handleError(state, err) }, + [types.GET_ACCOUNT_TRANSACTIONS_REQUEST] (state) {}, + + [types.GET_ACCOUNT_TRANSACTIONS_SUCCESS] (state, transactions) { + state.rawTransactions = transactions + }, + + [types.GET_ACCOUNT_TRANSACTIONS_FAILURE] (state, err) { + handleError(state, err) + }, + + [types.GET_ACCOUNT_SIGNATORIES_REQUEST] (state) {}, + + [types.GET_ACCOUNT_SIGNATORIES_SUCCESS] (state, signatories) { + state.accountSignatories = signatories + }, + + [types.GET_ACCOUNT_SIGNATORIES_FAILURE] (state, err) { + handleError(state, err) + }, + + [types.GET_ALL_UNSIGNED_TRANSACTIONS_REQUEST] (state) {}, + + [types.GET_ALL_UNSIGNED_TRANSACTIONS_SUCCESS] (state, transactions) { + state.rawUnsignedTransactions = transactions + }, + + [types.GET_ALL_UNSIGNED_TRANSACTIONS_FAILURE] (state, err) { + handleError(state, err) + }, + + [types.GET_PENDING_TRANSACTIONS_REQUEST] (state) {}, + + [types.GET_PENDING_TRANSACTIONS_SUCCESS] (state, transactions) { + state.rawPendingTransactions = transactions + }, + + [types.GET_PENDING_TRANSACTIONS_FAILURE] (state, err) { + handleError(state, err) + }, + [types.TRANSFER_ASSET_REQUEST] (state) {}, [types.TRANSFER_ASSET_SUCCESS] (state) {}, [types.TRANSFER_ASSET_FAILURE] (state, err) { handleError(state, err) + }, + + [types.SIGN_PENDING_REQUEST] (state) {}, + + [types.SIGN_PENDING_SUCCESS] (state) {}, + + [types.SIGN_PENDING_FAILURE] (state, err) { + handleError(state, err) + }, + + [types.CREATE_SETTLEMENT_REQUEST] (state) {}, + + [types.CREATE_SETTLEMENT_SUCCESS] (state) {}, + + [types.CREATE_SETTLEMENT_FAILURE] (state, err) { + handleError(state, err) + }, + + [types.ACCEPT_SETTLEMENT_REQUEST] (state) {}, + + [types.ACCEPT_SETTLEMENT_SUCCESS] (state) {}, + + [types.ACCEPT_SETTLEMENT_FAILURE] (state, err) { + handleError(state, err) + }, + + [types.REJECT_SETTLEMENT_REQUEST] (state) {}, + + [types.REJECT_SETTLEMENT_SUCCESS] (state) {}, + + [types.REJECT_SETTLEMENT_FAILURE] (state, err) { + handleError(state, err) + }, + + [types.GET_ALL_ASSET_TRANSACTIONS_REQUEST] (state) {}, + + [types.GET_ALL_ASSET_TRANSACTIONS_SUCCESS] (state) {}, + + [types.GET_ALL_ASSET_TRANSACTIONS_FAILURE] (state, err) { + handleError(state, err) + }, + + [types.ADD_ACCOUNT_SIGNATORY_REQUEST] (state) {}, + + [types.ADD_ACCOUNT_SIGNATORY_SUCCESS] (state) {}, + + [types.ADD_ACCOUNT_SIGNATORY_FAILURE] (state, err) { + handleError(state, err) + }, + + [types.REMOVE_ACCOUNT_SIGNATORY_REQUEST] (state) {}, + + [types.REMOVE_ACCOUNT_SIGNATORY_SUCCESS] (state) {}, + + [types.REMOVE_ACCOUNT_SIGNATORY_FAILURE] (state, err) { + handleError(state, err) + }, + + [types.EDIT_ACCOUNT_QUORUM_REQUEST] (state) {}, + + [types.EDIT_ACCOUNT_QUORUM_SUCCESS] (state) {}, + + [types.EDIT_ACCOUNT_QUORUM_FAILURE] (state, err) { + handleError(state, err) + }, + + [types.GET_ACCOUNT_QUORUM_REQUEST] (state) {}, + + [types.GET_ACCOUNT_QUORUM_SUCCESS] (state, { quorum }) { + state.accountQuorum = quorum + }, + + [types.GET_ACCOUNT_QUORUM_FAILURE] (state, err) { + handleError(state, err) } } const actions = { + setNotaryIp ({ commit }, { ip }) { + commit(types.SET_NOTARY_IP, ip) + }, + + signup ({ commit }, { username, whitelist }) { + commit(types.SIGNUP_REQUEST) + + const { publicKey, privateKey } = irohaUtil.generateKeypair() + + return notaryUtil.signup(username, whitelist, publicKey) + .then(() => commit(types.SIGNUP_SUCCESS, { username, publicKey, privateKey })) + .then(() => ({ username, privateKey })) + .catch(err => { + commit(types.SIGNUP_FAILURE, err) + throw err + }) + }, + + addNetwork ({ commit, state }, { privateKeys }) { + commit(types.SIGNUP_REQUEST) + const username = state.accountId.split('@')[0] + const privateKey = privateKeys[0] + const publicKey = derivePublicKey(Buffer.from(privateKey, 'hex')).toString('hex') + + return notaryUtil.signup(username, [], publicKey) + .then(() => commit(types.SIGNUP_SUCCESS, { username, publicKey, privateKey })) + .then(() => ({ username, privateKey })) + .catch(err => { + commit(types.SIGNUP_FAILURE, err) + throw err + }) + }, + login ({ commit }, { username, privateKey, nodeIp }) { commit(types.LOGIN_REQUEST) @@ -234,7 +452,20 @@ const actions = { }) }, - getAccountAssetTransactions ({ commit }, { assetId }) { + updateAccount ({ commit, state }) { + commit(types.UPDATE_ACCOUNT_REQUEST) + + return irohaUtil.getAccount(state.accountId) + .then((account) => { + commit(types.UPDATE_ACCOUNT_SUCCESS, { account }) + }) + .catch(err => { + commit(types.UPDATE_ACCOUNT_FAILURE, err) + throw err + }) + }, + + getAccountAssetTransactions ({ commit, state }, { assetId }) { commit(types.GET_ACCOUNT_ASSET_TRANSACTIONS_REQUEST) return irohaUtil.getAccountAssetTransactions(state.accountId, assetId) @@ -250,18 +481,12 @@ const actions = { }) }, - getAccountAssets ({ commit }) { + getAccountAssets ({ commit, state }) { commit(types.GET_ACCOUNT_ASSETS_REQUEST) - // TODO: fix it after irohaUtil.getAccountAssets is updated - const assetIds = DUMMY_ASSET_IDS - const gettingAccountAssets = assetIds.map(assetId => { - return irohaUtil.getAccountAssets(state.accountId, assetId) - }) - - return Promise.all(gettingAccountAssets) - .then(responses => { - commit(types.GET_ACCOUNT_ASSETS_SUCCESS, _.flatten(responses)) + return irohaUtil.getAccountAssets(state.accountId) + .then(assets => { + commit(types.GET_ACCOUNT_ASSETS_SUCCESS, assets) }) .catch(err => { commit(types.GET_ACCOUNT_ASSETS_FAILURE, err) @@ -269,10 +494,64 @@ const actions = { }) }, - transferAsset ({ commit }, { assetId, to, description = '', amount }) { + getAccountTransactions ({ commit, state }) { + commit(types.GET_ACCOUNT_TRANSACTIONS_REQUEST) + + return irohaUtil.getAccountTransactions(state.accountId) + .then(transactions => { + commit(types.GET_ACCOUNT_TRANSACTIONS_SUCCESS, transactions) + }) + .catch(err => { + commit(types.GET_ACCOUNT_TRANSACTIONS_FAILURE, err) + throw err + }) + }, + + getAllUnsignedTransactions ({ commit, state }) { + commit(types.GET_ALL_UNSIGNED_TRANSACTIONS_REQUEST) + return irohaUtil.getPendingTransactions() + .then(transactions => { + commit(types.GET_ALL_UNSIGNED_TRANSACTIONS_SUCCESS, transactions) + }) + .catch(err => { + commit(types.GET_ALL_UNSIGNED_TRANSACTIONS_FAILURE, err) + throw err + }) + }, + + getAllAssetTransactions ({ commit, dispatch, state }) { + commit(types.GET_ALL_ASSET_TRANSACTIONS_REQUEST) + return new Promise((resolve, reject) => { + state.assets.map(({ assetId }) => { + dispatch('getAccountAssetTransactions', { assetId }) + .then(() => { + commit(types.GET_ALL_ASSET_TRANSACTIONS_SUCCESS) + resolve() + }) + .catch((err) => { + commit(types.GET_ALL_ASSET_TRANSACTIONS_FAILURE) + reject(err) + throw err + }) + }) + }) + }, + + getPendingTransactions ({ commit }) { + commit(types.GET_PENDING_TRANSACTIONS_REQUEST) + + return irohaUtil.getPendingTransactions() + .then(transactions => commit(types.GET_PENDING_TRANSACTIONS_SUCCESS, transactions)) + .catch(err => { + commit(types.GET_PENDING_TRANSACTIONS_FAILURE, err) + throw err + }) + }, + + transferAsset ({ commit, state }, { privateKeys, assetId, to, description = '', amount }) { commit(types.TRANSFER_ASSET_REQUEST) - return irohaUtil.transferAsset(state.accountId, to, assetId, description, amount) + return irohaUtil.transferAsset(privateKeys, state.accountId, to, assetId, description, amount, state.accountQuorum) .then(() => { commit(types.TRANSFER_ASSET_SUCCESS) }) @@ -280,10 +559,133 @@ const actions = { commit(types.TRANSFER_ASSET_FAILURE, err) throw err }) + }, + + signPendingTransaction ({ commit, state }, { privateKeys, txStoreId }) { + commit(types.SIGN_PENDING_REQUEST) + + return irohaUtil.signPendingTransaction(privateKeys, state.rawPendingTransactions.getTransactionsList()[txStoreId]) + .then(() => { + commit(types.SIGN_PENDING_SUCCESS) + }) + .catch(err => { + commit(types.SIGN_PENDING_FAILURE, err) + throw err + }) + }, + + createSettlement ( + { commit, state }, + { privateKeys, to, offerAssetId, offerAmount, requestAssetId, requestAmount, description = '' } + ) { + commit(types.CREATE_SETTLEMENT_REQUEST) + + return irohaUtil.createSettlement( + privateKeys, + state.accountId, + state.accountQuorum, + offerAssetId, + offerAmount, + description, + to, + 1, + requestAssetId, + requestAmount + ) + .then(() => { + commit(types.CREATE_SETTLEMENT_SUCCESS) + }) + .catch(err => { + commit(types.CREATE_SETTLEMENT_FAILURE, err) + throw err + }) + }, + + acceptSettlement ({ commit, state }, { privateKeys, settlementBatch }) { + commit(types.ACCEPT_SETTLEMENT_REQUEST) + const batch = findBatchFromRaw(state.rawUnsignedTransactions, settlementBatch) + return irohaUtil.acceptSettlement(privateKeys, batch) + .then(() => { + commit(types.ACCEPT_SETTLEMENT_SUCCESS) + }) + .catch(err => { + commit(types.ACCEPT_SETTLEMENT_FAILURE, err) + throw err + }) + }, + + rejectSettlement ({ commit, state }, { privateKeys, settlementBatch }) { + commit(types.REJECT_SETTLEMENT_REQUEST) + const batch = findBatchFromRaw(state.rawUnsignedTransactions, settlementBatch) + const fake = new Array(state.accountQuorum) + .fill('1234567890123456789012345678901234567890123456789012345678901234') + return irohaUtil.rejectSettlement(fake, batch) + .then(() => { + commit(types.REJECT_SETTLEMENT_SUCCESS) + }) + .catch(err => { + commit(types.REJECT_SETTLEMENT_FAILURE, err) + throw err + }) + }, + + addSignatory ({ commit, state }, privateKeys) { + commit(types.ADD_ACCOUNT_SIGNATORY_REQUEST) + + const { privateKey } = irohaUtil.generateKeypair() + const publicKeyBuffer = derivePublicKey(Buffer.from(privateKey, 'hex')) + return irohaUtil.addSignatory(privateKeys, state.accountId, publicKeyBuffer, state.accountQuorum) + .then(() => commit(types.ADD_ACCOUNT_SIGNATORY_SUCCESS)) + .then(() => ({ username: state.accountId, privateKey })) + .catch(err => { + commit(types.ADD_ACCOUNT_SIGNATORY_FAILURE, err) + throw err + }) + }, + + removeSignatory ({ commit, state }, { privateKeys, publicKey }) { + commit(types.REMOVE_ACCOUNT_SIGNATORY_REQUEST) + return irohaUtil.removeSignatory(privateKeys, state.accountId, publicKey, state.accountQuorum) + .then(() => commit(types.REMOVE_ACCOUNT_SIGNATORY_SUCCESS)) + .catch(err => { + commit(types.REMOVE_ACCOUNT_SIGNATORY_FAILURE, err) + throw err + }) + }, + + getSignatories ({ commit, state }) { + commit(types.GET_ACCOUNT_SIGNATORIES_REQUEST) + return irohaUtil.getSignatories(state.accountId) + .then((keys) => commit(types.GET_ACCOUNT_SIGNATORIES_SUCCESS, keys)) + .catch(err => { + commit(types.GET_ACCOUNT_SIGNATORIES_FAILURE, err) + throw err + }) + }, + + editAccountQuorum ({ commit, state }, { privateKeys, quorum }) { + commit(types.EDIT_ACCOUNT_QUORUM_REQUEST) + return irohaUtil.setAccountQuorum(privateKeys, state.accountId, quorum, state.accountQuorum) + .then(() => commit(types.EDIT_ACCOUNT_QUORUM_SUCCESS)) + .catch(err => { + commit(types.EDIT_ACCOUNT_QUORUM_FAILURE, err) + throw err + }) + }, + + getAccountQuorum ({ commit, state }) { + commit(types.GET_ACCOUNT_QUORUM_REQUEST) + return irohaUtil.getAccount(state.accountId) + .then((account) => commit(types.GET_ACCOUNT_QUORUM_SUCCESS, account)) + .catch(err => { + commit(types.GET_ACCOUNT_QUORUM_FAILURE, err) + throw err + }) } } export default { + types, state, getters, mutations, diff --git a/src/store/App.js b/src/store/App.js new file mode 100644 index 000000000..0a03f3b4b --- /dev/null +++ b/src/store/App.js @@ -0,0 +1,227 @@ +import Vue from 'vue' +import map from 'lodash/fp/map' +import flatMap from 'lodash/fp/flatMap' +import concat from 'lodash/fp/concat' +import fromPairs from 'lodash/fp/fromPairs' +import flow from 'lodash/fp/flow' +import cryptoCompareUtil from '@util/cryptoApi-axios-util' +import { getParsedItem, setStringifyItem } from '@util/storage-util' + +const types = flow( + flatMap(x => [x + '_REQUEST', x + '_SUCCESS', x + '_FAILURE']), + concat([ + 'APPROVAL_DIALOG_OPEN', + 'APPROVAL_DIALOG_CLOSE', + 'EXCHANGE_DIALOG_OPEN', + 'EXCHANGE_DIALOG_CLOSE', + 'SET_EXCHANGE_DIALOG_OFFER_ASSET', + 'SET_EXCHANGE_DIALOG_REQUEST_ASSET', + 'LOAD_WALLETS_SORT_CRITERION', + 'UPDATE_WALLETS_SORT_CRITERION', + 'LOAD_DASHBOARD_SORT_CRITERION', + 'UPDATE_DASHBOARD_SORT_CRITERION' + ]), + map(x => [x, x]), + fromPairs +)([ + 'GET_OFFER_TO_REQUEST_PRICE' +]) + +function initialState () { + return { + approvalDialog: { + isVisible: false, + signatures: [], + resolvePrompting: null, + rejectPrompting: null, + requiredMinAmount: 1 + }, + exchangeDialog: { + isVisible: false, + offerAsset: null, + requestAsset: null, + price: null + }, + connectionError: null, + walletsSortCriterion: null, + dashboardSortCriterion: null + } +} + +function handleError (state, err) { + state.connectionError = err +} + +const state = initialState() + +const mutations = { + [types.APPROVAL_DIALOG_OPEN] (state, { resolvePrompting, rejectPrompting, signatures, requiredMinAmount }) { + Vue.set(state, 'approvalDialog', { + isVisible: true, + resolvePrompting, + rejectPrompting, + signatures, + requiredMinAmount + }) + }, + [types.APPROVAL_DIALOG_CLOSE] (state, privateKeys) { + Vue.set(state.approvalDialog, 'isVisible', false) + Vue.set(state.approvalDialog, 'signatures', []) + state.approvalDialog.resolvePrompting(privateKeys) + }, + [types.EXCHANGE_DIALOG_OPEN] (state, asset) { + const offerAsset = asset || null + Vue.set(state, 'exchangeDialog', { + isVisible: true, + offerAsset + }) + }, + [types.EXCHANGE_DIALOG_CLOSE] (state) { + Vue.set(state, 'exchangeDialog', { + isVisible: false, + offerAsset: null, + requestAsset: null, + price: null + }) + }, + [types.SET_EXCHANGE_DIALOG_OFFER_ASSET] (state, offerAsset) { + Vue.set(state.exchangeDialog, 'offerAsset', offerAsset) + }, + [types.SET_EXCHANGE_DIALOG_REQUEST_ASSET] (state, requestAsset) { + Vue.set(state.exchangeDialog, 'requestAsset', requestAsset) + }, + [types.GET_OFFER_TO_REQUEST_PRICE_REQUEST] (state) {}, + + [types.GET_OFFER_TO_REQUEST_PRICE_SUCCESS] (state, price) { + Vue.set(state.exchangeDialog, 'price', price) + }, + [types.GET_OFFER_TO_REQUEST_PRICE_FAILURE] (state, err) { + handleError(state, err) + }, + [types.LOAD_WALLETS_SORT_CRITERION] (state, criterion) { + state.walletsSortCriterion = criterion + }, + [types.UPDATE_WALLETS_SORT_CRITERION] (state, criterion) { + state.walletsSortCriterion = criterion + }, + [types.LOAD_DASHBOARD_SORT_CRITERION] (state, criterion) { + state.dashboardSortCriterion = criterion + }, + [types.UPDATE_DASHBOARD_SORT_CRITERION] (state, criterion) { + state.dashboardSortCriterion = criterion + } +} + +const actions = { + /* + * openApprovalDialog returns a Promise and closeApprovalDialog resolves it. + * This allows the caller to simply chain postprocesses like this: + * ``` + * openApprovalDialog().then(input => ...) + * ``` + * + * It does a hacky way of exporting resolve/reject outside Promise in order to + * resolve the Promise at closeApprovalDialog. + * c.f. https://stackoverflow.com/questions/26150232/resolve-javascript-promise-outside-function-scope + */ + openApprovalDialog ({ commit }, { signatures = [], requiredMinAmount = 1 } = {}) { + let resolvePrompting, rejectPrompting + const prompting = new Promise((resolve, reject) => { + resolvePrompting = resolve + rejectPrompting = reject + }) + + commit(types.APPROVAL_DIALOG_OPEN, { + resolvePrompting, + rejectPrompting, + signatures, + requiredMinAmount + }) + + return prompting + }, + closeApprovalDialog ({ commit }, privateKeys) { + commit(types.APPROVAL_DIALOG_CLOSE, privateKeys) + }, + openExchangeDialog ({ commit }, offerAsset) { + commit(types.EXCHANGE_DIALOG_OPEN, offerAsset) + }, + closeExchangeDialog ({ commit }) { + commit(types.EXCHANGE_DIALOG_CLOSE) + }, + getOfferToRequestPrice ({ commit, getters }) { + const offerAsset = getters.exchangeDialogOfferAsset + const requestAsset = getters.exchangeDialogRequestAsset + if (offerAsset && requestAsset) { + cryptoCompareUtil.loadPriceForAssets({ + from: offerAsset, + to: requestAsset + }) + .then(data => commit(types.GET_OFFER_TO_REQUEST_PRICE_SUCCESS, data[requestAsset])) + .catch(err => { + commit(types.GET_OFFER_TO_REQUEST_PRICE_FAILURE, err) + throw err + }) + } + }, + loadWalletsSortCriterion ({ commit }) { + const criterion = getParsedItem('walletsSortCriterion') + + if (criterion) { + commit(types.LOAD_WALLETS_SORT_CRITERION, criterion) + } + }, + updateWalletsSortCriterion ({ commit }, criterion) { + setStringifyItem('walletsSortCriterion', criterion) + commit(types.UPDATE_WALLETS_SORT_CRITERION, criterion) + }, + loadDashboardSortCriterion ({ commit }) { + const criterion = getParsedItem('dashboardSortCriterion') + + if (criterion) { + commit(types.LOAD_DASHBOARD_SORT_CRITERION, criterion) + } + }, + updateDashboardSortCriterion ({ commit }, criterion) { + setStringifyItem('dashboardSortCriterion', criterion) + commit(types.UPDATE_DASHBOARD_SORT_CRITERION, criterion) + } +} + +const getters = { + approvalDialogVisible () { + return state.approvalDialog.isVisible + }, + approvalDialogSignatures () { + return state.approvalDialog.signatures + }, + approvalDialogMinAmountKeys () { + return state.approvalDialog.requiredMinAmount + }, + exchangeDialogVisible () { + return state.exchangeDialog.isVisible + }, + exchangeDialogOfferAsset () { + return state.exchangeDialog.offerAsset + }, + exchangeDialogRequestAsset () { + return state.exchangeDialog.requestAsset + }, + exchangeDialogPrice () { + return state.exchangeDialog.price + }, + walletsSortCriterion (state) { + return state.walletsSortCriterion + }, + dashboardSortCriterion (state) { + return state.dashboardSortCriterion + } +} + +export default { + types, + state, + getters, + mutations, + actions +} diff --git a/src/store/Dashboard.js b/src/store/Dashboard.js new file mode 100644 index 000000000..d15792df6 --- /dev/null +++ b/src/store/Dashboard.js @@ -0,0 +1,299 @@ +import Vue from 'vue' +import map from 'lodash/fp/map' +import flatMap from 'lodash/fp/flatMap' +import filter from 'lodash/fp/filter' +import concat from 'lodash/fp/concat' +import fromPairs from 'lodash/fp/fromPairs' +import flow from 'lodash/fp/flow' +import last from 'lodash/fp/last' +import nth from 'lodash/fp/nth' +import cryptoCompareUtil from '@util/cryptoApi-axios-util' + +const types = flow( + flatMap(x => [x + '_REQUEST', x + '_SUCCESS', x + '_FAILURE']), + concat([ + 'RESET', + 'GET_PORTFOLIO_FULL_PRICE', + 'GET_PORTFOLIO_PRICE_LIST', + 'GET_PORTFOLIO_PRICE_PERCENTAGE', + 'SELECT_CHART_FILTER', + 'SELECT_CHART_CRYPTO', + 'SELECT_PORTFOLIO_FILTER' + ]), + map(x => [x, x]), + fromPairs +)([ + 'LOAD_DASHBOARD', + 'GET_PRICE_BY_FILTER', + 'GET_PORTFOLIO_HISTORY' +]) + +const convertData = (obj, wallets) => { + const getEqTime = (t) => { + return flow( + filter(c => c.data.length), + map(c => ({ + asset: c.asset, + value: c.data.find(d => d.time === t) + })) + )(obj) + } + const getSum = (d) => { + return d.reduce((p, n) => { + const crypto = wallets.find(c => c.asset === n.asset) + return p + (n.value.close * crypto.amount) + }, 0) + } + const timeKey = obj.find(c => { + return c.data.length && c.data[0].time + }) + return flow( + map('time'), + map(t => { + const d = getEqTime(t) + const s = getSum(d) + return { + time: t, + sum: s, + data: d + } + }) + )(timeKey.data) +} + +function initialState () { + return { + portfolio: { + assetsFullPrice: { + diff: 0, + value: 0, + percent: 0 + }, + assetsPercentage: [], + assetsHistory: [], + isLoading: false, + filter: '1W' + }, + assetList: [], + assetChart: { + filter: '1M', + crypto: null, + data: [], + isLoading: false + }, + isLoading: false, + connectionError: null + } +} + +const state = initialState() + +const getters = { + portfolioPrice (state) { + return state.portfolio.assetsFullPrice + }, + portfolioPercent (state) { + return state.portfolio.assetsPercentage + }, + portfolioFilter (state) { + return state.portfolio.filter + }, + portfolioChart (state) { + return state.assetChart + }, + portfolioHistory (state) { + return state.portfolio.assetsHistory + }, + portfolioList (state) { + return state.assetList + }, + portfolioHistoryIsLoading (state) { + return state.portfolio.isLoading + }, + connectionError (state) { + return state.connectionError + }, + isDashboardLoading (state) { + return state.isLoading + } +} + +/** + * Store a connection error so the top component can handle it. + * @param {Object} state + * @param {Error} err + */ +function handleError (state, err) { + state.connectionError = err +} + +const mutations = { + [types.RESET] (state) { + const s = initialState() + Object.keys(s).forEach(key => { + state[key] = s[key] + }) + }, + + [types.GET_PORTFOLIO_FULL_PRICE] (state) { + const today = last(state.portfolio.assetsHistory).sum + const prevDay = nth(-2)(state.portfolio.assetsHistory).sum + Vue.set(state.portfolio, 'assetsFullPrice', { + value: today.toFixed(2), + diff: (today - prevDay).toFixed(2), + percent: (100 - ((prevDay * 100) / today)).toFixed(2) + }) + }, + + [types.GET_PORTFOLIO_PRICE_PERCENTAGE] (state, wallets) { + const today = last(state.portfolio.assetsHistory) + const currencies = [] + today.data.map(crypto => { + const walletAsset = wallets.find(w => w.asset === crypto.asset) + currencies.push({ + asset: crypto.asset, + color: walletAsset.color, + price: crypto.value.close, + percent: (crypto.value.close * walletAsset.amount * 100) / today.sum + }) + }) + Vue.set(state.portfolio, 'assetsPercentage', currencies) + }, + + [types.GET_PORTFOLIO_PRICE_LIST] (state, wallets) { + const today = last(state.portfolio.assetsHistory) + const prevDay = nth(-2)(state.portfolio.assetsHistory) + const toZero = (v) => isNaN(v) ? 0 : v + const currencies = [] + today.data.map(crypto => { + const walletAsset = wallets.find(w => w.asset === crypto.asset) + const prevDayAsset = prevDay.data.find(c => c.asset === crypto.asset) + const amountToday = walletAsset.amount * crypto.value.close + const amountPrevDay = walletAsset.amount * prevDayAsset.value.close + currencies.push({ + asset: crypto.asset, + name: walletAsset.name, + price: amountToday, + diff: amountToday - amountPrevDay, + percent: toZero(100 - ((amountPrevDay * 100) / amountToday)) + }) + }) + state.assetList = currencies + }, + + [types.GET_PRICE_BY_FILTER_REQUEST] (state) { + Vue.set(state.assetChart, 'isLoading', true) + }, + + [types.GET_PRICE_BY_FILTER_SUCCESS] (state, data) { + Vue.set(state.assetChart, 'data', data) + Vue.set(state.assetChart, 'isLoading', false) + }, + + [types.GET_PRICE_BY_FILTER_FAILURE] (state, err) { + Vue.set(state.assetChart, 'isLoading', false) + handleError(state, err) + }, + + [types.GET_PORTFOLIO_HISTORY_REQUEST] (state) { + Vue.set(state.portfolio, 'isLoading', true) + }, + + [types.GET_PORTFOLIO_HISTORY_SUCCESS] (state, data) { + Vue.set(state.portfolio, 'assetsHistory', data) + Vue.set(state.portfolio, 'isLoading', false) + }, + + [types.GET_PORTFOLIO_HISTORY_FAILURE] (state, err) { + Vue.set(state.portfolio, 'isLoading', false) + handleError(state, err) + }, + + [types.SELECT_PORTFOLIO_FILTER] (state, filter) { + Vue.set(state.portfolio, 'filter', filter) + }, + + [types.SELECT_CHART_FILTER] (state, filter) { + Vue.set(state.assetChart, 'filter', filter) + }, + + [types.SELECT_CHART_CRYPTO] (state, crypto) { + Vue.set(state.assetChart, 'crypto', crypto) + }, + + [types.LOAD_DASHBOARD_REQUEST] (state) { + state.isLoading = true + }, + + [types.LOAD_DASHBOARD_SUCCESS] (state) { + state.isLoading = false + }, + + [types.LOAD_DASHBOARD_FAILURE] (state, err) { + state.isLoading = false + handleError(state, err) + } +} + +const actions = { + loadDashboard ({ dispatch, commit, getters }) { + commit(types.LOAD_DASHBOARD_REQUEST) + dispatch('getAccountAssets') + .then(async () => { + if (!getters.wallets.length) return + + await dispatch('getPortfolioHistory', { filter: getters.portfolioFilter }) + + commit('GET_PORTFOLIO_FULL_PRICE') + commit('GET_PORTFOLIO_PRICE_PERCENTAGE', getters.wallets) + commit('GET_PORTFOLIO_PRICE_LIST', getters.wallets) + + await dispatch('getPriceByFilter', getters.portfolioChart) + }) + .then(() => commit(types.LOAD_DASHBOARD_SUCCESS)) + .catch((err) => { + commit(types.LOAD_DASHBOARD_FAILURE, err) + throw err + }) + }, + async getPortfolioHistory ({ commit, getters }, { filter }) { + commit(types.SELECT_PORTFOLIO_FILTER, filter) + commit(types.GET_PORTFOLIO_HISTORY_REQUEST) + + await cryptoCompareUtil.loadHistoryByLabels(getters.wallets, getters.settingsView, { filter }) + .then(history => { + commit(types.GET_PORTFOLIO_HISTORY_SUCCESS, convertData(history, getters.wallets)) + }) + .catch(err => { + commit(types.GET_PORTFOLIO_HISTORY_FAILURE, err) + throw err + }) + }, + async getPriceByFilter ({ commit, getters }, data) { + const wallets = getters.wallets.filter(w => Number(w.amount) !== 0) + const crypto = (wallets.length && !data.crypto) ? getters.portfolioChart.crypto || wallets[0].asset : data.crypto + if (crypto) { + commit(types.SELECT_CHART_CRYPTO, crypto) + } + if (data.filter) { + commit(types.SELECT_CHART_FILTER, data.filter) + } + + const filter = getters.portfolioChart + commit(types.GET_PRICE_BY_FILTER_REQUEST) + await cryptoCompareUtil.loadPriceByFilter(filter, getters.settingsView) + .then(({ Data }) => commit(types.GET_PRICE_BY_FILTER_SUCCESS, Data)) + .catch(err => { + commit(types.GET_PRICE_BY_FILTER_FAILURE, err) + throw err + }) + } +} + +export default { + types, + state, + getters, + mutations, + actions +} diff --git a/src/store/Settings.js b/src/store/Settings.js new file mode 100644 index 000000000..d29f389b9 --- /dev/null +++ b/src/store/Settings.js @@ -0,0 +1,100 @@ +import Vue from 'vue' +import map from 'lodash/fp/map' +import fromPairs from 'lodash/fp/fromPairs' +import flow from 'lodash/fp/flow' +import omit from 'lodash/fp/omit' +import isEqual from 'lodash/fp/isEqual' +import { getParsedItem, setParsedItem, setStringifyItem } from '@util/storage-util' + +const types = flow( + map(x => [x, x]), + fromPairs +)([ + 'LOAD_SETTINGS', + 'UPDATE_SETTINGS_VIEW_FIAT', + 'UPDATE_SETTINGS_VIEW_CRYPTO', + 'UPDATE_SETTINGS_VIEW_TIMEZONE' +]) + +function initialState () { + return { + default: { + fiatCurrencies: ['RUB', 'USD', 'EUR'], + cryptoCurrencies: ['BTC', 'ETH', 'XRP'] + }, + view: { + fiat: 'RUB', + crypto: 'BTC', + timezone: 'Europe/Moscow' + } + } +} + +const state = initialState() + +const getters = { + settingsView (state) { + return state.view + }, + settingsFiatCurrencies (state) { + return state.default.fiatCurrencies + }, + settingsCryptoCurrencies (state) { + return state.default.cryptoCurrencies + } +} + +const mutations = { + [types.LOAD_SETTINGS] (state, storage) { + if (!isEqual(state, storage)) { + Object.keys(state).map(key => { + if (key !== 'default') { + state[key] = storage[key] + } + }) + } + }, + + [types.UPDATE_SETTINGS_VIEW_FIAT] (state, fiat) { + Vue.set(state.view, 'fiat', fiat) + }, + + [types.UPDATE_SETTINGS_VIEW_CRYPTO] (state, crypto) { + Vue.set(state.view, 'crypto', crypto) + }, + + [types.UPDATE_SETTINGS_VIEW_TIMEZONE] (state, timezone) { + Vue.set(state.view, 'timezone', timezone) + } +} + +const actions = { + loadSettings ({ commit, state }) { + const storage = getParsedItem('settings') + if (storage) { + commit(types.LOAD_SETTINGS, storage) + } else { + setStringifyItem('settings', omit('default')(state)) + } + }, + updateSettingsViewFiat ({ commit }, fiat) { + setParsedItem('settings.view.fiat', fiat) + commit(types.UPDATE_SETTINGS_VIEW_FIAT, fiat) + }, + updateSettingsViewCrypto ({ commit }, crypto) { + setParsedItem('settings.view.crypto', crypto) + commit(types.UPDATE_SETTINGS_VIEW_CRYPTO, crypto) + }, + updateSettingsViewTime ({ commit }, timezone) { + setParsedItem('settings.view.timezone', timezone) + commit(types.UPDATE_SETTINGS_VIEW_TIMEZONE, timezone) + } +} + +export default { + types, + state, + getters, + mutations, + actions +} diff --git a/src/store/Wallet.js b/src/store/Wallet.js new file mode 100644 index 000000000..3a10504a1 --- /dev/null +++ b/src/store/Wallet.js @@ -0,0 +1,176 @@ +import Vue from 'vue' +import map from 'lodash/fp/map' +import flatMap from 'lodash/fp/flatMap' +import concat from 'lodash/fp/concat' +import fromPairs from 'lodash/fp/fromPairs' +import flow from 'lodash/fp/flow' +import cryptoCompareUtil from '@util/cryptoApi-axios-util' + +const types = flow( + flatMap(x => [x + '_REQUEST', x + '_SUCCESS', x + '_FAILURE']), + concat([ + 'RESET' + ]), + map(x => [x, x]), + fromPairs +)([ + 'GET_CRYPTO_FULL_DATA' +]) + +function initialState () { + return { + cryptoInfo: { + current: { + fiat: 0, + fiat_change: 0, + crypto: 0, + crypto_change: 0 + }, + market: { + cap: { + fiat: 0, + crypto: 0 + }, + volume: { + fiat: 0, + crypto: 0 + }, + supply: 0 + }, + isLoading: false + }, + connectionError: null + } +} + +const state = initialState() + +const getters = { + cryptoInfo (state) { + return state.cryptoInfo + } +} + +/** + * Store a connection error so the top component can handle it. + * @param {Object} state + * @param {Error} err + */ +function handleError (state, err) { + state.connectionError = err +} + +const mutations = { + [types.RESET] (state) { + const s = initialState() + Object.keys(s).forEach(key => { + state[key] = s[key] + }) + }, + + [types.GET_CRYPTO_FULL_DATA_REQUEST] (state) { + Vue.set(state.cryptoInfo, 'isLoading', true) + }, + + [types.GET_CRYPTO_FULL_DATA_SUCCESS] ( + state, + { + historicalDataFiat, + historicalDataCrypto, + volumeData, + priceData, + currencies + } + ) { + // process priceData + const RAW = Object.values(priceData.RAW)[0] + const compareToFiat = RAW[currencies.fiat] + const compareToCrypto = RAW[currencies.crypto] + + const priceFiat = compareToFiat.PRICE + const priceCrypto = compareToCrypto.PRICE + const marketcapFiat = compareToFiat.MKTCAP + const marketcapCrypto = compareToFiat.SUPPLY + const circulatingSupply = compareToFiat.SUPPLY + + // process historicalData + const getChangeInfo = ({ Data }) => { + const closeOfTheFirstSpan = Data.filter(x => Number.isFinite(x.close) && x.close > 0)[0].close + const closeOfTheLastSpan = Data[Data.length - 1].close + const change = closeOfTheLastSpan - closeOfTheFirstSpan + const changePct = (change / closeOfTheFirstSpan) * 100 + + return [change, changePct] + } + const [changeFiat] = getChangeInfo(historicalDataFiat) + const [, changePctCrypto] = getChangeInfo(historicalDataCrypto) + + // process volumeData + const volumeCrypto = volumeData.Data + .filter(({ volume }) => Number.isFinite(volume)) + .reduce((sum, { volume }) => sum + volume, 0) + const volumeFiat = priceFiat * volumeCrypto + + Vue.set(state, 'cryptoInfo', { + current: { + fiat: priceFiat, + fiat_change: changeFiat, + crypto: priceCrypto, + crypto_change: changePctCrypto + }, + market: { + cap: { + fiat: marketcapFiat, + crypto: marketcapCrypto + }, + volume: { + fiat: volumeFiat, + crypto: volumeCrypto + }, + supply: circulatingSupply + }, + isLoading: false + }) + }, + + [types.GET_CRYPTO_FULL_DATA_FAILURE] (state, err) { + Vue.set(state.cryptoInfo, 'isLoading', false) + handleError(state, err) + } +} + +const actions = { + getCryptoFullData ({ commit, getters }, { filter, asset }) { + commit(types.GET_CRYPTO_FULL_DATA_REQUEST) + + const currencies = getters.settingsView + + return Promise.all([ + cryptoCompareUtil.loadPriceByFilter({ filter, crypto: asset, to: currencies.fiat }, currencies), + cryptoCompareUtil.loadPriceByFilter({ filter, crypto: asset, to: currencies.crypto }, currencies), + cryptoCompareUtil.loadVolumeByFilter({ filter, crypto: asset }), + cryptoCompareUtil.loadFullData(asset, currencies) + ]) + .then(([historicalDataFiat, historicalDataCrypto, volumeData, priceData]) => { + commit(types.GET_CRYPTO_FULL_DATA_SUCCESS, { + historicalDataFiat, + historicalDataCrypto, + volumeData, + priceData, + currencies + }) + }) + .catch(err => { + commit(types.GET_CRYPTO_FULL_DATA_FAILURE, err) + throw err + }) + } +} + +export default { + types, + state, + getters, + mutations, + actions +} diff --git a/src/util/crypto-list.json b/src/util/crypto-list.json new file mode 100644 index 000000000..44d08ee15 --- /dev/null +++ b/src/util/crypto-list.json @@ -0,0 +1,62 @@ +[ + { + "name": "Bitcoin", + "asset": "BTC", + "color": "f7931a" + }, + { + "name": "OmiseGo", + "asset": "OMG", + "color": "ffb055" + }, + { + "name": "BasicAttentionToken", + "asset": "BAT", + "color": "0055fe" + }, + { + "name": "Augur", + "asset": "REP", + "color": "494949" + }, + { + "name": "EOS", + "asset": "EOS", + "color": "ffb055" + }, + { + "name": "Bytom", + "asset": "BTM", + "color": "0055fe" + }, + { + "name": "Golem", + "asset": "GNT", + "color": "f4f4f8" + }, + { + "name": "DGD", + "asset": "DGD", + "color": "e6e6ea" + }, + { + "name": "Monaco", + "asset": "MCO", + "color": "fed766" + }, + { + "name": "Salt", + "asset": "SALT", + "color": "2ab7ca" + }, + { + "name": "ICONOMI", + "asset": "ICN", + "color": "fe4a49" + }, + { + "name": "ether", + "asset": "ETH", + "color": "141414" + } +] \ No newline at end of file diff --git a/src/util/cryptoApi-axios-util.js b/src/util/cryptoApi-axios-util.js new file mode 100644 index 000000000..2b3756e4e --- /dev/null +++ b/src/util/cryptoApi-axios-util.js @@ -0,0 +1,172 @@ +import axios from 'axios' + +const API_URL = process.env.VUE_APP_CRYPTO_API_URL || 'https://min-api.cryptocompare.com/' + +let axiosAPI = axios.create({ + baseURL: API_URL +}) + +const loadHistoryByLabels = axios => (currencies, settings, options = {}) => { + const currentFiat = settings.fiat + const dateFilter = { + 'ALL': { + url: 'histoday', + time: 730 + }, + '1Y': { + url: 'histoday', + time: 365 + }, + '1M': { + url: 'histoday', + time: 30 + }, + '1W': { + url: 'histoday', + time: 7 + }, + '1D': { + url: 'histohour', + time: 24 + }, + '1H': { + url: 'histominute', + time: 60 + } + } + const search = dateFilter[options.filter] + const endpoint = 'data/' + (search ? search.url : 'histoday') + const history = currencies.map(crypto => { + return axios + .get(endpoint, { + params: { + fsym: crypto.asset, + tsym: currentFiat, + limit: options.limit || search.time, + toTs: options.toTs + } + }) + }) + return Promise.all(history) + .then(h => h.map(({ data }, index) => { + return { + data: data.Data, + asset: currencies[index].asset + } + })) +} + +const loadPriceByFilter = axios => ({ crypto, filter, to }, settings) => { + const fsym = crypto + const tsym = to || settings.fiat + const dateFilter = { + 'ALL': { + url: 'histoday', + time: 730 + }, + '1Y': { + url: 'histoday', + time: 365 + }, + '1M': { + url: 'histoday', + time: 30 + }, + '1W': { + url: 'histoday', + time: 7 + }, + '1D': { + url: 'histohour', + time: 24 + }, + '1H': { + url: 'histominute', + time: 60 + } + } + const search = dateFilter[filter] + return axios + .get(`data/${search.url}`, { + params: { + fsym, + tsym, + limit: search.time + } + }) + .then(({ data }) => data) + .catch(error => ({ error })) +} + +const loadVolumeByFilter = axios => ({ crypto, filter }) => { + const dateFilter = { + 'ALL': { + url: 'histoday', + time: 730 + }, + '1Y': { + url: 'histoday', + time: 365 + }, + '1M': { + url: 'histoday', + time: 30 + }, + '1W': { + url: 'histoday', + time: 7 + }, + '1D': { + url: 'histohour', + time: 24 + }, + '1H': { + url: 'histohour', + time: 1 + } + } + const search = dateFilter[filter] + return axios + .get(`data/exchange/${search.url}`, { + params: { + tsym: crypto, + limit: search.time + } + }) + .then(({ data }) => data) + .catch(error => ({ error })) +} + +const loadFullData = axios => (asset, currencies) => { + const currentFiat = currencies.fiat + const currentCrypto = currencies.crypto + return axios + .get('data/pricemultifull', { + params: { + fsyms: asset, + tsyms: `${currentFiat},${currentCrypto}` + } + }) + .then(({ data }) => data) + .catch(error => ({ error })) +} + +const loadPriceForAssets = axios => (assets) => { + return axios + .get('data/price', { + params: { + fsym: assets.from, + tsyms: assets.to + } + }) + .then(({ data }) => data) + .catch(error => ({ error })) +} + +export default { + loadHistoryByLabels: loadHistoryByLabels(axiosAPI), + loadPriceByFilter: loadPriceByFilter(axiosAPI), + loadVolumeByFilter: loadVolumeByFilter(axiosAPI), + loadFullData: loadFullData(axiosAPI), + loadPriceForAssets: loadPriceForAssets(axiosAPI) +} diff --git a/src/util/font-util.js b/src/util/font-util.js new file mode 100644 index 000000000..9c47fe3d7 --- /dev/null +++ b/src/util/font-util.js @@ -0,0 +1,47 @@ +// https://github.com/bpampuch/pdfmake/issues/1374 + +function fetchFont (fontURL) { + return new Promise((resolve, reject) => { + const request = new XMLHttpRequest() + request.open('GET', fontURL, true) + request.responseType = 'arraybuffer' + + request.onload = function (e) { + resolve(request.response) + } + + request.onerror = reject + + request.send() + }) +} + +class PdfFontLoader { + constructor () { + this.fontDefs = [] + this.vfs = {} + } + addFont (fontDef) { + this.fontDefs.push(fontDef) + } + + load () { + return new Promise((resolve, reject) => { + if (this.loaded) { + resolve() + } else { + const fetches = this.fontDefs.map(fontDef => { + return fetchFont(fontDef.URL).then((data) => { + this.vfs[fontDef.name] = data + }) + }) + Promise.all(fetches).then(() => { + this.loaded = true + resolve() + }).catch(reject) + } + }) + } +} + +export const fontLoader = new PdfFontLoader() diff --git a/src/util/iroha-amount.js b/src/util/iroha-amount.js deleted file mode 100644 index a6e031d62..000000000 --- a/src/util/iroha-amount.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - * modify an amount object to a string like '123.45' - */ -export function amountToString ({ value, precision }) { - // TODO: use all values from 'first' to 'fourth' - return String(value.fourth) - .padStart(precision, '0') - .replace(RegExp(`(\\d{${precision}})$`), '.$1') - .replace(/^\./, '0.') - .replace(/\.$/, '') -} diff --git a/src/util/iroha-util.js b/src/util/iroha-util.js deleted file mode 100644 index 498f3360c..000000000 --- a/src/util/iroha-util.js +++ /dev/null @@ -1,566 +0,0 @@ -/* eslint-disable no-unused-vars */ -const debug = require('debug')('iroha-util') -const iroha = require('iroha-lib') -const grpc = require('grpc') - -/** - * default timeout limit of queries - */ -const DEFAULT_TIMEOUT_LIMIT = 5000 - -/** - * cached items available from start to end of the app - * plus, `nodeIp` is persisted by localStorage - */ -const cache = { - username: null, // NOT persisted by localStorage - keys: null, // NOT persisted by localStorage - nodeIp: null // persisted by localStorage -} - -/** - * mock localStorage for testing environment - */ -const localStorage = global.localStorage || { - setItem () {}, - getItem () {}, - removeItem () {} -} - -const endpointGrpc = require('iroha-lib/pb/endpoint_grpc_pb.js') -const pbEndpoint = require('iroha-lib/pb/endpoint_pb.js') -const pbResponse = require('iroha-lib/pb/responses_pb.js') -const txBuilder = new iroha.ModelTransactionBuilder() -const queryBuilder = new iroha.ModelQueryBuilder() -const protoTxHelper = new iroha.ModelProtoTransaction() -const protoQueryHelper = new iroha.ModelProtoQuery() -const crypto = new iroha.ModelCrypto() - -/* - * ===== functions ===== - */ -/** - * login - * @param {String} username - * @param {String} privateKey length is 64 - * @param {String} nodeIp - */ -function login (username, privateKey, nodeIp) { - debug('starting login...') - - if (privateKey.length !== 64) { - return Promise.reject(new Error('privateKey should have length of 64')) - } - - const keys = crypto.convertFromExisting( - crypto.fromPrivateKey(privateKey).publicKey().hex(), - privateKey - ) - - cache.username = username - cache.keys = keys - cache.nodeIp = nodeIp - - localStorage.setItem('iroha-wallet:nodeIp', nodeIp) - - return getAccount(username) - .then(account => { - debug('login succeeded!') - return account - }) - .catch(err => { - debug('login failed') - throw err - }) -} - -/** - * clear local cache - */ -function logout () { - cache.username = null - cache.keys = null - cache.nodeIp = null - - return Promise.resolve() -} - -/** - * return node IP which was used before - */ -function getStoredNodeIp () { - return localStorage.getItem('iroha-wallet:nodeIp') || '' -} - -/** - * clear localStorage - */ -function clearStorage () { - localStorage.removeItem('iroha-wallet:nodeIp') -} - -/** - * return true if logged in - */ -function isLoggedIn () { - return !!cache.username -} - -/* - * ===== queries ===== - */ -/** - * wrapper function of queries - * @param {Function} buildQuery - * @param {Function} onResponse - * @param {Number} timeoutLimit timeoutLimit - */ -function sendQuery ( - buildQuery = function () {}, - onResponse = function (resolve, reject, responseName, response) {}, - timeoutLimit = DEFAULT_TIMEOUT_LIMIT -) { - return new Promise((resolve, reject) => { - const queryClient = new endpointGrpc.QueryServiceClient( - cache.nodeIp, - grpc.credentials.createInsecure() - ) - const query = buildQuery() - const protoQuery = makeProtoQueryWithKeys(query, cache.keys) - - debug('submitting query...') - debug('peer ip:', cache.nodeIp) - debug('parameters:', JSON.stringify(protoQuery.toObject().payload, null, ' ')) - debug('') - - // grpc-node hangs against unresponsive server, which possibly occur when - // invalid node IP is set. To avoid this problem, we use timeout timer. - // c.f. https://github.com/grpc/grpc/issues/13163 - const timer = setTimeout(() => { - queryClient.$channel.close() - const err = new Error('please check IP address OR your internet connection') - err.code = grpc.status.CANCELLED - reject(err) - }, timeoutLimit) - - queryClient.find(protoQuery, (err, response) => { - clearTimeout(timer) - - if (err) { - return reject(err) - } - - debug('submitted query successfully!') - - const type = response.getResponseCase() - const responseName = getProtoEnumName( - pbResponse.QueryResponse.ResponseCase, - 'iroha.protocol.QueryResponse', - type - ) - - onResponse(resolve, reject, responseName, response) - }) - }) -} - -/** - * getAccount https://hyperledger.github.io/iroha-api/#get-account - * @param {String} accountId - */ -function getAccount (accountId) { - debug('starting getAccount...') - - return sendQuery( - () => { - return queryBuilder - .creatorAccountId(cache.username) - .createdTime(Date.now()) - .queryCounter(1) - .getAccount(accountId) - .build() - }, - (resolve, reject, responseName, response) => { - if (responseName !== 'ACCOUNT_RESPONSE') { - return reject(new Error(`Query response error: expected=ACCOUNT_RESPONSE, actual=${responseName}`)) - } - - const account = response.getAccountResponse().getAccount().toObject() - - debug('account', account) - - resolve(account) - } - ) -} - -/** - * getAccountTransactions https://hyperledger.github.io/iroha-api/#get-account-transactions - * @param {String} accountId - */ -function getAccountTransactions (accountId) { - debug('starting getAccountTransactions...') - - return sendQuery( - () => { - return queryBuilder - .creatorAccountId(cache.username) - .createdTime(Date.now()) - .queryCounter(1) - .getAccountTransactions(accountId) - .build() - }, - (resolve, reject, responseName, response) => { - if (responseName !== 'TRANSACTIONS_RESPONSE') { - return reject(new Error(`Query response error: expected=TRANSACTIONS_RESPONSE, actual=${responseName}`)) - } - - const transactions = response.getTransactionsResponse().toObject().transactionsList - - debug('transactions', transactions) - - resolve(transactions) - } - ) -} - -/** - * getAccountAssetTransactions https://hyperledger.github.io/iroha-api/#get-account-asset-transactions - * @param {String} accountId - * @param {String} assetId - */ -function getAccountAssetTransactions (accountId, assetId) { - debug('starting getAccountAssetTransactions...') - - return sendQuery( - () => { - return queryBuilder - .creatorAccountId(cache.username) - .createdTime(Date.now()) - .queryCounter(1) - .getAccountAssetTransactions(accountId, assetId) - .build() - }, - (resolve, reject, responseName, response) => { - if (responseName !== 'TRANSACTIONS_RESPONSE') { - return reject(new Error(`Query response error: expected=TRANSACTIONS_RESPONSE, actual=${responseName}`)) - } - - const transactions = response.getTransactionsResponse().toObject().transactionsList - - debug('transactions', transactions) - - resolve(transactions) - } - ) -} - -// TODO: update parameters and how to handle responses to match the latest API -/** - * getAccountAssets https://hyperledger.github.io/iroha-api/#get-account-assets - * @param {String} accountId - * @param {String} assetId - */ -function getAccountAssets (accountId, assetId) { - debug('starting getAccountAssets...') - - return sendQuery( - () => { - return queryBuilder - .creatorAccountId(cache.username) - .createdTime(Date.now()) - .queryCounter(1) - .getAccountAssets(accountId, assetId) - .build() - }, - (resolve, reject, responseName, response) => { - if (responseName !== 'ACCOUNT_ASSETS_RESPONSE') { - return reject(new Error(`Query response error: expected=ACCOUNT_ASSETS_RESPONSE, actual=${responseName}`)) - } - - const assets = response.getAccountAssetsResponse().toObject() - - debug('assets', assets) - - resolve(assets) - } - ) -} - -/** - * getAssetInfo https://hyperledger.github.io/iroha-api/?protobuf#get-asset-info - * @param {String} assetId - */ -function getAssetInfo (assetId) { - debug('starting getAssetInfo...') - - return sendQuery( - () => { - return queryBuilder - .creatorAccountId(cache.username) - .createdTime(Date.now()) - .queryCounter(1) - .getAssetInfo(assetId) - .build() - }, - (resolve, reject, responseName, response) => { - if (responseName !== 'ASSET_RESPONSE') { - return reject(new Error(`Query response error: expected=ASSET_RESPONSE, actual=${responseName}`)) - } - - const info = response.getAssetResponse().toObject() - - debug('asset info', info) - - resolve(info) - } - ) -} - -/* - * ===== commands ===== - */ -/** - * wrapper function of commands - * @param {Function} buildQuery - * @param {Number} timeoutLimit timeoutLimit - */ -function command ( - buildTx = function () {}, - timeoutLimit = DEFAULT_TIMEOUT_LIMIT -) { - let txClient, txHash - - return new Promise((resolve, reject) => { - const tx = buildTx() - const protoTx = makeProtoTxWithKeys(tx, cache.keys) - - txClient = new endpointGrpc.CommandServiceClient( - cache.nodeIp, - grpc.credentials.createInsecure() - ) - txHash = blob2array(tx.hash().blob()) - - debug('submitting transaction...') - debug('peer ip:', cache.nodeIp) - debug('parameters:', JSON.stringify(protoTx.toObject().payload, null, ' ')) - debug('txhash:', Buffer.from(txHash).toString('hex')) - debug('') - - const timer = setTimeout(() => { - txClient.$channel.close() - reject(new Error('please check IP address OR your internet connection')) - }, timeoutLimit) - - txClient.torii(protoTx, (err, data) => { - clearTimeout(timer) - - if (err) { - return reject(err) - } - - debug('submitted transaction successfully!') - resolve() - }) - }) - .then(() => { - debug('sleep 5 seconds...') - return sleep(5000) - }) - .then(() => { - debug('sending transaction status request...') - - return new Promise((resolve, reject) => { - const request = new pbEndpoint.TxStatusRequest() - - request.setTxHash(txHash) - - txClient.status(request, (err, response) => { - if (err) { - return reject(err) - } - - const status = response.getTxStatus() - const TxStatus = require('iroha-lib/pb/endpoint_pb.js').TxStatus - const statusName = getProtoEnumName( - TxStatus, - 'iroha.protocol.TxStatus', - status - ) - - if (statusName !== 'COMMITTED') { - return reject(new Error(`Your transaction wasn't commited: expected=COMMITED, actual=${statusName}`)) - } - - resolve() - }) - }) - }) -} - -/** - * createAccount https://hyperledger.github.io/iroha-api/?protobuf#create-account - * @param {String} accountName - * @param {String} domainId - * @param {String} mainPubKey - */ -function createAccount (accountName, domainId, mainPubKey) { - debug('starting createAccount...') - - return command( - function buildTx () { - return txBuilder - .creatorAccountId(cache.username) - .createdTime(Date.now()) - .createAccount(accountName, domainId, mainPubKey) - .build() - } - ) -} - -/** - * createAsset https://hyperledger.github.io/iroha-api/#create-asset - * @param {String} assetName - * @param {String} domainI - * @param {Number} precision - */ -function createAsset (assetName, domainId, precision) { - debug('starting createAsset...') - - return command( - function buildTx () { - return txBuilder - .creatorAccountId(cache.username) - .createdTime(Date.now()) - .createAsset(assetName, domainId, precision) - .build() - } - ) -} - -/** - * addAssetQuantity https://hyperledger.github.io/iroha-api/#add-asset-quantity - * @param {String} accountId - * @param {String} assetId - * @param {String} amount - */ -function addAssetQuantity (accountId, assetId, amount) { - debug('starting addAssetQuantity...') - - return command( - function buildTx () { - return txBuilder - .creatorAccountId(cache.username) - .createdTime(Date.now()) - .addAssetQuantity(accountId, assetId, amount) - .build() - } - ) -} - -/** - * transferAsset https://hyperledger.github.io/iroha-api/#transfer-asset - * @param {String} srcAccountId - * @param {String} destAccountId - * @param {String} assetId - * @param {String} description - * @param {String} amount - */ -function transferAsset (srcAccountId, destAccountId, assetId, description, amount) { - debug('starting transferAsset...') - - return command( - function () { - return txBuilder - .creatorAccountId(cache.username) - .createdTime(Date.now()) - .transferAsset(srcAccountId, destAccountId, assetId, description, amount) - .build() - } - ) -} - -/* - * ===== utilities === - */ -function sleep (ms) { - return new Promise(resolve => setTimeout(resolve, ms)) -} - -function blob2array (blob) { - const bytearray = new Uint8Array(blob.size()) - for (let i = 0; i < blob.size(); ++i) { - bytearray[i] = blob.get(i) - } - return bytearray -} - -const protoEnumName = {} -function getProtoEnumName (obj, key, value) { - if (protoEnumName.hasOwnProperty(key)) { - if (protoEnumName[key].length < value) { - return 'unknown' - } else { - return protoEnumName[key][value] - } - } else { - protoEnumName[key] = [] - for (var k in obj) { - let idx = obj[k] - if (isNaN(idx)) { - debug( - 'getProtoEnumName:wrong enum value, now is type of ' + - typeof idx + - ' should be integer' - ) - } else { - protoEnumName[key][idx] = k - } - } - return getProtoEnumName(obj, key, value) - } -} - -function makeProtoQueryWithKeys (builtQuery, keys) { - const pbQuery = require('iroha-lib/pb/queries_pb.js').Query - - const blob = protoQueryHelper.signAndAddSignature(builtQuery, keys).blob() - const arr = blob2array(blob) - const protoQuery = pbQuery.deserializeBinary(arr) - - return protoQuery -} - -function makeProtoTxWithKeys (builtTx, keys) { - const pbTransaction = require('iroha-lib/pb/block_pb.js').Transaction - - const blob = protoTxHelper.signAndAddSignature(builtTx, keys).blob() - const arr = blob2array(blob) - const protoTx = pbTransaction.deserializeBinary(arr) - - return protoTx -} - -/* - * ===== export === - */ -module.exports = { - getStoredNodeIp, - clearStorage, - login, - logout, - isLoggedIn, - - // queries - getAccount, - getAccountAssets, - getAccountAssetTransactions, - getAccountTransactions, - getAssetInfo, - - // commands - createAccount, - createAsset, - transferAsset, - addAssetQuantity -} diff --git a/src/util/iroha/commands.js b/src/util/iroha/commands.js new file mode 100644 index 000000000..5abddd0cf --- /dev/null +++ b/src/util/iroha/commands.js @@ -0,0 +1,394 @@ +import { txHelper } from 'iroha-helpers' +import { CommandServiceClient } from 'iroha-helpers/lib/proto/endpoint_pb_service' +import { TxStatus, TxStatusRequest } from 'iroha-helpers/lib/proto/endpoint_pb' +import { + cache, + getProtoEnumName, + DEFAULT_TIMEOUT_LIMIT +} from './util' +import cloneDeep from 'lodash/fp/cloneDeep' + +import Debug from 'debug' +const debug = Debug('iroha-util') + +/** + * wrapper function of commands + * @param {Array.} privateKeys array of private keys + * @param {Object} tx transaction + * @param {Number} timeoutLimit + */ +function command ( + privateKeys = [''], + tx, + quorum = 1, + timeoutLimit = DEFAULT_TIMEOUT_LIMIT +) { + let txToSend = txHelper.addMeta(tx, { + creatorAccountId: cache.username, + quorum + }) + + txToSend = signWithArrayOfKeys(txToSend, privateKeys) + + let txClient = new CommandServiceClient( + cache.nodeIp + ) + + return sendTransactions([txToSend], txClient, timeoutLimit) +} + +/** + * signPendingTransaction: sign transaction with more keys and send. + * @param {Array.} privateKeys + * @param {Object} transaction + */ +function signPendingTransaction (privateKeys = [], transaction, timeoutLimit = DEFAULT_TIMEOUT_LIMIT) { + debug('starting signPendingTransaction...') + + /* + * TODO: Remove clearSignaturesList() after + * https://soramitsu.atlassian.net/browse/IR-1680 is completed + * Now we should remove signatures because otherwise the transaction + * won't get to MST processor and will be immediately commited + */ + let txToSend = cloneDeep(transaction) + txToSend.clearSignaturesList() + + txToSend = signWithArrayOfKeys(txToSend, privateKeys) + + let txClient = new CommandServiceClient( + cache.nodeIp + ) + + return sendTransactions([txToSend], txClient, timeoutLimit) +} + +/** + * createAccount + * {@link https://iroha.readthedocs.io/en/latest/api/commands.html#cresate-account createAccount - Iroha docs} + * @param {Array.} privateKeys + * @param {String} accountName + * @param {String} domainId + * @param {String} publicKey + * @param {Number} accountQuorum + */ +function createAccount (privateKeys, accountName, domainId, publicKey, accountQuorum) { + debug('starting createAccount...') + + return command( + privateKeys, + txHelper.addCommand(txHelper.emptyTransaction(), 'createAccount', { accountName, domainId, publicKey }), + accountQuorum + ) +} + +/** + * createAsset + * {@link https://iroha.readthedocs.io/en/latest/api/commands.html#create-asset createAsset - Iroha docs} + * @param {Array.} privateKeys + * @param {String} assetName + * @param {String} domainI + * @param {Number} precision + * @param {Number} accountQuorum + */ +function createAsset (privateKeys, assetName, domainId, precision, accountQuorum) { + debug('starting createAsset...') + + return command( + privateKeys, + txHelper.addCommand(txHelper.emptyTransaction(), 'createAsset', { assetName, domainId, precision }), + accountQuorum + ) +} + +/** + * addAssetQuantity + * {@link https://iroha.readthedocs.io/en/latest/api/commands.html#add-asset-quantity addAssetQuantity - Iroha docs} + * @param {Array.} privateKeys + * @param {String} accountId + * @param {String} assetId + * @param {String} amount + * @param {Number} accountQuorum + */ +function addAssetQuantity (privateKeys, assetId, amount, accountQuorum) { + debug('starting addAssetQuantity...') + + return command( + privateKeys, + txHelper.addCommand(txHelper.emptyTransaction(), 'addAssetQuantity', { assetId, amount }), + accountQuorum + ) +} + +/** + * setAccountDetail + * {@link https://iroha.readthedocs.io/en/latest/api/commands.html#set-account-detail setAccountDetail - Iroha docs} + * @param {Array.} privateKeys + * @param {String} accountId + * @param {String} key + * @param {String} value + * @param {Number} accountQuorum + */ +function setAccountDetail (privateKeys, accountId, key, value, accountQuorum) { + debug('starting setAccountDetail...') + + return command( + privateKeys, + txHelper.addCommand(txHelper.emptyTransaction(), 'setAccountDetail', { accountId, key, value }), + accountQuorum + ) +} + +/** + * setAccountQuorum + * {@link https://iroha.readthedocs.io/en/latest/api/commands.html#set-account-quorum setAccountQuorum - Iroha docs} + * @param {Array.} privateKeys + * @param {String} accountId + * @param {Number} quorum + * @param {Number} accountQuorum + */ +function setAccountQuorum (privateKeys, accountId, quorum, accountQuorum) { + debug('starting setAccountQuorum...') + + return command( + privateKeys, + txHelper.addCommand(txHelper.emptyTransaction(), 'setAccountQuorum', { accountId, quorum }), + accountQuorum + ) +} + +/** + * transferAsset + * {@link https://iroha.readthedocs.io/en/latest/api/commands.html#transfer-asset transferAsset - Iroha docs} + * @param {Array.} privateKeys + * @param {String} srcAccountId + * @param {String} destAccountId + * @param {String} assetId + * @param {String} description + * @param {String} amount + * @param {Number} accountQuorum + */ +function transferAsset (privateKeys, srcAccountId, destAccountId, assetId, description, amount, accountQuorum) { + debug('starting transferAsset...') + + return command( + privateKeys, + txHelper.addCommand(txHelper.emptyTransaction(), 'transferAsset', { srcAccountId, destAccountId, assetId, description, amount }), + accountQuorum + ) +} + +/** + * addSignatory + * {@link https://iroha.readthedocs.io/en/latest/api/commands.html#add-signatory addSignatory - Iroha docs} + * @param {Array.} privateKeys + * @param {String} accountId + * @param {Buffer} publicKey + * @param {Number} accountQuorum + */ +function addSignatory (privateKeys, accountId, publicKey, accountQuorum) { + debug('starting addSignatory...') + + return command( + privateKeys, + txHelper.addCommand(txHelper.emptyTransaction(), 'addSignatory', { accountId, publicKey }), + accountQuorum + ) +} + +/** + * removeSignatory + * {@link https://iroha.readthedocs.io/en/latest/api/commands.html#remove-signatory removeSignatory - Iroha docs} + * @param {Array.} privateKeys + * @param {String} accountId + * @param {Buffer} publicKey + * @param {Number} accountQuorum + */ +function removeSignatory (privateKeys, accountId, publicKey, accountQuorum) { + debug('starting removeSignatory...') + + return command( + privateKeys, + txHelper.addCommand(txHelper.emptyTransaction(), 'removeSignatory', { accountId, publicKey }), + accountQuorum + ) +} + +/** + * Create settlement: an exchange request + * @param {Array.} senderPrivateKeys + * @param {String} senderAccountId + * @param {Number} senderQuorum + * @param {String} senderAssetId + * @param {String} senderAmount + * @param {String} description + * @param {String} receiverAccountId + * @param {Number} receiverQuorum + * @param {String} receiverAssetId + * @param {String} receiverAmount + * @param {Number} timeoutLimit + */ +function createSettlement (senderPrivateKeys, senderAccountId = cache.username, senderQuorum = 1, senderAssetId, senderAmount, description, receiverAccountId, receiverQuorum = 1, receiverAssetId, receiverAmount, timeoutLimit = DEFAULT_TIMEOUT_LIMIT) { + debug('starting createSettlement...') + + let txClient = new CommandServiceClient( + cache.nodeIp + ) + + let senderTx = txHelper.addCommand(txHelper.emptyTransaction(), 'transferAsset', { srcAccountId: senderAccountId, destAccountId: receiverAccountId, assetId: senderAssetId, description, amount: senderAmount }) + senderTx = txHelper.addMeta(senderTx, { creatorAccountId: senderAccountId, senderQuorum }) + + let receiverTx = txHelper.addCommand(txHelper.emptyTransaction(), 'transferAsset', { srcAccountId: receiverAccountId, destAccountId: senderAccountId, assetId: receiverAssetId, description, amount: receiverAmount }) + receiverTx = txHelper.addMeta(receiverTx, { creatorAccountId: receiverAccountId, receiverQuorum }) + + const batchArray = txHelper.addBatchMeta([senderTx, receiverTx], 0) + batchArray[0] = signWithArrayOfKeys(batchArray[0], senderPrivateKeys) + + return sendTransactions(batchArray, txClient, timeoutLimit) +} + +function acceptSettlement (privateKeys, batchArray, timeoutLimit = DEFAULT_TIMEOUT_LIMIT) { + debug('starting acceptSettlement') + if (!batchArray.length) return + + let txClient = new CommandServiceClient( + cache.nodeIp + ) + + const indexOfUnsigned = cloneDeep(batchArray) + .map(tx => tx.toObject()) + .findIndex(tx => !tx.signaturesList.length) + const indexOfSigned = cloneDeep(batchArray) + .map(tx => tx.toObject()) + .findIndex(tx => tx.signaturesList.length) + + batchArray[indexOfSigned].clearSignaturesList() + + batchArray[indexOfUnsigned] = signWithArrayOfKeys(batchArray[1], privateKeys) + return sendTransactions(batchArray, txClient, timeoutLimit) +} + +function rejectSettlement (privateKeys, batchArray, timeoutLimit = DEFAULT_TIMEOUT_LIMIT) { + debug('starting acceptSettlement') + if (!batchArray.length) return + + let txClient = new CommandServiceClient( + cache.nodeIp + ) + + const indexOfUnsigned = cloneDeep(batchArray) + .map(tx => tx.toObject()) + .findIndex(tx => !tx.signaturesList.length) + const indexOfSigned = cloneDeep(batchArray) + .map(tx => tx.toObject()) + .findIndex(tx => tx.signaturesList.length) + + batchArray[indexOfSigned].clearSignaturesList() + + batchArray[indexOfUnsigned] = signWithArrayOfKeys(batchArray[1], privateKeys) + return sendTransactions(batchArray, txClient, timeoutLimit, [ + 'ENOUGH_SIGNATURES_COLLECTED', + 'STATEFUL_VALIDATION_FAILED' + ]) +} + +/** + * Send transaction: used for sending transactions to iroha + * @param {Array.} txs + * @param {Object} txClient + * @param {Number} timeoutLimit - timeout limit of the transaction + * @param {Array.} requiredStatuses - list of required statuses of the response + */ +function sendTransactions (txs, txClient, timeoutLimit, requiredStatuses = [ + 'MST_PENDING', + 'COMMITTED' +]) { + const hashes = txs.map(x => txHelper.hash(x)) + const txList = txHelper.createTxListFromArray(txs) + + return new Promise((resolve, reject) => { + debug('submitting transactions...') + debug('peer ip:', cache.nodeIp) + txs.forEach(x => + debug('parameters sender:', JSON.stringify(x.getPayload(), null, ' ')) + ) + hashes.forEach(x => + debug('receiverTxHash:', Buffer.from(x).toString('hex')) + ) + debug('') + + const timer = setTimeout(() => { + txClient.$channel.close() + reject(new Error('please check IP address OR your internet connection')) + }, timeoutLimit) + + // Sending even 1 transaction to listTorii is absolutely ok and valid. + txClient.listTorii(txList, (err, data) => { + clearTimeout(timer) + + if (err) { + return reject(err) + } + + debug('submitted transaction successfully!') + resolve() + }) + }) + .then(() => { + return new Promise((resolve, reject) => { + debug('opening transaction status stream...') + + // Status requests promises + let requests = hashes.map(hash => new Promise((resolve, reject) => { + let statuses = [] + + let request = new TxStatusRequest() + request.setTxHash(hash) + + let stream = txClient.statusStream(request) + stream.on('data', function (response) { + statuses.push(response) + }) + + stream.on('end', function (end) { + statuses.length > 0 ? resolve(statuses[statuses.length - 1].getTxStatus()) : resolve(null) + }) + })) + + Promise.all(requests).then(values => { + let statuses = values.map(x => x !== null ? getProtoEnumName( + TxStatus, + 'iroha.protocol.TxStatus', + x + ) : null) + statuses.some(x => requiredStatuses.includes(x)) + ? resolve() + : reject( + new Error(`Your transaction wasn't commited: expected: ${requiredStatuses}, actual=${statuses}`) + ) + }) + }) + }) +} + +function signWithArrayOfKeys (tx, privateKeys) { + privateKeys.forEach(key => { + tx = txHelper.sign(tx, key) + }) + return tx +} + +export { + createAccount, + createAsset, + transferAsset, + addSignatory, + removeSignatory, + addAssetQuantity, + createSettlement, + acceptSettlement, + rejectSettlement, + setAccountDetail, + setAccountQuorum, + signPendingTransaction +} diff --git a/src/util/iroha/functions.js b/src/util/iroha/functions.js new file mode 100644 index 000000000..7497678ab --- /dev/null +++ b/src/util/iroha/functions.js @@ -0,0 +1,68 @@ +import { cryptoHelper } from 'iroha-helpers' +import { getAccount } from './queries' +import { cache } from './util' +import { getItem, setItem, removeItem } from '../storage-util' +import Debug from 'debug' +const debug = Debug('iroha-util') + +/** + * login + * @param {String} username + * @param {String} privateKey length is 64 + * @param {String} nodeIp + */ +function login (username, privateKey, nodeIp) { + debug('starting login...') + + if (privateKey.length !== 64) { + return Promise.reject(new Error('privateKey should have length of 64')) + } + + cache.username = username + cache.key = privateKey + cache.nodeIp = nodeIp + + setItem('iroha-wallet:nodeIp', nodeIp) + + return getAccount(username) + .then(account => { + debug('login succeeded!') + return account + }) + .catch(err => { + debug('login failed') + throw err + }) +} + +function logout () { + cache.username = null + cache.key = null + cache.nodeIp = null + + return Promise.resolve() +} + +function getStoredNodeIp () { + return getItem('iroha-wallet:nodeIp') || '' +} + +function clearStorage () { + removeItem('iroha-wallet:nodeIp') +} + +function isLoggedIn () { + return !!cache.username +} + +// generate new keypair +const generateKeypair = cryptoHelper.generateKeyPair + +export { + login, + logout, + isLoggedIn, + clearStorage, + getStoredNodeIp, + generateKeypair +} diff --git a/src/util/iroha/index.js b/src/util/iroha/index.js new file mode 100644 index 000000000..bd0770ca6 --- /dev/null +++ b/src/util/iroha/index.js @@ -0,0 +1,9 @@ +import * as queries from './queries' +import * as commands from './commands' +import * as functions from './functions' + +export default { + ...queries, + ...commands, + ...functions +} diff --git a/src/util/iroha/queries.js b/src/util/iroha/queries.js new file mode 100644 index 000000000..80184b846 --- /dev/null +++ b/src/util/iroha/queries.js @@ -0,0 +1,247 @@ +import { grpc } from 'grpc-web-client' +import flow from 'lodash/fp/flow' +import { queryHelper } from 'iroha-helpers' +import { QueryServiceClient } from 'iroha-helpers/lib/proto/endpoint_pb_service' +import * as pbResponse from 'iroha-helpers/lib/proto/qry_responses_pb' +import { + cache, + getProtoEnumName, + DEFAULT_TIMEOUT_LIMIT +} from './util' + +import Debug from 'debug' +const debug = Debug('iroha-util') + +/** + * wrapper function of queries + * @param {Object} query + * @param {Function} onResponse + * @param {Number} timeoutLimit + */ +function sendQuery ( + query, + onResponse = function (resolve, reject, responseName, response) {}, + timeoutLimit = DEFAULT_TIMEOUT_LIMIT +) { + return new Promise((resolve, reject) => { + const queryClient = new QueryServiceClient( + cache.nodeIp + ) + + let queryToSend = flow( + (q) => queryHelper.addMeta(q, { creatorAccountId: cache.username }), + (q) => queryHelper.sign(q, cache.key) + )(query) + + debug('submitting query...') + debug('peer ip:', cache.nodeIp) + debug('parameters:', JSON.stringify(queryToSend.toObject().payload, null, ' ')) + debug('') + + /** + * grpc-node hangs against unresponsive server, which possibly occur when + * invalid node IP is set. To avoid this problem, we use timeout timer. + * c.f. {@link https://github.com/grpc/grpc/issues/13163 Grpc issue 13163} + */ + const timer = setTimeout(() => { + queryClient.$channel.close() + const err = new Error('please check IP address OR your internet connection') + err.code = grpc.Code.Canceled + reject(err) + }, timeoutLimit) + + queryClient.find(queryToSend, (err, response) => { + clearTimeout(timer) + + if (err) { + return reject(err) + } + + debug('submitted query successfully!') + + const type = response.getResponseCase() + const responseName = getProtoEnumName( + pbResponse.QueryResponse.ResponseCase, + 'iroha.protocol.QueryResponse', + type + ) + + onResponse(resolve, reject, responseName, response) + }) + }) +} + +/** + * getAccount + * {@link https://iroha.readthedocs.io/en/latest/api/queries.html#get-account getAccount - Iroha docs} + * @param {String} accountId + */ +function getAccount (accountId) { + debug('starting getAccount...') + + return sendQuery( + queryHelper.addQuery(queryHelper.emptyQuery(), 'getAccount', { accountId }), + (resolve, reject, responseName, response) => { + if (responseName !== 'ACCOUNT_RESPONSE') { + return reject(new Error(`Query response error: expected=ACCOUNT_RESPONSE, actual=${responseName}`)) + } + + const account = response.getAccountResponse().getAccount().toObject() + + debug('account', account) + + resolve(account) + } + ) +} + +/** + * getSignatories + * {@link https://iroha.readthedocs.io/en/latest/api/queries.html#get-signatories getSignatories - Iroha docs} + * @param {String} accountId + */ +function getSignatories (accountId) { + debug('starting getSignatories...') + + return sendQuery( + queryHelper.addQuery(queryHelper.emptyQuery(), 'getSignatories', { accountId }), + (resolve, reject, responseName, response) => { + if (responseName !== 'SIGNATORIES_RESPONSE') { + return reject(new Error(`Query response error: expected=ACCOUNT_RESPONSE, actual=${responseName}`)) + } + + const account = response.getSignatoriesResponse().toObject().keysList + + debug('account', account) + + resolve(account) + } + ) +} + +/** + * getAccountTransactions + * {@link https://iroha.readthedocs.io/en/latest/api/queries.html#get-account-transactions getAccountTransactions - Iroha docs} + * @param {String} accountId + */ +function getAccountTransactions (accountId) { + debug('starting getAccountTransactions...') + + return sendQuery( + queryHelper.addQuery(queryHelper.emptyQuery(), 'getAccountTransactions', { accountId }), + (resolve, reject, responseName, response) => { + if (responseName !== 'TRANSACTIONS_RESPONSE') { + return reject(new Error(`Query response error: expected=TRANSACTIONS_RESPONSE, actual=${responseName}`)) + } + + const transactions = response.getTransactionsResponse().toObject().transactionsList + debug('transactions', transactions) + + resolve(transactions) + } + ) +} + +/** + * getAccountAssetTransactions + * {@link https://iroha.readthedocs.io/en/latest/api/queries.html#get-account-asset-transactions getAccountAssetTransactions - Iroha docs} + * @param {String} accountId + * @param {String} assetId + */ +function getAccountAssetTransactions (accountId, assetId) { + debug('starting getAccountAssetTransactions...') + + return sendQuery( + queryHelper.addQuery(queryHelper.emptyQuery(), 'getAccountAssetTransactions', { accountId, assetId }), + (resolve, reject, responseName, response) => { + if (responseName !== 'TRANSACTIONS_RESPONSE') { + return reject(new Error(`Query response error: expected=TRANSACTIONS_RESPONSE, actual=${responseName}`)) + } + + const transactions = response.getTransactionsResponse().toObject().transactionsList + + debug('transactions', transactions) + + resolve(transactions) + } + ) +} + +/** + * getAccountAssets + * {@link https://iroha.readthedocs.io/en/latest/api/queries.html#get-account-assets getAccountAssets - Iroha docs} + * @param {String} accountId + */ +function getAccountAssets (accountId) { + debug('starting getAccountAssets...') + + return sendQuery( + queryHelper.addQuery(queryHelper.emptyQuery(), 'getAccountAssets', { accountId }), + (resolve, reject, responseName, response) => { + if (responseName !== 'ACCOUNT_ASSETS_RESPONSE') { + return reject(new Error(`Query response error: expected=ACCOUNT_ASSETS_RESPONSE, actual=${responseName}`)) + } + + const assets = response.getAccountAssetsResponse().toObject().accountAssetsList + + debug('assets', assets) + + resolve(assets) + } + ) +} + +/** + * getAssetInfo + * {@link https://iroha.readthedocs.io/en/latest/api/queries.html#get-asset-info getAssetInfo - Iroha docs} + * @param {String} assetId + */ +function getAssetInfo (assetId) { + debug('starting getAssetInfo...') + + return sendQuery( + queryHelper.addQuery(queryHelper.emptyQuery(), 'getAssetInfo', { assetId }), + (resolve, reject, responseName, response) => { + if (responseName !== 'ASSET_RESPONSE') { + return reject(new Error(`Query response error: expected=ASSET_RESPONSE, actual=${responseName}`)) + } + + const info = response.getAssetResponse().toObject() + + debug('asset info', info) + + resolve(info) + } + ) +} + +/** + * getPendingTransactions + * {@link https://iroha.readthedocs.io/en/latest/api/queries.html#get-pending-transactions getPendingTransactions - Iroha docs} + */ +function getPendingTransactions () { + debug('starting getPendingTransactions...') + + return sendQuery( + queryHelper.addQuery(queryHelper.emptyQuery(), 'getPendingTransactions'), + (resolve, reject, responseName, response) => { + if (responseName !== 'TRANSACTIONS_RESPONSE') { + return reject(new Error(`Query response error: expected=TRANSACTIONS_RESPONSE , actual=${responseName}`)) + } + const transactions = response.getTransactionsResponse() + debug('transactions', transactions) + + resolve(transactions) + } + ) +} + +export { + getAccount, + getAccountAssets, + getAccountAssetTransactions, + getAccountTransactions, + getSignatories, + getPendingTransactions, + getAssetInfo +} diff --git a/src/util/iroha/util.js b/src/util/iroha/util.js new file mode 100644 index 000000000..a20e71661 --- /dev/null +++ b/src/util/iroha/util.js @@ -0,0 +1,38 @@ +import Debug from 'debug' +const debug = Debug('iroha-util') + +export const DEFAULT_TIMEOUT_LIMIT = 5000 + +/** + * cached items available from start to end of the app + * plus, `nodeIp` is persisted by localStorage + */ +export const cache = { + username: null, // NOT persisted by localStorage + // TODO: do not cache keys; require a private key on every action instead. + // For now it is needed for queries until tokens are implemented. + key: null, // NOT persisted by localStorage + nodeIp: null // persisted by localStorage +} + +const protoEnumName = {} +export function getProtoEnumName (obj, key, value) { + if (protoEnumName.hasOwnProperty(key)) { + if (protoEnumName[key].length < value) { + return 'unknown' + } else { + return protoEnumName[key][value] + } + } else { + protoEnumName[key] = [] + for (let k in obj) { + let idx = obj[k] + if (isNaN(idx)) { + debug(`getProtoEnumName:wrong enum value, now is type of ${typeof idx} should be integer`) + } else { + protoEnumName[key][idx] = k + } + } + return getProtoEnumName(obj, key, value) + } +} diff --git a/src/util/notary-util.js b/src/util/notary-util.js new file mode 100644 index 000000000..34da4e658 --- /dev/null +++ b/src/util/notary-util.js @@ -0,0 +1,24 @@ +import axios from 'axios' +import { ETH_NOTARY_URL } from '@/data/urls' + +let axiosNotary = axios.create({ + baseURL: ETH_NOTARY_URL +}) + +const signup = axios => (name, whitelist, publicKey) => { + // Unfortunately, server awaits for formData, and it is the only way to provide it. + let postData = new FormData() + postData.append('name', name) + postData.append('whitelist', whitelist) + postData.append('pubkey', publicKey) + + return axios + .post('users', postData) + .then(({ data }) => ({ response: data })) +} + +export default { + get baseURL () { return axiosNotary.defaults.baseURL }, + set baseURL (baseURL) { axiosNotary.defaults.baseURL = baseURL }, + signup: signup(axiosNotary) +} diff --git a/src/util/report-util.js b/src/util/report-util.js new file mode 100644 index 000000000..2752f8705 --- /dev/null +++ b/src/util/report-util.js @@ -0,0 +1,346 @@ +import flow from 'lodash/fp/flow' +import groupBy from 'lodash/fp/groupBy' +import entries from 'lodash/fp/entries' +import map from 'lodash/fp/map' +import values from 'lodash/fp/values' +import sortBy from 'lodash/fp/sortBy' +import pdfMake from 'pdfmake-lite/build/pdfmake.min' +import isWithinRange from 'date-fns/is_within_range' +import isAfter from 'date-fns/is_after' +import startOfDay from 'date-fns/start_of_day' +import endOfDay from 'date-fns/end_of_day' +import isSameDay from 'date-fns/is_same_day' +import { encode as json2csv } from 'csv.js' +import { fontLoader } from './font-util' + +pdfMake.vfs = fontLoader.vfs +fontLoader.addFont({URL: 'fonts/Roboto-Regular.ttf', name: 'Roboto-Regular.ttf'}) +fontLoader.addFont({URL: 'fonts/Roboto-Italic.ttf', name: 'Roboto-Italic.ttf'}) +fontLoader.addFont({URL: 'fonts/Roboto-Medium.ttf', name: 'Roboto-Medium.ttf'}) +fontLoader.addFont({URL: 'fonts/Roboto-MediumItalic.ttf', name: 'Roboto-MediumItalic.ttf'}) + +const debug = require('debug')('report-util') + +/** + * generate PDF blob + * @param {Object} params + * @returns {Promise} + */ +export function generatePDF (params) { + debug('generating PDF output...') + + return fontLoader.load().then(() => new Promise((resolve, reject) => { + const { formatDate, formatDateWith, formatPrecision } = params + const data = generateReportData.call(this, { ext: 'pdf', ...params }) + const docDefinition = { + info: { + title: `report`, + creationDate: new Date() + }, + + styles: { + title: { fontSize: 24, margin: [0, 0, 0, 10] }, + heading1: { fontSize: 22, bold: true, margin: [0, 10, 0, 5] }, + logo: { alignment: 'center', margin: [0, 0, 0, 25] } + }, + + content: [ + { image: REPORT_LOGO, width: 200, style: 'logo' }, + { text: `Report (${formatDate(data.dateFrom)} - ${formatDate(data.dateTo)})`, style: 'title' }, + { text: `Account ID: ${data.accountId}` }, + { text: `Wallet: ${data.walletName} (${data.cryptoCurrencyUnit})` }, + + { text: `Summary`, style: 'heading1' }, + { text: `Ending Balance: ${formatPrecision(data.endingBalance)} ${data.cryptoCurrencyUnit}` }, + { text: `Ending Balance in ${data.fiat}: ${formatPrecision(data.endingBalanceFiat)}` }, + { text: `Starting Balance: ${formatPrecision(data.startingBalance)} ${data.cryptoCurrencyUnit}` }, + { text: `Starting Balance in ${data.fiat}: ${formatPrecision(data.startingBalanceFiat)}` }, + { text: `Net Change: ${formatPrecision(data.netChange)} ${data.cryptoCurrencyUnit}` }, + { text: `Transfers In: ${formatPrecision(data.transfersIn)} ${data.cryptoCurrencyUnit}` }, + { text: `Transfers Out: ${formatPrecision(data.transfersOut)} ${data.cryptoCurrencyUnit}` }, + + { text: `Transactions By Day`, style: 'heading1' }, + { + layout: 'lightHorizontalLines', + table: { + headerRows: 1, + widths: ['15%', '17%', '17%', '17%', '17%', '17%'], + body: [ + ['Date', 'In', `In (${data.fiat})`, 'Out', `Out (${data.fiat})`, 'Net'], + ...data.transactionsByDay.map(tx => ([ + formatDateWith(tx.date, 'MMM. D'), + formatPrecision(tx.dailyIn), + formatPrecision(tx.dailyInFiat), + formatPrecision(tx.dailyOut), + formatPrecision(tx.dailyOutFiat), + formatPrecision(tx.dailyNet) + ])) + ] + } + }, + + { text: `Transaction Details`, style: 'heading1' }, + { + layout: 'lightHorizontalLines', + table: { + headerRows: 1, + widths: ['15%', '40%', '45%'], + body: [ + ['Time', 'Description', 'Information'], + ...data.transactionDetails.map(tx => ([ + formatDate(tx.time), + tx.description, + formatInformation( + formatPrecision(tx.amount), + formatPrecision(tx.amountFiat), + data.fiat, + formatPrecision(tx.balance) + ) + ])) + ] + } + } + ] + } + + // do not create PDF in headless e2e testing environment + if (window.Cypress) { + return resolve({ filename: data.filename }) + } + + const pdfDocGenerator = pdfMake.createPdf(docDefinition) + + pdfDocGenerator.getBlob(blob => { + debug('successfully generated PDF output') + + resolve({ filename: data.filename, blob }) + }) + })) +} + +/** + * generate CSV blob + * @param {Object} params + * @returns {Promise} + */ +export function generateCSV (params) { + debug('generating CSV output...') + + return new Promise((resolve, reject) => { + const data = generateReportData.call(this, { ext: 'csv', ...params }) + const dataForCSV = data.transactionDetails.map(tx => ({ + 'Time': tx.time.replace(',', ''), + 'To': tx.to, + 'Amount': tx.amount, + [`Amount in ${data.fiat}`]: tx.amountFiat, + 'Balance': tx.balance, + [`Balance in ${data.fiat}`]: tx.balanceFiat, + 'Description': tx.description + })) + const fields = ['Time', 'To', 'Amount', `Amount in ${data.fiat}`, 'Balance', `Balance in ${data.fiat}`, 'Description'] + + let csv + + try { + csv = json2csv(dataForCSV, ',', fields) + } catch (err) { + return reject(err) + } + + const blob = new Blob( + [csv], + { type: 'text/csv;charset=utf-8' } + ) + + debug('successfully generated CSV output', csv) + + resolve({ filename: data.filename, blob }) + }) +} + +/** + * Generate a report data object + * @param {Object} params + * @param {String} params.accountId - e.g. 'alice@test' + * @param {Object} params.wallet - { name, asset, precision, amount } + * @param {Object[]} params.transactins - an array of TransferAsset transactions + * @param {String} params.fiat - e.g. 'RUB' + * @param {Array} params.priceFiatList - a list of prices *from fiat to crypto* + * @param {Number} params.priceFiatList[].price + * @param {Number} params.priceFiatList[].date + * @param {Date} params.dateFrom - start of the range + * @param {Date} params.dateTo - end of the range + * @param {String} params.ext - e.g. 'pdf' + * @param {Function} params.formatDate - a functino to format a date to the specific string + * @param {Function} params.formatDateWith - a function to format a date to an arbitrary string + * @returns {Object} + */ +export function generateReportData ({ + accountId, + wallet, + transactions, + priceFiatList, + dateFrom, + dateTo, + ext, + formatDate, + formatDateWith, + fiat +}) { + /* + * prepare utility functions + */ + const sumAmount = (txs) => txs + .map(tx => parseFloat(tx.amount)) + .reduce((sum, x) => sum + x, 0) + const isToYou = (tx) => (tx.to === 'you') + const isFromYou = (tx) => (tx.from === 'you') + const getDailyPriceFiat = (dateExpected) => { + return priceFiatList.find(({ date }) => isSameDay(date, dateExpected)).price + } + const formatDateWithYear = (date) => formatDateWith(date, 'MMM. D, YYYY HH:mm') + + /* + * prepare basic data + */ + const filename = `report-${wallet.name.toLowerCase()}-${formatDateWith(dateFrom, 'YYYYMMDD')}-${formatDateWith(dateTo, 'YYYYMMDD')}.${ext}` + const cryptoCurrencyUnit = wallet.asset + const precision = wallet.precision + const currentAmount = wallet.amount + + /* + * split transactions + */ + const txsWithinRange = transactions.filter(tx => isWithinRange(tx.date, startOfDay(dateFrom), endOfDay(dateTo))) + const txsAfterRange = transactions.filter(tx => isAfter(tx.date, endOfDay(dateTo))) + + /* + * calculate figures + */ + const netChangeAfterRange = txsAfterRange + .map(tx => (tx.to === 'you') ? +tx.amount : -tx.amount) + .reduce((sum, x) => sum + x, 0) + const transfersIn = sumAmount(txsWithinRange.filter(isToYou)) + const transfersOut = sumAmount(txsWithinRange.filter(isFromYou)) + const netChange = transfersIn - transfersOut + const endingBalance = currentAmount - netChangeAfterRange + const endingBalanceFiat = endingBalance / getDailyPriceFiat(dateTo) + const startingBalance = endingBalance - netChange + const startingBalanceFiat = startingBalance / getDailyPriceFiat(dateTo) + + /* + * prepare transactionsByDay + */ + const transactionsByDay = flow( + groupBy(tx => startOfDay(new Date(tx.date))), + entries, + map(([date, txs]) => { + const dailyIn = sumAmount(txs.filter(isToYou)) + const dailyInFiat = dailyIn / getDailyPriceFiat(date) + const dailyOut = sumAmount(txs.filter(isFromYou)) + const dailyOutFiat = dailyOut / getDailyPriceFiat(date) + const dailyNet = dailyIn - dailyOut + + return { + date: formatDateWithYear(date), + dailyIn: dailyIn.toFixed(precision), + dailyInFiat: dailyInFiat.toFixed(precision), + dailyOut: dailyOut.toFixed(precision), + dailyOutFiat: dailyOutFiat.toFixed(precision), + dailyNet: dailyNet.toFixed(precision) + } + }), + values, + sortBy('date') + )(txsWithinRange) + + /* + * prepare transactionDetails + */ + let accumulatedAmount = 0 + const transactionDetails = flow( + sortBy('date'), + map(tx => { + const amount = isToYou(tx) ? +tx.amount : -tx.amount + accumulatedAmount += parseFloat(amount) + const balance = startingBalance + accumulatedAmount + + return { + // Year is needed even though the year doesn't appear in an output. + // In Moscow timezone, for example: + // a date omitting an year like `Sep 01 12:34` will be treated as + // `Sep 01 2001 12:34`, which applies Moscow Summer Time which is not + // used today and generates wrong results. + time: formatDateWithYear(tx.date), + to: isToYou(tx) ? 'Received' : tx.to, + description: tx.message, + amount: amount.toFixed(precision), + amountFiat: (amount / getDailyPriceFiat(tx.date)).toFixed(precision), + balance: balance.toFixed(precision), + balanceFiat: (balance / getDailyPriceFiat(tx.date)).toFixed(precision) + } + }) + )(txsWithinRange) + + transactionDetails.unshift({ + time: formatDateWithYear(dateFrom), + to: null, + description: 'Starting Balance', + amount: '', + amountFiat: '', + balance: startingBalance.toFixed(precision), + balanceFiat: (startingBalance / getDailyPriceFiat(dateFrom)).toFixed(precision) + }) + + transactionDetails.push({ + time: formatDateWithYear(dateTo), + to: null, + description: 'Ending Balance', + amount: '', + amountFiat: '', + balance: endingBalance.toFixed(precision), + balanceFiat: (startingBalance / getDailyPriceFiat(dateTo)).toFixed(precision) + }) + + /* + * put data together + */ + const reportData = { + // metadata + filename, + accountId, + walletName: wallet.name, + cryptoCurrencyUnit, + dateFrom, + dateTo, + fiat, + + // summary + endingBalance: endingBalance.toFixed(precision), + endingBalanceFiat: endingBalanceFiat.toFixed(precision), + startingBalance: startingBalance.toFixed(precision), + startingBalanceFiat: startingBalanceFiat.toFixed(precision), + netChange: netChange.toFixed(precision), + transfersIn: transfersIn.toFixed(precision), + transfersOut: transfersOut.toFixed(precision), + + // transactions by day + transactionsByDay, + + // transaction details + transactionDetails + } + + debug('successfully generated reportData', reportData) + + return reportData +} + +function formatInformation (amount, amountFiat, fiat, balance) { + return `Amount: ${amount} + Amount (${fiat}): ${amountFiat} + Balance: ${balance} + ` +} + +const REPORT_LOGO = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAAHICAYAAADdkMD7AAAACXBIWXMAAD5wAAA+cAEY0XQGAAAgAElEQVR4Ae3dTW5bSbom4JN5697umW2gZxzYd9wDKwHOj2oF1l2BlSuwagWpXEEqV5DyCkpeQekAPSRQ0rBHVxoQ6JktoH+qKn/cCPljFiVREiWRPBEnnichuDKrUEnGEXniPV/EF199/vy5gXnTdrzdNM2r+NlqmuZ5/NetgQIG4lO8jV+apvk/TdP8LX4+LXh76Z+d3PK2j+f/ZtRNjm/53wGZm7bj5zHvmc19tuMVp//82vUrynnTNGfxgs/iJ32Pn426yW3f55AFAb1ycTPanvtxAwJYjS7+X+YD/kn8fZoknhln6M+0Hb+6Ngd66XJUo4sHrEcCO7kR0CsUoXwnft7UPh4APTqfq+6o8MCaRShP859dRQnCRQrqTdMcWgVFDgT0ikzbcVqytRc3pme1jwdA5mbh/XgW4E0e4XGm7Xgn5kC263GX9L172DTNwaibLNryBGsnoFcg9pTvuykBDMJpVNovf4R2uN20He/GHMjydR7qffrdsR2JTRPQB0wwB6jGfGg/tkSe2gnmrJCgzkYJ6AMU+6sO7C8HqNbFLKxHYFdlpwpRnDiwv5wVu4hl7/sGlnUT0Adm2o734omxPeYAzOsEdoYqGuCm+c87F5k1SquV9nyHsk4C+kDEjenIcnYAlnAxC+txzJClmxQrquaHlrOzQd+rprMuAvoAxI3pSNUcgEc6j/tIqq4fGURKMW3HKSR954LRg1RN3/GAk1UT0AsXS9p/qH0cAFiZ2ZnAs+q6o4bITqwcPNRvh56l78ttjTlZJQG9YNN2nG5Mb2sfBwDW6kMEdmGdLEQ4P9YIjox8O+omhy4IqyCgFyhuTAfCOQAbJqzTq2k73opwblsfuRHSWQkBvTCeGgOQiRTWD+1ZZ1OEcwogpPNkAnphpu34yH4rADIy27N+YB8m6yKcUxAhnScR0AtizzkAmTuPLViHlsCzKlYPUiAhnUcT0AvhGBEACvM+gvqxC8djCecU7BuringMAb0A03a82zTNT7WPAwBFUlXn0awepGBp+8+Wc9J5KAE9c/ZcATAQ9qrzIAoUDMDpqJtsuZA8hICeuWk7PrGsC4CB6SKo6wDPQgoUDMj3o26y74KyLAE9Y/adAzBwafn7vmZKXKdAwcD8UT8OliWgZyqeHP+19nEAoAoXsU/9wD51FCgYoPNRN3nlwrKMr41Stg5qHwAAqvEsAtlZCmfRuZsKTdtxCjF7rj0D8zIePMG9VNAzpCkKAJWbNZTb1wG5LtN2nK77m9rHgUHS1Z2lqKDnyRM2AGr2LI7W+s90zFZUVRm4aTveFs4ZsGfm+CxDBT0zqucAsND39qgP27QdpyZabe3jwOD9uyo6d1FBz48nawBwkz3qAxbVc+GcGpjrcycBPSNRPX9Z+zgAwC3mm8lpJDYsu7UPANV4a9sOdxHQ82KyAQD3S0H9h2k7PouH2xQswspb15CK+N7iVgJ6JuLc89e1jwMAPEBadfZT2rscS6Qpk7BCbfzOcysBPR8+qADwOGnv8l90fC+WORC1Seei77jqLCKg58OHFACeJi2TPkmN5IxjGWIFof471Mjcn4UE9Ay4OQHAylw2kov96Za950/1nFoJ6CwkoOfBzQkAVutlLHs/suw9ax6iUKtnUaSDKwT0PLg5AcB6vLHsPU/x4ESDXGqmis4NAnrPpu34uZsTAKzVbNn7iYpVVhQoqJ3PADcI6P0zUQCAzUgPxP86bccH8YCcfpkDUbu29gHgJgG9f56cAcBmvYtl7+7B/RLQqZ5VPVwnoPfPhxIANm/WRE41vT+qh9A0mlhyhYDeP5MCAOiPanoPPBSB3ynWcYWA3j9PjwGgX79X012HjRFK4AsVdK4Q0AEAvnin0/vGqKDDFwI6VwjoPYrzPwGAfMw6ve+5JmvlIQjAAgJ6vwR0AMjTD9N2fGyvNLBmHlZxhYAOALBY6hNzpoEcsEbPDC7zBHQAgNs9iwZy+8YIgHUT0AEA7vedJe8ArJuADgCwHEveAVgrAR0AYHmzJe+6vAOwcgI6AMDDpS7vh5a8A090agCZJ6D3aNRNjqt98wBQvrdN06R96Y5Nfbiz0l4wrMknA8s8AR0A4PFeN01zYl/6gwnoAAsI6P2zrAUAyjbbl77rOi5N1RC+sKKWKwT0/rlBAcAw/JT2pbuW9xt1k5PcXyNsiCzAFQJ6/zw1A4DheOu89KVZRQhN42EVVwjo/fOhBIBhaTWPW4o5ENXTNJrrBPT+uTkBwPDMmsdtuba3MgeidlaRcIOA3rNRN0ldTM+rHgQAGKZnUUnX4X0xlUNq5zPADQJ6Hnw4AWCYdHi/RTSKu8jyxcFmyADcIKDnwYcTAIbtJyF9oaMMXxNsigzADQJ6HtycAGD4HMN2kzkQtfow6iaOWOMGAT0D8eH8UPs4AEAF3grpVxxb5k6lPJxiIQE9H27WAFAHIT1EkUJQoUZ+71lIQM/EqJsceYIMANUQ0v/JOFCb95a3cxsBPS8HtQ8AAFQkhfR0Vvrzmi/6qJscO3KWyngoxa0E9Lz4sAJAXV7HWelVh/SmafYzeA2wCV08lIKFBPSMjLrJWVryUvs4AEBlqg/po25yqIpOJTyM4k4Cen58aAGgPtWHdHMgKqB6zr0E9MxEFf3H2scBACpUdUhXRacCHkJxLwE9T/s6ugNAlV7H2eC12vVrz0B9UD1nGQJ6huLYhb3axwEAKvW61iPYIsB8yOClwCpdmNuzLAE9U7HMq6t9HACgUjWfk75nJSEDsx/bWOFeAnredt2gAKBaVYb0CDKqjQxFagx34GqyLAE9Y25QAFC9WkP6oaXuDMCFvgo8lICeubhBORsdAOqVQnqNk/z0nk8zeB3wWLuWtvNQAnoBRt3EDQoA6vZTbSE9muba7kepvh91kyNXj4cS0Mux7WxQAKhaCunbNQ3AqJucWCJMgd6Puokzz3mUrz5//mzkCjFtx1txNuqz2scCACqVqsnbEVyrEasHfvJLTwFOR91ky4XisVTQCxI3421LvQCgWukh/fG0HT+vaQCiJ8+3GbwUuMtpzNXh0QT0wgjpAFA9IR3ycxqrWz65NjyFgF6guZBuTzoA1Ol10zTVNaAS0snUe+GcVbEHvWDx5Pw4btIAQH3ex2kvtc2B9OUhF1V+BlkfAX0Apu04PU1+W/s4AEClvo3KclWm7fhVrCJQqKAPabvpXo2fPdbLEvcBiKd239qXDgBVqu74tebL/Ocstvz9mMHLoS6z/ebCOSungj4g8SQ5fVG0tY8FAFQmPaTfitBanWk73ok5kCXvrFt6ILRvvznrIqAP0LQd76UvDjcpAKhK1V2kozdPmv+8y+DlMDynsaT92LVlnQT0gXKTAoAqVd+wKhrIHVhRyIrYa85GCegDF8ve9zWRA4Bq/GnUTQ5qv9yxL39fUOeRLuJBz4Hl7GySgF6JCOpp6fuupe8AMHh/tBT3iwjqu4oVLOk8HuwcCeb0QUCv0LQdp5tUaqbypvaxAICBStW/VwLGP0WxYifCuqPZmHcRR/YderBF3wT0isU+9Z04omRHZR0ABqUbdZPqjl9bxlxY37EEvlrnEcqPR93kqPbBIB8COr+LpirzP+nm9dIIAUCxvh91k32X726xDH42B3oVfypcDEfqwJ5Wk6Tq+EmEcqtLyJKAzr2i0r5lpAj28VGi02uv+X83TfM/mqb52z3v5Xr18bmlsRTIfvRHiuLF8yJfPI3fe0okoANLiwrDX4wYGUlLFM+iIvJp7s9Po25ysu6XGZ+JJipu8z+qb+TEfnSAQgjowFJiJcWZ0EFPTueC+PGmAvhTRYCfBfdtW4fo0YdRN9lxAQDyJqADS5m24yOd/9mQ87l9gidDW6I4t21oe+5PD77YBOejA2ROQAfuNW3H6Qz9H4wUa3Iagfw4AvlZbQM916RzO35U2VmXb0pYfQJQKwEduFMcRXOiwscKzc6bPY5OutUF8vtEYJ+FdStXWKXTUTfR+BUgUwI6cKdpOz7RtZoVmJ03e6h693DTdrwzd2azh2U81Y+jbrJnFAHyI6ADt5q243R27ndGiEcSytdAWGdFHL0GkCEBHVgoltj+1ejwQEL5BgnrPEH6rG45eg0gLwI6sJCl7TzQ+xTMR93kyMBtXnSGTyF9t2matrb3z6NZ6g6QGQEduMHSdpaUKnAHUS1XhctENHbci7Cuqs59LHUHyIiADlxhaTtL6FIwVy3P21xVfd+xbdzBUneAjAjowBWWtnOHtIx937Fo5Zm24+0I6pa/s4il7gCZENCB303bcZqg/WBEmJPOLD+MirlgXrgI6mnp+9vax4IbvtHYEaB/AjpwKfatntizSriI/eUHlr4OT3ze9wV15pyOusmWAQHol4AOXJq247Sf+I3RqJ5gXpEI6gc++4Q/jbrJgcEA6I+ADszOUv6zkaiePeaVskedcBEN43wHAPREQIfKRafnE12eq5a6su+alBNB/dD3QdU+jLrJTu2DANAXAR0q58zzqp1HMHcGMldEw8h9PSmq5Wx0gJ4I6FCx2H/6n34HqnMRS9ntNeVWsbomhfR3Rqk656Nu8qr2QQDow9dGHap2WPsAVOhD0zSvhHPuk5oExtnY36QO3wasKi9jdRUAG6aCDpXSGK46lrPzJJa9V0fDOIAeqKBDvVRQ6/FjTLSFcx4tVl1sRVNBhu9ZPJABYINU0KFCGsNVQ9WctVBNr4qGcQAbpIIOlYnGT3uu++CpmrM2qulVUUUH2CAVdKjMtB2nxnBvXffBuoiq+VHtA8FmWJFThf/wnQKwGQI6VMSxaoOXqpk7qft27QPBZk3bcaqmpwD30tAPkmPXADbEEneoi8Zww/X9qJtsC+f0YdRNTmLJ+wcXYJBeRt8BANZMBR0qMW3H203T/MX1HpyLqJrba04WIsj94GoMTvqueeUhIMB6qaBDPTT6GZ7TmDAL52QjGsh9E4GO4XimwSjA+qmgQwVUzwfp/aib7NY+COQrToxID49eu0yDoYoOsGYq6FAH1fNh+VY4J3cpxI26SdqX/t7FGgxVdIA1U0GHgVM9HxT7zSmSfemDoooOsEYq6DB8qufDcN40zbZwToliX/q39qUPgio6wBqpoMOAqZ4PxmmEcxUrihbnpR9HyKNcqugAa6KCDsOmel6+TjhnKOK89G2V9OKpogOsiQo6DJTq+SDo1M4g6fA+CKroAGuggg7DpXpeNuGcwYpQtx3bNyiTKjrAGqigwwCpnhdPOKcKKunFU0UHWDEVdBgm1fNyCedUQyW9eKroACsmoMPARJfk1nUtknBOdYT04vnOAlghAR2GRzWjTMI51RLSi/Zy2o59dwGsiIAOAzJtx6+apnnrmhZHOKd6QnrRbKsCWBEBHYZFyCuPcA5BSC/Wy2hOCsATCegwENEN2fL2snTCOVw1F9IvDE1RVNEBVkBAh+HYiY66lOE0rhlwjZBepDa2WQHwBAI6DIfqRTlSON92djDcbtRNToT04rgPATyRgA4DEHv/XrqWRUhhY1c4h/tFSLd1pxw7sd0KgEcS0GEYTGDLsR2hA1jCqJscNk3zJ2NVhGealQI8jYAOhYs9f29cxyJ8K5zDw426yUE68cDQFcEDY4AnENChfKoVZfgxKoHA4+w5fq0IjlwDeAIBHconoOcvHaemqgRPoLN7UdyXAB5JQIeCTdvxjuZw2Tt3nBqsxlxIJ29vNYsDeBwBHcqmSpG/HR3bYXWij4OmcflzfwJ4BAEdChXVCc3h8vYnTeFg9aJp3AdDmzUBHeARBHQol8lP3j5EiADWYze2kJCn19N2vOXaADyMgA7lEtDzde76wHrF1hH9HfLmexDggQR0KFBUJV67dtnate8c1i+2kHxvqLMloAM8kIAOZTLpydf3o25yXPsgwKaMusl+OsrQgGfpWZw2AsCSBHQokwlPnk4jLACbtet89Gy5XwE8gIAOhXH2edasbIAejLrJWdM0Ho7lyZnoAA8goEN5VCPy9L0j1aA/cWqCpe55ct8CWJKADuUx0cmPpe2QB0vd8+S+BbAkAR0KEsvbn7lm2bG0HTJgqXu23ljmDrAcAR3KogqRnx8tbYd8xFL3U5ckO+5fAEsQ0KEsJjh5uVCtgyztuSzZcf8CWIKADoWwvD1Le6Nu8qn2QYDcjLrJcdM0712YrFjmDrAEAR3Kse1aZaUbdZPD2gcBMranYVx23McA7iGgQzksD8yLJbSQsVjdYgtKXtzHAO4hoEMBpu14q2mal65VNt5rDAf5i4Zx5y5VNgR0gHsI6FAGk5p8XKieQ1Ecg5iPZ9N2bJk7wB0EdCiDgJ6PA43hoBzRMK5zybLhfgZwBwEdMhddb1+7TllI1fOD2gcBCmQvej5U0AHuIKBD/lQb8qF6DgVSRc/K62k7flX7IADcRkCH/Kk25OF81E1U4aBc9qLnw30N4BYCOuRPBT0PwjkUbNRNztIJDK5hFtzXAG4hoEPG4ni1Z65R71L1/LDyMYAh8KAtDyroALcQ0CFvJjF50BgOBiCq6Pai9+9ZPIAG4BoBHfJmGWD/Uud21XMYDlX0PHgADbCAgA55a12f3uncDgOio3s2PIAGWEBAh0xN27HqQh4sb4fh8bnunwfQAAsI6JAvAb1/71XPYXhG3eQoNX90afvlQTTATQI65MvEpX/2qsJwqaL3T6M4gGsEdMiXiUu/uuj4DAzTYTSBpD8eRANcI6BDhpx/ngWd22HAYvvKkWvcKwEd4BoBHfJk0tKvi1E3EdBh+Cxz75fz0AGuEdAhTyYs/RLOoQKjbnLSNM2pa90r9zuAOQI65EkFvV+qalAPn/d+ud8BzBHQITPTdvy8aZqXrktvTjWHg6rYh94vFXSAOV99/vw56/GYOyMzfYE/7/nlwCa8aprmrZHuzYemaU4qfe+3+TQbk1E3Oc7yFcITTNvxoe/d/oy6yVe1vvfcTNvxq5iHPPfwhIEpZi6TTUCPquF2fBnM/tTFGiA/F3GTO579GR2xoUjTdrzTNM2fXb3e/NHDv82LBn2zOXf6eV3bGFC1bOcyvQb0+GLYiR9fCgDlOo2lwkfReAuKMm3HnxQGevOnUTfRC2AD4mHU7MfvO1yVxVxm4wE9KuW7TdPs2WcLMEjn0XjrUGWdUljm3qv3o26yW/H7X6vYLrorlMOD9DaX2VhAj2r5npsfQFXeN02zr/EeubPMvVfdqJvo5r5i03acQvm+ghg8WZrLHGyqqr72gB7BPD19aNf6LwIgZ6n53p6gTs4sc++PRnGrI5jD2nQxl1lrUF9bQI8ukPsq5gDMeR83N0vfyY5l7r36Rv+Kp4lVIAeCOazdWlcHruUc9Gk73otueG5yAMxL94WzuE9AbpyJ3p9Xtb7xp0pFsWk7Po4tGsI5rF+ay5ysay6z0gp6VM2PdGQHYAlpqdiuZe/kIhrZfnRBevH9qJvsV/i+nyQCwr6tGdCb1Pl9Z5VzmZVV0GO/y4lwDsCS2ngCrXszWYitF52r0YutCt/zo6WHSdN2nIpiPwjn0KvXq57LrCSgx56tn3xBAPBA6b7xU9xHIAeWuffDEvclRQPmVBR7U8QLhuFb6VzmSUvcYynYsao5ACvQxTIxDeToTYSfv7oCm6eT+/2iEdyhohhkKy15337KXObRFfTYby6cA7Aqacn7cTz8hV5EJ/ELo7958XCEW8QS2j8L55C11zGXefSqoEcF9LmlNcI5AKs028tlok6fjo1+Lzycu0WE85+yfHHAdU+ayzw4oMe/6NjTOwDW5OVTnz7DEwno/diu8U3fRziHIj2LucyDQ/qDAnosO7TvBYB1S/eZI8vd6YmA3g+f92uEcyjao+YySwd0DeEA2LDX9qTTB/vQe2Nry5xoCCecQ9lePnQu85AK+qFwDsCGpfvOgUGnBycGfeM8jAuxLNbxkzAMrx/yeV4qoE/b8b6zFgHoydtpO94z+GyYZe6bpxBkSykM1ZvI1Pe6N6BP23Fq2PGdXxUAevSDzu5smAp6D2xpuXTgYQUM0neRre90Z0Cfe4IHAH3TNI5NEtD7UfWDuNh3/jaDlwKsx+F9c5n7Kuj7sbEdAPr2Mu5LsHajbnKmURybpDAGVbh3LnNrQI/y+7u1vCwAeJx3lrqzQarom1fzWegH9p1DFd7dtdT9rgq6rrkA5Mj9iU3RKI6NiMm6pe1Qj1vnMgsD+rQd72pOAUCm2rhPwbqdGeGNe1XZ+52xfQfq8vq2ucxtFXRfEgDkzH2KTRDQN6+6gB6T9DaDlwJs1sK5zI2AHl8SGsMBkLOXquis26ibWOLOJnjgCHVaOJdZVEH3JQFACdyv2ASd3DerqiaQsfdcYQzqdWMucyWgx9mLviQAKMHLuG/BOunkvlm1dTH3oBHqdmMuc72CbrkgACVx32LdPhlh1mHajl/Zew5cn8v8HtDjS+KNEQKgIG/i/gXrooK+YRV9pvcyeA1A/67MZeYr6JYJAlAi9y/WSQV982oJ6L67gJnfvw/mA7plggCUyP2LdVJBZ+Wm7XhL3ydgzu9zmcuAHiX110YIgAK9nrbj5y4cUBDVc2De69ky91kFfdvwAFAwk13W5czIblwND9x8ZwHXXWZyAR2AIXAfYy1G3URA37xBn4UeK36sXAWuE9ABGIxBT+iBQfF9BSzyJaDHUzxNKgAomX3orNO50WWFFMaARV6muczXnuIBMBDuZ6yLZe6sku8q4DZbAjoAQ+F+BpSglnPegYe7DOiWBAIwBO5nQAk0iANuc7nE3T4YAIZABR2GYbAVZr0ygHtsf22EABgIE1/W5ZOR3aghLwH3IBG4kyXuAAB3OzE+AGzA5RJ3+2AAGAKVKQCgZK8tcQdgKJ65kgBAyQR0AAAAyICADgAAABkQ0AEAACADKaCfuxAADEDnIgIABTtPAf3MFQQAuJUTAgDYhDNL3AEA7vbc+GzUpwG/N4Ux4E4poJ8YIgAG4NhFhEEY7Nx01E0EdOAuJ18P/CklAPVwPwNKoP8TcJtPX6s4ADAQVoQBJVBFB25zrEkcAEMhoLMur4wsK6Q4Btzm7OvYC3NhiAAo2Pmom1jizrq8NLKskIeJwCIXKZvPurh7kgdAyUx4gVL4vgIWuczkAjoAQ3DkKrIO03bsiLXNG/T2y1i9qlEccN2VgG5iA0DJPGhmXbaM7MbV0B/J3Bu47vJ74TKge5IHQMFOnS0MFMZDRWDe+Wwu8/XcP/QkD4ASuX+xTirorNyomxxp0gzM+X0uMx/QD40QAAVy/2Kd7EHfvFpOZPBwEZj5fS7ze0AfdZPUUfLUEAFQkM7ydtbMGegbFnPSGhzUck2BO53Of+99fe1/6YsCgJKonrNuAjproTgGhCsZ/EpAH3WTQ/thACjEedy3YJ3sQWedFMegbhfX5zLXK+iNLwoACiGcswnPjPJGdRW911lxzElKUK8b2fu2gK6KDkDOLjxQZt2m7XjbILMB+wYZqrRwLnMjoI+6ySeTHgAydxD3K1gnHdw3r7rPtSo6VGvhXGZRBb2JgO6LAoAcpb3nKk5sgv3nm1dLB/fr9vJ6OcCand9WFF8Y0CPJ+6IAIEfuT2yKJe5sxKibHNW2/x4qt3fbSsDbKui+KADI0Ye4P8EmOGJt82qtoCe7GbwGYP26u+Yytwb0sKthHACZuDCBZVOm7TjtP39pwDeu2t4So25y1jTN9xm8FGB97p3L3BnQ44vCZAiAHOxqDMcG2X/ej7Ma3/RM9NewghWGazcy9q3uq6DPlrq/90sCQI9+tLSdDbP/vAf3TVwrYQUrDNP7ZeYy9wb0kBrynPpFAaAHp6NuojEcm6aCvnlOEPrnQ4qdDF4KsDqnyza5XSqgx5LCbU/zANiwC5VMeuL3bvNUz8Oomxw3TfNtFi8GeKrLucyy2/SWraAL6QBs2oNuaLAq03acurc/M6AbV3MH9xtG3eTQNlMo3oPnMksH9ObLF8WJkA7ABsxuaCbs9EH1vB8exl0z6ia7QjoU61FzmQcF9EZIB2D9hHP6JqD3w2d+ASEdivToucyDA3ojpAOwPsI5ORDQ+2EP+i2EdCjKk+YyjwrozdWQruMmAKtwLpzTt9h//tKF2Dyf/btFSP9Tzq8RePpc5tEBvfnnF+mWI9gAeKIu3U9M0MmA6nk/FHyWMOomB03T/IdVrJCl01XMZZ4U0Jvo7j7qJimk/+j3BIBH+HHUTXRrJxfOn+6H5e1LGnWTo3iQpEAG+Uhzma1VzGWeHNBnRt0kHbz+R0/0AFhSqpj9Me4fkAsV9H4c1/imH2tuq6kCGfTrYtVzmZUF9ObLl0X6cn2liQUA9/gxloGZlJONaTvecf55b1TQHyhWsc4KZLYIwOalzPtq1XOZP6z6bURZf3fajg+bpkn7ZF6v+t8BQLHSksw9wZxMqZ73R0B/pFmBbNqO99P3q4dMsHZrnct89fnz57W+gWk7Th0n93VEBahaqu7sj7rJYe0DQb6m7fjMfKUfo27yVY3ve9Wm7fh5FMjeDuudQRY2MpdZe0CfEdQBqpSeMh8I5uRu2o5Tw9u/ulC9OI2Gw6xIHBeYqum7KurwZBstMmwsoM9M2/F2fFl4sgcwXGlf1qGl7JRi2o5T1fGdC9aLD6Nuonv+GkRFfSfCum2n8DC9zGU2HtBn5r4wdmLPl6d7AOW6iC7M6fifI0emURrL23v1/aib7Ff8/jciquq7MfcW1mGxD33PZXoL6NdFZX32syWwA2QtBfKTCOXHKuWUzPL23v3Rd8hmRVifzbm3BXYqleVcJpuAfl1U2Lfi2LZX8V+nv3+ez6uEtfhvTdP8d0Pbm//ZNM3/qvS9L/Ipbl5NdFlOPycq5AxJnDxj611/XvhO6V88qHo+d5rBbC4OpStqLpNtQIdaxVPt//QL0Bt7IaEy03b8ycq93pyPusmrTF8bwMZ9bcghL6NuchbdIunHm3hIAlQgTpkRzvtjaTvAHIyDb6IAABXbSURBVAEd8nTiuvRKBR3q4fPeL/c7gDkCOuRJRaFfezW/eahFrJZ544L3yv0OYI6ADnlSUejXyzhZAhi2Xde3X6Nu4n4HMEdAhww5biYLJu4wfD7n/epqfvMAiwjokC8Tl3691SwOhiuaw710iXvlYTTANQI65MvEpX+qazBcPt/9c58DuEZAh3yZuPRvb9qOn9c+CDA00WOidWH7ZTsXwE0COmTKxCULzxzBBIOket4/27gAFhDQIW8mMP3br30AYEiit8RbF7V3HkIDLCCgQ95MYPr3MppJAcPgoVse3N8AFhDQIW8mMHkwoYcBUD3Ph21cAIsJ6JAxE5hsqKLDMHjYlocPtQ8AwG0EdMifiUweTOyhYKrnWfHwGeAWAjrkz0QmD6roUDYP2fLhvgZwCwEd8nfkGmXDBB8KpHqelfNRNzmpfRAAbiOgQ+ZG3eQsTWhcpyyookOZPFzLh+o5wB0EdCiDKno+Dqbt+HntgwClmLbjbdXzrLifAdxBQIcymNDk41nTNHu1DwIURPU8I6Nu4n4GcAcBHQoQx61duFbZ2Is9rUDGpu14p2ma1jXKhlNJAO4hoEM5VB3y8UxVDopw4DJlxX0M4B4COpTDxCYvb2NvK5ChaTtOD9FeujZZcR8DuIeADuXQ+TY/qnOQodiColdEXk5H3eRT7YMAcB8BHQoRExv79/LyOqp0QF4OYysK+Th0LQDuJ6BDWSwPzI+GcZARjeGy5f4FsAQBHcpigpOfZypDkIdpO37u85iltLz9rPZBAFiGgA4Fscw9W21U7YB+HVjaniUPTQCWJKBDeUx08nQY1TugB3GqwltjnyX3LYAlCehQmFE3ScvcL1y37FjqDj2Jh2O2AOXpg+7tAMsT0KFMJqJ5ejNtx452gs3TtT1f7lcADyCgQ5lUavO1r6s7bE70f3hjyLN0IaADPIyADgUadZPjpmnOXbssPTMhhc2Ih2EeWObryPJ2gIcR0KFcQmC+Xk/b8UHtgwAbcGRpe9bcpwAeSECHcgmAeXvn6DVYn3gI9toQZ+s8mpoC8AACOhRq1E3OmqbpXL+sHdqPDqsXD7/eGdqs2XoA8AgCOpTNBChv9qPDitl3XgzXCOARBHQomzPR85f2o5uowgrMnXdu33nePsQqLwAeSECHgkV3XBXa/L2dtuPd2gcBVsC+8zJ4KAnwSAI6lG/fNSzCT9N2vF37IMBjTdtx+q57awCzpzkcwBMI6FA4zeKKcjRtx1u1DwI8VKxA+c7AFUH1HOAJBHQYBhOiMjyLzu7Pax8IWFY81HKsZDncjwCeQECHARh1kzQhOncti5D2zx7XPgiwjOjYfqwpXDHeaw4H8DQCOgyHqkU5dHaHe+jYXiTfawBPJKDDcFgCWpa3QjosFuH8WMf2opyOuonVQQBPJKDDQMSRa+9dz6KkkL5X+yDAAofCeXE8JAZYAQEdhsWRa+X5wRnp8E+xsuSNISnKefRCAeCJBHQYEEeuFesnIR1+D+fOOi+PcA6wIgI6DI8qepmEdKomnBfrwvJ2gNUR0GFgoknPqetaJCGdKgnnRTuMHigArICADsOkmlEuIZ2qCOfFc78BWCEBHQYomvWcu7bFEtKpgnBevPfR+wSAFRHQYbjsRS/bT45gY6jSOefC+SC4zwCs2FefP382pjBQ03acKhsvXd+ipQqVajqDkcJ50zTHzjkvnu8mgDVQQYdhU90o39uoNELxhPNBcX8BWAMVdBg4VfTBSJ35t3VLplTTdrwV4fyZi1g81XOANVFBh+FT5RiGVHE8jpADRZm24x3hfFDcVwDWRECHgdPRfVBmIX279oGgHNHs8M/C+WDo3A6wRgI61EG1YzhSyPmLY9goQfRP+MHFGhT3E4A1sgcdKmEv+iDZB0qWNIMbLN85AGumgg71cKb28KQO7yfTdvyq9oEgH7EF40w4H5wL1XOA9RPQoRKjbnLUNE3neg9OCkEn0YQLejVtxynA/cV+80E6sPccYP0EdKiL6scwpTD052k7Pqh9IOhHWtI+bcdpSft3LsEgpeq57xeADbAHHSozbcepkv7GdR+sdF76jkoXmxKrNw5VzQftT6NuIqADbICADpWJ/cr/6boP2uVeURNq1ikawaVVOe8M9KCdj7qJPhcAG2KJO1QmKqs/uu6DliqZP6QlxxrIsQ7RCO5EOK+CBqMAG6SCDhWKyteZJalVUE1nZVTNq9ONusl27YMAsEkq6FChUTf5pGFcNVTTWQlV8yqpngNsmAo6VCydoe2s4qpcxFFJHs6wtKiapxUYb41aVX4cdRMBHWDDVNChbiZfdUnV9O/Sg5mohsKdpu14L7bDCOd1ubDKCqAfKuhQOceuVe1DekjjSDauiwc4B1bYVOvbUTc5rH0QAPogoEPlYl/yiYZx1bqIIHYQvQmoWHwf7KuYV01jOIAeCejAbBnrD0aiahdRTVc1q1DsM0/fA9/VPhY034y6yYlhAOiHgA5c0jCOcB7HsgnqFZgL5ntW0aAxHED/BHTg0rQdbzVN81ejQRDUB0wwZ4H0md+y1QWgXwI68LtpOz5wxjHXCOoDIphzh/8YdZMjAwTQLwEd+F1M3tNS95dGhWvOo5ncoQpbeaL5Wwrlu4I5C3wYdZMdAwPQPwEduCKOV/qLUeEWqZncYXR9dzxb5uLzvKsrO3dIn+lXHrwB5EFAB26w1J0lfYiKumWxGYmVMDtRMdf4kftY2g6QEQEduMFSdx7oPKrqh6rq/YlGj3sRzi1jZxmWtgNkRkAHFrLUnUdKVfVUjTuyZHb9Ym/5TixjVy3nISxtB8iQgA7cylJ3nuBiLqhbPrtCc0vY08+bwbwxNs3SdoAMCejArSx1Z0VmYf1YZf1x5irl20I5K2BpO0CmBHTgTpa6swbdLLCPusmJAV4sPnuzUG75OqtiaTtAxgR04F7TdrzfNM13Roo1OI/K+nEE9mqbzEWTt+25H43eWIc/jrrJsZEFyJOADixl2o5PVPHYgIu5wH4y1CAR20fmA3mbwcti+H4cdZM91xkgXwI6sJTYA3uiqkcPTuN37yyC+1lJlfaojL+KQD770deBTTsddZMtow6QNwEdWNq0HaejnH4yYmQi7WX/FOF99mez6ar7XDW8iWr47M/nVp2QibQyZVvPB4D8CejAg0zb8WHTNG+NGgU4j6p7Mx/gr7ntn2/f8vbm//mWFSUU4ttRNzl0sQDyJ6Bzxce2nS2/fDU3EbU3Ehik35pfL9/Wr81vzefmt9//ggF5P+omuy7o/T627fbcHGjLKphBuLi2yury50XXVduQlPwJ6JWLQD47ykcQB4jg/stlbP+1Edgp2GksbXek2gIRyB1lWKf5E0SOXnSdzwjZENAr9LFt05PhvbgpaVQEcIfPzefLuP5z8/Plf4ZC2He+wMe23Yn5z44tKsxJD7MOhHVyIKBX5GPbpiVuuyrlAI/zpbL+5S/InH3n4WPbPo/CxK7CBEt43zTN4YuuG+Qxn+RPQK9ABPN9NyWA1UiV9J+bfwjq5Mq+83+uGNxXLeeR0kkh+4I6myagD5hgDrBegjoZqv6887mK+XcZvBzKJ6izUQL6AEXTkwMNTwA2IzWS+0fzdw3l6Fvad/6q5qZwH9t2L4oTKuasWlr6vmePOusmoA9IPDFON6V3tY8FQB++tJLTTI7efFNrU7hYzn6ozw5rlh6C7b7ouiMDzboI6AMRx6UdWc4O0C/VdHpSbVM4VXN68CGCumo6KyegD0DcmH6ofRwAcpJCur3pbEiVTeFi5WDa0vc2g5dDfdJZ6jsvus5RhqyUgF64j2176MYEkKcU0FNQhzXqRt1ku7YBjiXtR/rtkIFvX3SdIw1ZGQG9UPHU+NiNCSBv6ez0vzd/ty+ddThtmma7tqZwsa3v2JJ2MvL9i67bd0FYBQG9QMI5QFnSfvS/N38T0lml1Kxqa9RNzmoaVeGcjL1/0XXVbTVh9b42pmURzgHK83XzdfNfmv/afNV85eqxChdRORfOIR9vY+spPImAXhDhHKBcQjortFfbcWrCOYUQ0nkyAb0QwjlA+WYhHZ6guuPUhHMKk0K6/eg8moBejgPhHKB8KaT/W/NfXEke48cKw/nz6NYunFOS7z62rf3oPIqAXoA459xRagAD8YfLv/7V5eQh0lnnexWOWArnLzN4HfBQB7H6Ax5EQM/cx7ZNZ5v+UPs4AAzNvzX/dllNhyWkcF5dNS6WCbcZvBR4jLTq4yhWgcDSzAwyFh9ojSYABkrTOJaQzjqvrnIeBYrvMngp8BQvzeV5KAE9b4eWdQEMVwrn/2qpO7c7jePUPtU0RgoUDMybj22746KyLAE9U/Hk+E3t4wAwdGkv+r80/+I6c12V4TzsK1AwMIeWurMsAT1fnhwDVEJXd66pNpxHU613GbwUWKVn8eAJ7iWgZyiaonhyDFCJtNRdV3dCzZXzJo6VhSF697FtX7my3EdAz0wsf6nxGBWAqqW96BrGVa/qcB7b+3RtZ8iskOVeAnp+9mIZDAAVUUWvXu2V88YSYCrQxoMouJWAnhHVc4C6/aH5gyp6naoP56rnVMRcnzsJ6HnZVT0HqFcK5zq6V6f6cB5Uz6nFG3vRuYuAnhdP1AAq96/Nv9U+BDURzr9Uz1+pnlMZc35uJaBnIpZ26dwOULlURf/a7bkGwvk/CSvUZtcV5zZmAPnwQQXgkmZxgyecX2UORG2efWzbHVedRQT0fPiQAnDJPvRB+yCc/1OEFP13qJEHUyz0B8PSPzcnAObNmsX92vxqXIbl/aibmJRf5cgpauV3n4VU0PPgAwrAFarogyOcL2YFIbWyzJ2FBPQ8COgAXPG1gD4k3wrnN0X3dg1yqZkMwA0Ces8+tu3zpmleVz0IANyQOrmnpe4UL4XzQ5dxIeGE2m3VPgDcZA96/9ycAFgohXT70It1Ec3gTmofiDuYA1G7tvYB4CYV9P55cgbAQpa5F+tUOF/KqwJeI6zVx7b1oIorVND7J6ADsNDXnqOXyBnny1M9BA+quEZA79/z2gcAgMXsQC+OTu1LigZxgIDONR7N98/TYwAWssS9KH8Szh9EKIEvrKblChV0AIDHS83gdkbd5NgYPogVhPCFzwJXqKD36GPbemIGwJ0ctZa1tN98Szh/FHMggAUE9H55YgbAnTSKy9b7aAZ3VvtAAE9iuytXWOIOAPAwab/5gTEDYNUEdACA5ZzHfnPnmwOwFtbNAQDc70PsNxfOAVgbFXQAgLtZ0g7ARgjoAACLWdIOwEZZ4t6vTzW/eQDu91vzm1Hqx3tL2oEN6Awy81TQe/Si604+tk5WAOB2n5vPRmezLpqm2R11k6Oa3nQPPPgAWEAFHQDgiy6q5sL5+llFCF/4LHCFCnr/TpumeV37IABw02/Nr0ZlM1LVfF8juI06q+i9wl2sJuEKFfT+uUEBsJDF7Rsxq5oL5xv0ouvMf+ALnwWuEND756kZAAtpELdWF3F82vaom5gg9+O0xjcN1/j+4QoBvX8COgALWeK+NqrmeTAHonovuu649jHgKnvQ++dDCcBCKugrZ695XtIc6G3tg0DVrCLhBhX0nr3outS58bzqQQDghhTOHbG2Uh+apnklnGdFkYLa+Qxwg4CeB8e5AHCF5e0rkx6C/3HUTXZG3cRxRhmJRnGKFNRMQOcGAT0PPpwAXPGrgP5UaTn796Nukqrm7rP5cm2o1ouuU6TjBgE9A/HhvKh9HAD4Ii1tF9Cf5EM0gdsv+D3UQkChVh9ceRYR0PPhBgXAJeH80eaXszu6qACKFFTM3J+FBPR8HNY+AAB88Wvzi5F4mNmZ5pazl8kciNpcvOg6v/csJKBnIs5A1CgFoHKWtz/Y97qzF09QoTaq59xKQM+LyQVA5X5u/lH7ECzrfdM0/572mevOXrYXXXfSNE1X+zhQFf0xuJWAnpdD+7AA6qV6vpQugvmufeaDokhBLbo4YhAWEtAz8qLrPrlBAdTrl+aXy5DOQl00gNsWzIcnmsXZ6kcNVM+5k4CenwNVdID6pGD+S/OzK3/TfDDXAG7Y9mofAAavi75TcCsBPTOq6AB1+rn5WfX8KsG8MlFFtxedIfMQint99fmzyUCOPrZtWr73svZxAKhBCub/r/m/rvUXKaDtC+V1+ti2203T/KX2cWCQ3r/oul2XlvuooOfLBxigEv9o/u5Sf+nKrmJeuVj++2Pt48DgXKiesywV9Ix9bNu01OtN7eMAMGS/XB6sVvXRau+jYq7xG5c+tu3zpmlOrCRkQP4jtnDAvQT0jLlBAQxbWtr+t+b/1bj3/CL6rRw4w5xFLHVnQD686LodF5RlCeiZc4MCGK4Uzn9rfqvpCp9GKD/M4LWQuY9tmx7ivHOdKFg6OnArmkDDUgT0Anxs23Re4ne1jwPAkKRl7RUdq5aWsR/aW85DfWzbtJLwtYGjUN+86LoTF4+HENAL8bFtU7Xhbe3jADAEvzS/1NAY7jyWsR9axs5jxXa/1J/gmUGkMN++6DqrhXgwAb0QcYM69hQZoGxpSXta2j5gquWs1Me23Yo5kJBOKX580XW6tvMoAnpBhHSAsqVw/vfmb0NsCnca1fIj1XLWQUinIM4750kE9MII6QBlGmA4T0vYj6LpmyPSWLuPbZtCz09GmowJ5zyZgF4gIR2gLAMK57NQnpawa3zExsXpNkcq6WRIOGclBPRCCekAZRhAOBfKyYrl7mTInnNWRkAvWIT0A93dAfJUcLd2oZysRUg/VKggA7q1s1IC+gB8bNv0xO6H2scBICcFnnPeRSg/sqecEkShIgWjNy4YPbhommbbOeesmoA+EPEkOU2sXtY+FgB9SkvZ05L2tLQ9c+exTDjdO451X6dUChX0ID3Q3HnRdb43WTkBfUDiSfJ+0zTvah8LgD6kinn6K9P95hcRyI8jkKv6MBiWvLMh6Xt0/0XXHRhw1kVAH6DocHrgJgWwGala/nPzj+bX5tecRlwgpzpRTd/XQI41+NA0zd6LrrMFiLUS0Acszgs9cJMCWI9UKf/5cq/5LzmM8GnTNCdzgdwkkipposuKdVE1PzawbIKAPnBxk0pPk3ftTwdYjRTMf7n8q7fl7LMwfvkz6iYmjnDNx7Z9FdV0QZ3HSMH8UId2Nk1Ar0hU1PcsfQd4nLSUPYXyDVbML+aDeNM0Z8I4PEwE9V3FCpaUlrIfqJjTFwG9QtFIJd2kdtyoAO6WKuS/Rr18jZ3ZU6Xm0yyEC+KwHh/bdifmPzu2ADLnNJoMHtljTt8E9MpFWE83qdRYrq19PACay0p5avf222UwX0EoP43wPQvgTewTb4Rw6E+E9e34sbqwLvNNNIVysiKgc0V0gE+h/VX8+dxNCxiqL+H782UY/3z5d7/NB/JZsF5kPmzPzIftM03aoBzRs2crwvqruR8rDcs3v0Lp8kcgJ2cCOg8ydwMDKFGamN0WugFuFasOnxuh7Pmep1xN0/x/P7mJEBkZdDEAAAAASUVORK5CYII=' diff --git a/src/util/storage-util.js b/src/util/storage-util.js new file mode 100644 index 000000000..b087e887a --- /dev/null +++ b/src/util/storage-util.js @@ -0,0 +1,84 @@ +import set from 'lodash/fp/set' + +const localStorage = global.localStorage || { + setItem () {}, + getItem () {}, + removeItem () {} +} + +/** + * getItem() wrapper of the native getItem() method of the Storage interface, + * when passed a key name, will return that key's value or null if the key does not exist. + * @param {String} key Key of value that you want to get from local storage. + * @return {(String|null)} String representation of value or null if the key does not exist. + */ +const getItem = (key) => { + return localStorage.getItem(key) +} + +/** + * getParsedItem() wrapper of the native getItem() method of the Storage interface, + * when passed a key name, will return that key's parsed value or null if the key does not exist. + * @param {String} key Key of value that you want to get from local storage. + * @returns {(Object|null)} Object representation of value or null if the key does not exist. + */ +const getParsedItem = (key) => { + return JSON.parse(localStorage.getItem(key)) +} + +/** + * setItem() wrapper of the native setItem() method of Storage interface, + * when passed a key name and value, will add that key to the storage, + * or update that key's value if it already exists. + * @param {String} key Key that you want to create / update. + * @param {Any} value Value that will be stored / updated for the key. + */ +const setItem = (key, value) => { + localStorage.setItem(key, value) +} + +/** + * setStringifyItem() wrapper of the native setItem() method of Storage interface, + * when passed a key name and value, will add that key to the storage, + * or update that key's value if it already exists. + * The value will be stringifyed. + * @param {String} key Key that you want to create / update. + * @param {Any} value Value that will be stored / updated for the key. + */ +const setStringifyItem = (key, value) => { + localStorage.setItem(key, JSON.stringify(value)) +} + +/** + * setParsedItem() wrapper of the native setItem() method of Storage interface, + * when passed a key name and value, will add that key to the storage, + * or update that key's value if it already exists. + * @param {String} key Key that you want to create / update. Key also can be a path of the property to set. + * @param {Any} value Value that will be stored / updated for the key. + */ +const setParsedItem = (key, value) => { + const path = key.split('.') + const i = getParsedItem(path[0]) + const v = set(path.slice(1))(value)(i) + setStringifyItem(path[0], v) +} + +/** + * removeItem() wrapper of the native removeItem() method of Storage interface, + * when passed a key name and value, will add that key to the storage, + * or update that key's value if it already exists. + * @param {String} key Key that you want to create / update. + * @param {Any} value Value that will be stored / updated for the key. + */ +const removeItem = (key, value) => { + localStorage.removeItem(key, value) +} + +export { + getItem, + getParsedItem, + setItem, + setStringifyItem, + setParsedItem, + removeItem +} diff --git a/src/util/store-util.js b/src/util/store-util.js new file mode 100644 index 000000000..ec28c9689 --- /dev/null +++ b/src/util/store-util.js @@ -0,0 +1,172 @@ +import flow from 'lodash/fp/flow' +import isEmpty from 'lodash/fp/isEmpty' +import isEqual from 'lodash/fp/isEqual' +import uniqWith from 'lodash/fp/uniqWith' +import sortBy from 'lodash/fp/sortBy' +import reverse from 'lodash/fp/reverse' +import groupBy from 'lodash/fp/groupBy' +import filter from 'lodash/fp/filter' +import values from 'lodash/fp/values' +import map from 'lodash/fp/map' +import chunk from 'lodash/fp/chunk' +import cloneDeep from 'lodash/fp/cloneDeep' + +const notaryAccount = process.env.VUE_APP_NOTARY_ACCOUNT || 'notary@notary' + +export function getTransferAssetsFrom (transactions, accountId, settlements = []) { + if (isEmpty(transactions)) return [] + const transformed = [] + + transactions.forEach((t, idx) => { + const batch = t.payload.batch + const { commandsList, createdTime } = t.payload.reducedPayload + const signatures = t.signaturesList.map(x => Buffer.from(x.publicKey, 'base64').toString('hex')) + + commandsList.forEach(c => { + if (!c.transferAsset) return + + const { + amount, + destAccountId, + srcAccountId, + description, + assetId + } = c.transferAsset + + const tx = { + from: match(srcAccountId) + .on(x => x === accountId, () => 'you') + .on(x => x === notaryAccount, () => 'notary') + .otherwise(x => x), + to: match(destAccountId) + .on(x => x === accountId, () => 'you') + .on(x => x === notaryAccount, () => 'notary') + .otherwise(x => x), + amount: amount, + date: createdTime, + message: description, + batch, + signatures, + id: idx, + assetId + } + const settlement = findSettlementByBatch(tx, settlements) + if (settlement) { + transformed.push(settlement) + } else { + transformed.push(tx) + } + }) + }) + + /* + * As actions.getAccountTransactions() does, we fetch account's txs + * by multiple getAccount*Asset*Transactions calls. + * + * Also, getAccount*Asset*Transactions returns txs each of which includes + * one or more command(s), which possibly includes also commands issued + * against different asset. + * + * Therefore, when merging transactions for multiple assets, duplication + * possibly occurs. + * e.g. + * accountAssetTransactions_of_asset_A = [ + * { commands: [command_for_asset_A_1, command_for_asset_B_1] }, + * { commands: [command_for_asset_A_2] } + * ] + * accountAssetTransactions_of_asset_B = [ + * { commands: [command_for_asset_A_1, command_for_asset_B_1] } + * ] + * // -> command_for_asset_A_1 and B_1 duplicates! + * + * To avoid it, we uniq the transactions. + */ + return flow( + uniqWith(isEqual), + sortBy('date'), + reverse + )(transformed) +} + +// TODO: think about to use hashMap +export function getSettlementsFrom (transactions, accountId) { + if (isEmpty(transactions)) return [] + const settlements = flow([ + filter(tr => tr.payload.batch), + map(tr => { + const commands = [] + const { commandsList, createdTime } = tr.payload.reducedPayload + const batch = tr.payload.batch + const signatures = tr.signaturesList.map(x => Buffer.from(x.publicKey, 'base64').toString('hex')) + commandsList.forEach(c => { + if (!c.transferAsset) return + const { + amount, + destAccountId, + srcAccountId, + description, + assetId + } = c.transferAsset + + const tx = { + from: srcAccountId, + to: destAccountId, + amount: amount, + date: createdTime, + message: description, + signatures, + assetId, + batch + } + commands.push(tx) + }) + if (commands.length > 1) return + return commands[0] + }), + groupBy(tr => tr.batch.reducedHashesList), + values, + map(tr => { + let from = {} + let to = {} + tr.forEach(obj => { obj.to === accountId ? to = obj : from = obj }) + return { from, to } + }), + filter(tr => tr.from.from), + sortBy(tr => tr.from.date) + ])(transactions) + return settlements +} + +export function getSettlementsRawPair (transactions) { + if (isEmpty(transactions)) return [] + // convert elements to pairs by two elements in pair + const settlements = chunk(2)(transactions.getTransactionsList()) + return settlements +} + +export function findBatchFromRaw (rawUnsignedTransactions, settlement) { + let rawUnsignedTransactionsCopy = cloneDeep(rawUnsignedTransactions) + const rawPairs = getSettlementsRawPair(rawUnsignedTransactionsCopy) + let batch = rawPairs.find(tr => { + return isEqual(tr[0].toObject().payload.batch, settlement) || isEqual(tr[1].toObject().payload.batch, settlement) + }) || [] + return batch +} + +function findSettlementByBatch (tx, settlements) { + const s = filter( + s => isEqual(s.from.batch)(tx.batch) + )(settlements) + return s[0] +} + +// Match function https://codeburst.io/alternative-to-javascripts-switch-statement-with-a-functional-twist-3f572787ba1c +const matched = x => ({ + on: () => matched(x), + otherwise: () => x +}) + +const match = x => ({ + on: (pred, fn) => (pred(x) ? matched(fn(x)) : match(x)), + otherwise: fn => fn(x) +}) diff --git a/tests/e2e/.eslintrc.json b/tests/e2e/.eslintrc.json new file mode 100644 index 000000000..0d714a44e --- /dev/null +++ b/tests/e2e/.eslintrc.json @@ -0,0 +1,8 @@ +{ + "plugins": [ + "cypress" + ], + "env": { + "cypress/globals": true + } +} \ No newline at end of file diff --git a/tests/e2e/custom-assertions/elementCount.js b/tests/e2e/custom-assertions/elementCount.js deleted file mode 100644 index 528830385..000000000 --- a/tests/e2e/custom-assertions/elementCount.js +++ /dev/null @@ -1,19 +0,0 @@ -// A custom Nightwatch assertion. -// The assertion name is the filename. -// Example usage: -// -// browser.assert.elementCount(selector, count) -// -// For more information on custom assertions see: -// http://nightwatchjs.org/guide#writing-custom-assertions - -exports.assertion = function elementCount (selector, count) { - this.message = `Testing if element <${selector}> has count: ${count}` - this.expected = count - this.pass = val => val === count - this.value = res => res.value - function evaluator (_selector) { - return document.querySelectorAll(_selector).length - } - this.command = cb => this.api.execute(evaluator, [selector], cb) -} diff --git a/tests/e2e/fixtures/alice@d3.priv b/tests/e2e/fixtures/alice@d3.priv new file mode 100644 index 000000000..d4ff52416 --- /dev/null +++ b/tests/e2e/fixtures/alice@d3.priv @@ -0,0 +1 @@ +9c430dfe8c54b0a447e25f75121119ac3b649c1253bce8420f245e4c104dccd1 diff --git a/tests/e2e/fixtures/crypto-api/histoday30.json b/tests/e2e/fixtures/crypto-api/histoday30.json new file mode 100644 index 000000000..a5936ae82 --- /dev/null +++ b/tests/e2e/fixtures/crypto-api/histoday30.json @@ -0,0 +1,261 @@ +{ + "Response": "Success", + "Type": 100, + "Aggregated": false, + "Data": [{ + "time": 1531267200, + "high": 2020.83, + "low": 1899.37, + "open": 1958.7, + "volumefrom": 54023.33, + "volumeto": 108327581.32, + "close": 2005.2 + }, { + "time": 1531353600, + "high": 2021.24, + "low": 1606.45, + "open": 1966.59, + "volumefrom": 58907.32, + "volumeto": 112164249.87, + "close": 1904.08 + }, { + "time": 1531440000, + "high": 1919.11, + "low": 1731.7, + "open": 1894.85, + "volumefrom": 208752.15, + "volumeto": 367948627.11, + "close": 1762.61 + }, { + "time": 1531526400, + "high": 1793.78, + "low": 1743.36, + "open": 1775.27, + "volumefrom": 48494.97, + "volumeto": 86339959.64, + "close": 1780.39 + }, { + "time": 1531612800, + "high": 1812.97, + "low": 1721.5, + "open": 1797.46, + "volumefrom": 80862.23, + "volumeto": 145571420.94, + "close": 1800.24 + }, { + "time": 1531699200, + "high": 1929.06, + "low": 1853.28, + "open": 1884.93, + "volumefrom": 48359.67, + "volumeto": 90107605.92, + "close": 1863.28 + }, { + "time": 1531785600, + "high": 2043.6, + "low": 1894.76, + "open": 2018.79, + "volumefrom": 86805.56, + "volumeto": 169408862.84, + "close": 1951.59 + }, { + "time": 1531872000, + "high": 1972.26, + "low": 1861.97, + "open": 1940.43, + "volumefrom": 94052.38, + "volumeto": 178917723.52, + "close": 1902.32 + }, { + "time": 1531958400, + "high": 1946.22, + "low": 1821.91, + "open": 1932.1, + "volumefrom": 96988.82, + "volumeto": 180414723.41, + "close": 1860.16 + }, { + "time": 1532044800, + "high": 1856.05, + "low": 1720.58, + "open": 1841.19, + "volumefrom": 50031.33, + "volumeto": 86825871.02, + "close": 1735.43 + }, { + "time": 1532131200, + "high": 1847.3, + "low": 1744.02, + "open": 1754.48, + "volumefrom": 38868.82, + "volumeto": 70971355.81, + "close": 1825.92 + }, { + "time": 1532217600, + "high": 2650.14, + "low": 1793.33, + "open": 1816.42, + "volumefrom": 594431.74, + "volumeto": 1301020860.7, + "close": 2188.68 + }, { + "time": 1532304000, + "high": 2429.08, + "low": 1938.1, + "open": 2268.55, + "volumefrom": 432671.02, + "volumeto": 843029195.5, + "close": 1948.43 + }, { + "time": 1532390400, + "high": 2144.18, + "low": 1715.45, + "open": 2128.8, + "volumefrom": 608561.21, + "volumeto": 1129471348.92, + "close": 1855.97 + }, { + "time": 1532476800, + "high": 1908.05, + "low": 1762.31, + "open": 1806.73, + "volumefrom": 312381.72, + "volumeto": 573589066.63, + "close": 1836.18 + }, { + "time": 1532563200, + "high": 1911.48, + "low": 1797.34, + "open": 1805.7, + "volumefrom": 175201.16, + "volumeto": 324377939.69, + "close": 1851.46 + }, { + "time": 1532649600, + "high": 1948.05, + "low": 1866.74, + "open": 1900.58, + "volumefrom": 134383.99, + "volumeto": 253710253.92, + "close": 1887.95 + }, { + "time": 1532736000, + "high": 1906.25, + "low": 1859.95, + "open": 1902.18, + "volumefrom": 75653.22, + "volumeto": 141519182.93, + "close": 1870.63 + }, { + "time": 1532822400, + "high": 1974.41, + "low": 1859.79, + "open": 1872.53, + "volumefrom": 75202.31, + "volumeto": 142235393.06, + "close": 1891.37 + }, { + "time": 1532908800, + "high": 2031.12, + "low": 1861.02, + "open": 1877.73, + "volumefrom": 149100.65, + "volumeto": 287744871.42, + "close": 1929.87 + }, { + "time": 1532995200, + "high": 1948.43, + "low": 1801.81, + "open": 1856.86, + "volumefrom": 121176.79, + "volumeto": 228135907.23, + "close": 1882.67 + }, { + "time": 1533081600, + "high": 1979.37, + "low": 1803.4, + "open": 1858.21, + "volumefrom": 120052.07, + "volumeto": 229026935.5, + "close": 1907.73 + }, { + "time": 1533168000, + "high": 1956.01, + "low": 1846.81, + "open": 1900.46, + "volumefrom": 151019.09, + "volumeto": 280350328.49, + "close": 1856.39 + }, { + "time": 1533254400, + "high": 1928.67, + "low": 1776.02, + "open": 1831.79, + "volumefrom": 106502.28, + "volumeto": 199870698.83, + "close": 1876.68 + }, { + "time": 1533340800, + "high": 1802.4, + "low": 1737.34, + "open": 1769.43, + "volumefrom": 55470.98, + "volumeto": 99461685.98, + "close": 1793.04 + }, { + "time": 1533427200, + "high": 1844.8, + "low": 1785.82, + "open": 1797.89, + "volumefrom": 69222.52, + "volumeto": 125660332.78, + "close": 1815.31 + }, { + "time": 1533513600, + "high": 1805.86, + "low": 1767.39, + "open": 1796.57, + "volumefrom": 65392.91, + "volumeto": 115776839.3, + "close": 1770.48 + }, { + "time": 1533600000, + "high": 1734.71, + "low": 1704.51, + "open": 1727.38, + "volumefrom": 62410.11, + "volumeto": 106863583.15, + "close": 1712.28 + }, { + "time": 1533686400, + "high": 1659.21, + "low": 1477.25, + "open": 1648.82, + "volumefrom": 79190.59, + "volumeto": 116984299.08, + "close": 1477.25 + }, { + "time": 1533772800, + "high": 1807.32, + "low": 1552.17, + "open": 1575.2, + "volumefrom": 186576.05, + "volumeto": 326457711.97, + "close": 1749.73 + }, { + "time": 1533859200, + "high": 1748.16, + "low": 1549.71, + "open": 1741.99, + "volumefrom": 75053.31, + "volumeto": 120845586.03, + "close": 1609.02 + }], + "TimeTo": 1533859200, + "TimeFrom": 1531267200, + "FirstValueInArray": true, + "ConversionType": { + "type": "multiply", + "conversionSymbol": "BTC" + } +} \ No newline at end of file diff --git a/tests/e2e/fixtures/crypto-api/histoday365.json b/tests/e2e/fixtures/crypto-api/histoday365.json new file mode 100644 index 000000000..8cb281e49 --- /dev/null +++ b/tests/e2e/fixtures/crypto-api/histoday365.json @@ -0,0 +1,2941 @@ +{ + "Response": "Success", + "Type": 100, + "Aggregated": false, + "Data": [{ + "time": 1502323200, + "high": 1460.01, + "low": 1291.44, + "open": 1338.04, + "volumefrom": 137920.12, + "volumeto": 180247804.83, + "close": 1306.9 + }, { + "time": 1502409600, + "high": 1392.21, + "low": 1266.76, + "open": 1386.39, + "volumefrom": 46630.55, + "volumeto": 59524829.69, + "close": 1276.52 + }, { + "time": 1502496000, + "high": 1412.05, + "low": 1220.66, + "open": 1355.16, + "volumefrom": 86049.15, + "volumeto": 111184106.71, + "close": 1292.1 + }, { + "time": 1502582400, + "high": 1401.51, + "low": 1195.74, + "open": 1397.22, + "volumefrom": 60908.37, + "volumeto": 73382404.18, + "close": 1204.8 + }, { + "time": 1502668800, + "high": 1291.01, + "low": 1127.58, + "open": 1258.87, + "volumefrom": 41645.26, + "volumeto": 48109853.71, + "close": 1155.23 + }, { + "time": 1502755200, + "high": 1361.49, + "low": 1083.54, + "open": 1148.69, + "volumefrom": 92813.08, + "volumeto": 116591791.1, + "close": 1256.2 + }, { + "time": 1502841600, + "high": 1348.88, + "low": 1207.34, + "open": 1293.28, + "volumefrom": 37473.88, + "volumeto": 46810871.94, + "close": 1249.16 + }, { + "time": 1502928000, + "high": 1272.57, + "low": 1170.41, + "open": 1229.4, + "volumefrom": 30451.4, + "volumeto": 35709443.24, + "close": 1172.67 + }, { + "time": 1503014400, + "high": 1181.84, + "low": 1095.21, + "open": 1140.11, + "volumefrom": 78874.47, + "volumeto": 89309562.38, + "close": 1132.3 + }, { + "time": 1503100800, + "high": 1161.45, + "low": 1111.55, + "open": 1129.32, + "volumefrom": 29822.88, + "volumeto": 34318380.93, + "close": 1150.74 + }, { + "time": 1503187200, + "high": 1249.34, + "low": 1131.25, + "open": 1139.45, + "volumefrom": 36064.39, + "volumeto": 43883510.4, + "close": 1216.81 + }, { + "time": 1503273600, + "high": 1447.13, + "low": 1161.14, + "open": 1186.51, + "volumefrom": 79257.5, + "volumeto": 103427867.2, + "close": 1304.96 + }, { + "time": 1503360000, + "high": 1392.85, + "low": 1226.08, + "open": 1330.55, + "volumefrom": 70627.86, + "volumeto": 86900518.94, + "close": 1230.4 + }, { + "time": 1503446400, + "high": 1334.05, + "low": 1201.36, + "open": 1227.66, + "volumefrom": 58206.76, + "volumeto": 73893481.82, + "close": 1269.5 + }, { + "time": 1503532800, + "high": 1347.2, + "low": 1278.32, + "open": 1306.12, + "volumefrom": 45646.83, + "volumeto": 59957111.21, + "close": 1313.5 + }, { + "time": 1503619200, + "high": 1582.48, + "low": 1301.93, + "open": 1312.99, + "volumefrom": 159429.14, + "volumeto": 228536889.32, + "close": 1433.47 + }, { + "time": 1503705600, + "high": 1884.28, + "low": 1404.96, + "open": 1425.74, + "volumefrom": 225095.07, + "volumeto": 374598713.59, + "close": 1664.18 + }, { + "time": 1503792000, + "high": 1755.71, + "low": 1540.28, + "open": 1650.91, + "volumefrom": 98914.22, + "volumeto": 154778993.17, + "close": 1564.78 + }, { + "time": 1503878400, + "high": 1587.07, + "low": 1243.82, + "open": 1578.02, + "volumefrom": 317529.25, + "volumeto": 464399229.3, + "close": 1462.54 + }, { + "time": 1503964800, + "high": 1562.13, + "low": 1213.3, + "open": 1515.48, + "volumefrom": 113691.04, + "volumeto": 156934563.97, + "close": 1380.36 + }, { + "time": 1504051200, + "high": 1420.27, + "low": 1319.88, + "open": 1373.35, + "volumefrom": 69109.5, + "volumeto": 95957849.66, + "close": 1388.49 + }, { + "time": 1504137600, + "high": 1478.74, + "low": 1381.81, + "open": 1419.19, + "volumefrom": 65948.59, + "volumeto": 94545877.08, + "close": 1433.63 + }, { + "time": 1504224000, + "high": 1582.74, + "low": 1493.59, + "open": 1502.24, + "volumefrom": 71343.96, + "volumeto": 112070659.57, + "close": 1570.85 + }, { + "time": 1504310400, + "high": 1503.46, + "low": 1319.1, + "open": 1482.8, + "volumefrom": 65860.53, + "volumeto": 88959135.08, + "close": 1350.72 + }, { + "time": 1504396800, + "high": 1508.02, + "low": 1392.76, + "open": 1410.06, + "volumefrom": 40031.95, + "volumeto": 57704854.97, + "close": 1441.47 + }, { + "time": 1504483200, + "high": 1383.49, + "low": 1248.86, + "open": 1367.83, + "volumefrom": 71026.31, + "volumeto": 92379659.84, + "close": 1300.64 + }, { + "time": 1504569600, + "high": 1394.87, + "low": 1305.62, + "open": 1355.64, + "volumefrom": 46607.08, + "volumeto": 64115029.6, + "close": 1375.65 + }, { + "time": 1504656000, + "high": 1434.31, + "low": 1345.5, + "open": 1410.56, + "volumefrom": 45555.24, + "volumeto": 62991508.11, + "close": 1382.75 + }, { + "time": 1504742400, + "high": 1395.12, + "low": 1342, + "open": 1373.93, + "volumefrom": 32620.23, + "volumeto": 44870104.97, + "close": 1375.53 + }, { + "time": 1504828800, + "high": 1398.31, + "low": 1296.81, + "open": 1321.02, + "volumefrom": 46608.53, + "volumeto": 61835070.67, + "close": 1326.69 + }, { + "time": 1504915200, + "high": 1359.69, + "low": 1310.5, + "open": 1326.21, + "volumefrom": 17658.75, + "volumeto": 23241916.99, + "close": 1316.17 + }, { + "time": 1505001600, + "high": 1339.62, + "low": 1253.71, + "open": 1302.91, + "volumefrom": 31806.21, + "volumeto": 41294638.57, + "close": 1298.32 + }, { + "time": 1505088000, + "high": 1280.89, + "low": 1223.3, + "open": 1280.89, + "volumefrom": 22447.08, + "volumeto": 27995773.71, + "close": 1247.19 + }, { + "time": 1505174400, + "high": 1299.45, + "low": 1228.27, + "open": 1238.51, + "volumefrom": 25534.23, + "volumeto": 32536226.55, + "close": 1274.22 + }, { + "time": 1505260800, + "high": 1386.9, + "low": 1154.53, + "open": 1168.04, + "volumefrom": 102566.25, + "volumeto": 124403630.29, + "close": 1212.91 + }, { + "time": 1505347200, + "high": 1037.96, + "low": 905.7, + "open": 1014.03, + "volumefrom": 65911.72, + "volumeto": 61992609.13, + "close": 940.54 + }, { + "time": 1505433600, + "high": 1116.59, + "low": 997.47, + "open": 1100.24, + "volumefrom": 50768.85, + "volumeto": 55869596.36, + "close": 1100.47 + }, { + "time": 1505520000, + "high": 1105.97, + "low": 1037.51, + "open": 1095.93, + "volumefrom": 19303.97, + "volumeto": 20544636.15, + "close": 1064.27 + }, { + "time": 1505606400, + "high": 1102.77, + "low": 970.37, + "open": 1062.05, + "volumefrom": 85355.02, + "volumeto": 90612889.23, + "close": 1061.6 + }, { + "time": 1505692800, + "high": 1169.66, + "low": 1110.04, + "open": 1160.9, + "volumefrom": 29976.82, + "volumeto": 33873806.6, + "close": 1130 + }, { + "time": 1505779200, + "high": 1145.82, + "low": 1061.04, + "open": 1084.62, + "volumefrom": 25226.53, + "volumeto": 27820826.35, + "close": 1102.84 + }, { + "time": 1505865600, + "high": 1120.47, + "low": 1076.91, + "open": 1105.95, + "volumefrom": 20513.62, + "volumeto": 22797606.45, + "close": 1111.34 + }, { + "time": 1505952000, + "high": 1057.22, + "low": 982.5, + "open": 1045.76, + "volumefrom": 35360.84, + "volumeto": 36729304.51, + "close": 1038.7 + }, { + "time": 1506038400, + "high": 1034.93, + "low": 997.18, + "open": 1028.38, + "volumefrom": 10910.4, + "volumeto": 11170067.52, + "close": 1023.8 + }, { + "time": 1506124800, + "high": 1058.29, + "low": 1025.48, + "open": 1040.11, + "volumefrom": 12011.57, + "volumeto": 12679773.64, + "close": 1055.63 + }, { + "time": 1506211200, + "high": 1084.39, + "low": 1024.81, + "open": 1031.74, + "volumefrom": 18501.94, + "volumeto": 19510110.71, + "close": 1054.49 + }, { + "time": 1506297600, + "high": 1105.56, + "low": 1067.65, + "open": 1104.88, + "volumefrom": 21618.02, + "volumeto": 23443661.79, + "close": 1084.45 + }, { + "time": 1506384000, + "high": 1101.87, + "low": 1069, + "open": 1083.06, + "volumefrom": 12457.43, + "volumeto": 13686978.34, + "close": 1098.7 + }, { + "time": 1506470400, + "high": 1220.12, + "low": 1116.48, + "open": 1138.81, + "volumefrom": 41294.16, + "volumeto": 48278241.28, + "close": 1169.13 + }, { + "time": 1506556800, + "high": 1256.65, + "low": 1151.46, + "open": 1157.74, + "volumefrom": 67835.52, + "volumeto": 83887439.1, + "close": 1236.63 + }, { + "time": 1506643200, + "high": 1246.26, + "low": 1134.07, + "open": 1236.95, + "volumefrom": 32478.4, + "volumeto": 37399527.17, + "close": 1151.52 + }, { + "time": 1506729600, + "high": 1190.5, + "low": 1154.28, + "open": 1178.82, + "volumefrom": 19749.71, + "volumeto": 22904923.67, + "close": 1159.76 + }, { + "time": 1506816000, + "high": 1171.98, + "low": 1111.88, + "open": 1160.77, + "volumefrom": 13263.57, + "volumeto": 14839282.12, + "close": 1118.8 + }, { + "time": 1506902400, + "high": 1127.75, + "low": 1041.55, + "open": 1126.31, + "volumefrom": 24687.85, + "volumeto": 26099007.51, + "close": 1057.16 + }, { + "time": 1506988800, + "high": 1082.2, + "low": 1023.53, + "open": 1041.51, + "volumefrom": 20560.68, + "volumeto": 21905348.47, + "close": 1065.4 + }, { + "time": 1507075200, + "high": 1091.69, + "low": 1050.17, + "open": 1068.44, + "volumefrom": 14926.74, + "volumeto": 15852645.68, + "close": 1062.03 + }, { + "time": 1507161600, + "high": 1074.33, + "low": 1025.91, + "open": 1062.46, + "volumefrom": 15581.32, + "volumeto": 16192107.74, + "close": 1039.2 + }, { + "time": 1507248000, + "high": 1078.15, + "low": 1008.55, + "open": 1036.72, + "volumefrom": 26588.16, + "volumeto": 28470867.61, + "close": 1070.81 + }, { + "time": 1507334400, + "high": 1131.7, + "low": 1077.73, + "open": 1084.92, + "volumefrom": 29657.58, + "volumeto": 32204572.97, + "close": 1085.88 + }, { + "time": 1507420800, + "high": 1119.22, + "low": 1019.2, + "open": 1117.98, + "volumefrom": 21405.1, + "volumeto": 21884788.29, + "close": 1022.41 + }, { + "time": 1507507200, + "high": 1089.55, + "low": 937.88, + "open": 1077.06, + "volumefrom": 31037.96, + "volumeto": 30078576.66, + "close": 969.09 + }, { + "time": 1507593600, + "high": 1039.93, + "low": 936.93, + "open": 971.35, + "volumefrom": 22724.36, + "volumeto": 23495397.53, + "close": 1033.93 + }, { + "time": 1507680000, + "high": 1051.79, + "low": 1004.97, + "open": 1043.11, + "volumefrom": 16182.53, + "volumeto": 16428989.93, + "close": 1015.23 + }, { + "time": 1507766400, + "high": 1120.9, + "low": 966.82, + "open": 1111.39, + "volumefrom": 65710.2, + "volumeto": 63529935.56, + "close": 966.82 + }, { + "time": 1507852800, + "high": 1012.42, + "low": 911.39, + "open": 988.86, + "volumefrom": 33593.78, + "volumeto": 32239614.73, + "close": 959.69 + }, { + "time": 1507939200, + "high": 990.09, + "low": 940.74, + "open": 962.9, + "volumefrom": 19191.99, + "volumeto": 18474401.49, + "close": 962.61 + }, { + "time": 1508025600, + "high": 979.24, + "low": 945.55, + "open": 954.34, + "volumefrom": 13538.76, + "volumeto": 13035524.29, + "close": 962.83 + }, { + "time": 1508112000, + "high": 1009.59, + "low": 969.36, + "open": 979.2, + "volumefrom": 22703.2, + "volumeto": 22440523.98, + "close": 988.43 + }, { + "time": 1508198400, + "high": 1017.9, + "low": 985.5, + "open": 995.1, + "volumefrom": 14661.22, + "volumeto": 14743322.83, + "close": 1005.6 + }, { + "time": 1508284800, + "high": 1036.15, + "low": 977.08, + "open": 1000.05, + "volumefrom": 22379.56, + "volumeto": 21866620.48, + "close": 977.08 + }, { + "time": 1508371200, + "high": 1035.7, + "low": 979.95, + "open": 1020.13, + "volumefrom": 17275.78, + "volumeto": 17069334.43, + "close": 988.05 + }, { + "time": 1508457600, + "high": 1041.02, + "low": 773.19, + "open": 1034.18, + "volumefrom": 31000.68, + "volumeto": 29626109.85, + "close": 955.66 + }, { + "time": 1508544000, + "high": 981.68, + "low": 875.97, + "open": 978.01, + "volumefrom": 16963.7, + "volumeto": 15821364.44, + "close": 932.66 + }, { + "time": 1508630400, + "high": 977.12, + "low": 929.66, + "open": 939.42, + "volumefrom": 14020.94, + "volumeto": 13317930.07, + "close": 949.86 + }, { + "time": 1508716800, + "high": 950.3, + "low": 905.62, + "open": 934.42, + "volumefrom": 23010.97, + "volumeto": 20976340.03, + "close": 911.58 + }, { + "time": 1508803200, + "high": 1023.55, + "low": 840.8, + "open": 854.46, + "volumefrom": 39183.99, + "volumeto": 38708688.2, + "close": 987.87 + }, { + "time": 1508889600, + "high": 1043.61, + "low": 969.75, + "open": 1022.42, + "volumefrom": 19497.02, + "volumeto": 19520806.36, + "close": 1001.22 + }, { + "time": 1508976000, + "high": 1024.16, + "low": 975.44, + "open": 1019.59, + "volumefrom": 10393.13, + "volumeto": 10297617.14, + "close": 990.81 + }, { + "time": 1509062400, + "high": 994.19, + "low": 959.09, + "open": 984.77, + "volumefrom": 12585.24, + "volumeto": 12512119.76, + "close": 994.19 + }, { + "time": 1509148800, + "high": 999.62, + "low": 970.56, + "open": 998.64, + "volumefrom": 8886.72, + "volumeto": 8674416.26, + "close": 976.11 + }, { + "time": 1509235200, + "high": 1028.35, + "low": 955.42, + "open": 1018.22, + "volumefrom": 14854.36, + "volumeto": 14192152.63, + "close": 955.42 + }, { + "time": 1509321600, + "high": 985.61, + "low": 900.49, + "open": 958.93, + "volumefrom": 21505.2, + "volumeto": 20324134.42, + "close": 945.08 + }, { + "time": 1509408000, + "high": 1058.85, + "low": 971.97, + "open": 1012.88, + "volumefrom": 35134.38, + "volumeto": 34798143.98, + "close": 990.43 + }, { + "time": 1509494400, + "high": 1145.41, + "low": 969.64, + "open": 1056.94, + "volumefrom": 177114.22, + "volumeto": 171737032.28, + "close": 969.64 + }, { + "time": 1509580800, + "high": 1024.73, + "low": 865.67, + "open": 1024.73, + "volumefrom": 49862.1, + "volumeto": 46291973.64, + "close": 928.4 + }, { + "time": 1509667200, + "high": 1038.94, + "low": 878.22, + "open": 940.54, + "volumefrom": 37985.21, + "volumeto": 38779100.89, + "close": 1020.9 + }, { + "time": 1509753600, + "high": 1069.4, + "low": 984.68, + "open": 1050.85, + "volumefrom": 23236.14, + "volumeto": 23076043, + "close": 993.11 + }, { + "time": 1509840000, + "high": 1249.2, + "low": 563.64, + "open": 1011.38, + "volumefrom": 77987.27, + "volumeto": 75225740.77, + "close": 964.59 + }, { + "time": 1509926400, + "high": 1012.37, + "low": 919.81, + "open": 933.86, + "volumefrom": 26290.15, + "volumeto": 26289624.2, + "close": 999.98 + }, { + "time": 1510012800, + "high": 1115.93, + "low": 967.74, + "open": 999.03, + "volumefrom": 42367.65, + "volumeto": 41890590.26, + "close": 988.74 + }, { + "time": 1510099200, + "high": 1191.85, + "low": 943.04, + "open": 1011.24, + "volumefrom": 64766.07, + "volumeto": 66939619.31, + "close": 1033.56 + }, { + "time": 1510185600, + "high": 1094.98, + "low": 985.36, + "open": 996.73, + "volumefrom": 43625.27, + "volumeto": 47485233.89, + "close": 1088.48 + }, { + "time": 1510272000, + "high": 1111.42, + "low": 1003.43, + "open": 1030.33, + "volumefrom": 47057.48, + "volumeto": 48538849.47, + "close": 1031.48 + }, { + "time": 1510358400, + "high": 1061.88, + "low": 967.01, + "open": 986.87, + "volumefrom": 40344.47, + "volumeto": 42751824.52, + "close": 1059.67 + }, { + "time": 1510444800, + "high": 1062.19, + "low": 948.01, + "open": 997.14, + "volumefrom": 57974.13, + "volumeto": 59593347.45, + "close": 1027.93 + }, { + "time": 1510531200, + "high": 1159.41, + "low": 1025.41, + "open": 1134.21, + "volumefrom": 22459.48, + "volumeto": 24084647.97, + "close": 1072.36 + }, { + "time": 1510617600, + "high": 1127.44, + "low": 1053.67, + "open": 1085.34, + "volumefrom": 27033.59, + "volumeto": 29820753.13, + "close": 1103.1 + }, { + "time": 1510704000, + "high": 1192.21, + "low": 1062.56, + "open": 1186.81, + "volumefrom": 27523, + "volumeto": 30068327.04, + "close": 1092.48 + }, { + "time": 1510790400, + "high": 1186.16, + "low": 1062.44, + "open": 1143.77, + "volumefrom": 32256.63, + "volumeto": 35205531.11, + "close": 1091.42 + }, { + "time": 1510876800, + "high": 1131.01, + "low": 1052.98, + "open": 1093.73, + "volumefrom": 29184.34, + "volumeto": 31438830.27, + "close": 1077.25 + }, { + "time": 1510963200, + "high": 1114.59, + "low": 1071.77, + "open": 1074.37, + "volumefrom": 16647.43, + "volumeto": 18238258.41, + "close": 1095.56 + }, { + "time": 1511049600, + "high": 1170.24, + "low": 1092.93, + "open": 1113.14, + "volumefrom": 25288.65, + "volumeto": 28005409.67, + "close": 1107.43 + }, { + "time": 1511136000, + "high": 1147.75, + "low": 1102.06, + "open": 1133.87, + "volumefrom": 23838.04, + "volumeto": 27306713.2, + "close": 1145.51 + }, { + "time": 1511222400, + "high": 1179.01, + "low": 1138.06, + "open": 1150.66, + "volumefrom": 28637.7, + "volumeto": 33725473.78, + "close": 1177.66 + }, { + "time": 1511308800, + "high": 1533.33, + "low": 1164.86, + "open": 1178.83, + "volumefrom": 164340.86, + "volumeto": 225709023.94, + "close": 1373.42 + }, { + "time": 1511395200, + "high": 2443.25, + "low": 1360.46, + "open": 1372.61, + "volumefrom": 492786.13, + "volumeto": 703462056.3, + "close": 1427.52 + }, { + "time": 1511481600, + "high": 1581.04, + "low": 1369.72, + "open": 1439.86, + "volumefrom": 106259.91, + "volumeto": 167182966.8, + "close": 1573.34 + }, { + "time": 1511568000, + "high": 1692.1, + "low": 1553.5, + "open": 1673.33, + "volumefrom": 64637.68, + "volumeto": 100663490.95, + "close": 1557.35 + }, { + "time": 1511654400, + "high": 1632.74, + "low": 1451.16, + "open": 1627.71, + "volumefrom": 44786.27, + "volumeto": 66050791, + "close": 1474.8 + }, { + "time": 1511740800, + "high": 1724.76, + "low": 1525.5, + "open": 1583.28, + "volumefrom": 67365.68, + "volumeto": 107277150.77, + "close": 1592.46 + }, { + "time": 1511827200, + "high": 1711.51, + "low": 1578.9, + "open": 1685.44, + "volumefrom": 53727.67, + "volumeto": 87753403.41, + "close": 1633.3 + }, { + "time": 1511913600, + "high": 1678.19, + "low": 1425.92, + "open": 1663.76, + "volumefrom": 110249.17, + "volumeto": 158542716.43, + "close": 1438.04 + }, { + "time": 1512000000, + "high": 1565.45, + "low": 1455.02, + "open": 1463.24, + "volumefrom": 45973.69, + "volumeto": 70403189.39, + "close": 1531.38 + }, { + "time": 1512086400, + "high": 1632.19, + "low": 1491.25, + "open": 1604.5, + "volumefrom": 62245.79, + "volumeto": 93781997.05, + "close": 1506.64 + }, { + "time": 1512172800, + "high": 1800.23, + "low": 1519.16, + "open": 1556.68, + "volumefrom": 235031.46, + "volumeto": 402785164.58, + "close": 1713.75 + }, { + "time": 1512259200, + "high": 2882.25, + "low": 1712.73, + "open": 1793.18, + "volumefrom": 512660.23, + "volumeto": 1081538780.82, + "close": 2109.66 + }, { + "time": 1512345600, + "high": 2429.86, + "low": 2088.85, + "open": 2165.61, + "volumefrom": 208879.25, + "volumeto": 463559453.15, + "close": 2219.27 + }, { + "time": 1512432000, + "high": 2312.75, + "low": 2065.48, + "open": 2282.02, + "volumefrom": 112854.51, + "volumeto": 238774186.62, + "close": 2115.77 + }, { + "time": 1512518400, + "high": 2553.63, + "low": 1865.47, + "open": 2532.73, + "volumefrom": 139173.56, + "volumeto": 262184894.48, + "close": 1883.87 + }, { + "time": 1512604800, + "high": 2394.97, + "low": 1684.8, + "open": 2373.9, + "volumefrom": 128152.36, + "volumeto": 216316057.59, + "close": 1687.96 + }, { + "time": 1512691200, + "high": 1988.77, + "low": 1496.04, + "open": 1586.25, + "volumefrom": 141273.09, + "volumeto": 258269812.21, + "close": 1828.16 + }, { + "time": 1512777600, + "high": 1923.72, + "low": 1632.08, + "open": 1696.48, + "volumefrom": 81448.05, + "volumeto": 145293547.43, + "close": 1783.88 + }, { + "time": 1512864000, + "high": 2282.85, + "low": 1717.6, + "open": 1822.1, + "volumefrom": 129745.66, + "volumeto": 226548896.93, + "close": 1746.1 + }, { + "time": 1512950400, + "high": 1947.59, + "low": 1738.52, + "open": 1838.55, + "volumefrom": 77039.33, + "volumeto": 142642941.85, + "close": 1851.56 + }, { + "time": 1513036800, + "high": 2328.14, + "low": 1774.06, + "open": 1833.43, + "volumefrom": 143754.95, + "volumeto": 284756992.71, + "close": 1980.85 + }, { + "time": 1513123200, + "high": 2260.1, + "low": 1834.99, + "open": 1943.21, + "volumefrom": 176130.13, + "volumeto": 369048983.99, + "close": 2095.32 + }, { + "time": 1513209600, + "high": 2372, + "low": 2121, + "open": 2149, + "volumefrom": 136154.5, + "volumeto": 302807608, + "close": 2224 + }, { + "time": 1513296000, + "high": 2459.61, + "low": 1994.57, + "open": 2415.17, + "volumefrom": 106684.59, + "volumeto": 239158045.94, + "close": 2241.73 + }, { + "time": 1513382400, + "high": 2866.91, + "low": 2431.67, + "open": 2445.86, + "volumefrom": 226515.33, + "volumeto": 577333212.49, + "close": 2548.76 + }, { + "time": 1513468800, + "high": 2709.65, + "low": 2512.67, + "open": 2526.74, + "volumefrom": 134343.94, + "volumeto": 355676924.59, + "close": 2647.51 + }, { + "time": 1513555200, + "high": 3392.98, + "low": 2562.97, + "open": 2574.37, + "volumefrom": 179825.19, + "volumeto": 607476465.6, + "close": 3378.15 + }, { + "time": 1513641600, + "high": 8165.46, + "low": 3062.05, + "open": 3201.82, + "volumefrom": 1326395.25, + "volumeto": 8966604321.38, + "close": 6760.13 + }, { + "time": 1513728000, + "high": 6437.83, + "low": 4961.2, + "open": 6362.37, + "volumefrom": 417215.54, + "volumeto": 2300067550.47, + "close": 5512.9 + }, { + "time": 1513814400, + "high": 5904.3, + "low": 4622.93, + "open": 4994.32, + "volumefrom": 275790.11, + "volumeto": 1387828233.64, + "close": 5032.19 + }, { + "time": 1513900800, + "high": 4791, + "low": 3187.66, + "open": 4501.74, + "volumefrom": 267829.37, + "volumeto": 996743070.22, + "close": 3721.56 + }, { + "time": 1513987200, + "high": 5360.24, + "low": 3882.53, + "open": 3998.31, + "volumefrom": 276482.65, + "volumeto": 1251830494.41, + "close": 4527.7 + }, { + "time": 1514073600, + "high": 4450.53, + "low": 4071.74, + "open": 4380.41, + "volumefrom": 100898.93, + "volumeto": 433092513.2, + "close": 4292.34 + }, { + "time": 1514160000, + "high": 4435.55, + "low": 4160.04, + "open": 4314.91, + "volumefrom": 97715.91, + "volumeto": 431333661.29, + "close": 4414.16 + }, { + "time": 1514246400, + "high": 5876.15, + "low": 4881.59, + "open": 4890.14, + "volumefrom": 379727.11, + "volumeto": 1967294008.76, + "close": 5180.81 + }, { + "time": 1514332800, + "high": 5144.62, + "low": 4686.84, + "open": 5102.32, + "volumefrom": 120303.31, + "volumeto": 587590238.83, + "close": 4884.24 + }, { + "time": 1514419200, + "high": 4773.77, + "low": 4379.64, + "open": 4686.29, + "volumefrom": 104857.71, + "volumeto": 490258028.8, + "close": 4675.46 + }, { + "time": 1514505600, + "high": 4840.4, + "low": 4403.3, + "open": 4643.35, + "volumefrom": 103795.94, + "volumeto": 488467845.48, + "close": 4706.04 + }, { + "time": 1514592000, + "high": 4392.05, + "low": 4052.85, + "open": 4388.71, + "volumefrom": 102478.82, + "volumeto": 436821094.19, + "close": 4262.55 + }, { + "time": 1514678400, + "high": 4481.37, + "low": 4209.93, + "open": 4438.74, + "volumefrom": 49855.63, + "volumeto": 219300956.79, + "close": 4398.72 + }, { + "time": 1514764800, + "high": 4725.06, + "low": 4144.21, + "open": 4256.18, + "volumefrom": 110151.26, + "volumeto": 513331307.9, + "close": 4660.24 + }, { + "time": 1514851200, + "high": 5693.17, + "low": 4541.28, + "open": 4871.65, + "volumefrom": 169671.51, + "volumeto": 803350485.26, + "close": 4734.74 + }, { + "time": 1514937600, + "high": 4798.83, + "low": 4328.72, + "open": 4679.98, + "volumefrom": 124382.65, + "volumeto": 558894780.38, + "close": 4493.35 + }, { + "time": 1515024000, + "high": 4731.06, + "low": 4316.7, + "open": 4627.69, + "volumefrom": 108289.13, + "volumeto": 473342616.14, + "close": 4371.1 + }, { + "time": 1515110400, + "high": 6373.21, + "low": 4375.2, + "open": 5077.72, + "volumefrom": 240237.38, + "volumeto": 1076643037.46, + "close": 4481.58 + }, { + "time": 1515196800, + "high": 4982.34, + "low": 4140.47, + "open": 4373.81, + "volumefrom": 106471.38, + "volumeto": 489872689.95, + "close": 4600.98 + }, { + "time": 1515283200, + "high": 4809.81, + "low": 4277.74, + "open": 4298.91, + "volumefrom": 83630.92, + "volumeto": 391064036.08, + "close": 4676.07 + }, { + "time": 1515369600, + "high": 6120.38, + "low": 4419.92, + "open": 4486.49, + "volumefrom": 310842.98, + "volumeto": 1901041063.36, + "close": 6115.76 + }, { + "time": 1515456000, + "high": 6487.38, + "low": 5424.57, + "open": 5871.09, + "volumefrom": 224599.55, + "volumeto": 1246754348.05, + "close": 5551.01 + }, { + "time": 1515542400, + "high": 7449.03, + "low": 4849.4, + "open": 5641.49, + "volumefrom": 353179.08, + "volumeto": 2176526120.94, + "close": 6162.67 + }, { + "time": 1515628800, + "high": 7643.6, + "low": 5043.55, + "open": 5632.09, + "volumefrom": 444409.01, + "volumeto": 2731715523.12, + "close": 6146.85 + }, { + "time": 1515715200, + "high": 7129.04, + "low": 6221.21, + "open": 6222.87, + "volumefrom": 97468.95, + "volumeto": 618345942.87, + "close": 6344.03 + }, { + "time": 1515801600, + "high": 6426.81, + "low": 5818.99, + "open": 6270.96, + "volumefrom": 67715.1, + "volumeto": 414251864.31, + "close": 6117.57 + }, { + "time": 1515888000, + "high": 5975.34, + "low": 5486.19, + "open": 5960.96, + "volumefrom": 62348.93, + "volumeto": 342805639.95, + "close": 5498.18 + }, { + "time": 1515974400, + "high": 6026.7, + "low": 5173.57, + "open": 5541.73, + "volumefrom": 85149.24, + "volumeto": 456027824.22, + "close": 5355.63 + }, { + "time": 1516060800, + "high": 4760.83, + "low": 3754.42, + "open": 4743.7, + "volumefrom": 154129.8, + "volumeto": 643795550.71, + "close": 4176.97 + }, { + "time": 1516147200, + "high": 4166.19, + "low": 3399.22, + "open": 4024.87, + "volumefrom": 147518.45, + "volumeto": 586456647.61, + "close": 3975.48 + }, { + "time": 1516233600, + "high": 4297.13, + "low": 3937.16, + "open": 4218.02, + "volumefrom": 114572.69, + "volumeto": 469717094.37, + "close": 4099.73 + }, { + "time": 1516320000, + "high": 5188.09, + "low": 4048.81, + "open": 4101.82, + "volumefrom": 144038.89, + "volumeto": 702940031.37, + "close": 4880.21 + }, { + "time": 1516406400, + "high": 6096.25, + "low": 5041.43, + "open": 5289.81, + "volumefrom": 163317.45, + "volumeto": 965970455.17, + "close": 5914.68 + }, { + "time": 1516492800, + "high": 6041.76, + "low": 5239.82, + "open": 5451.35, + "volumefrom": 182770.37, + "volumeto": 1011041821.95, + "close": 5531.76 + }, { + "time": 1516579200, + "high": 5355.53, + "low": 5007.01, + "open": 5222.27, + "volumefrom": 66639.91, + "volumeto": 355161398.74, + "close": 5329.56 + }, { + "time": 1516665600, + "high": 5737.78, + "low": 5004.72, + "open": 5174.55, + "volumefrom": 86480.87, + "volumeto": 466259880.99, + "close": 5391.48 + }, { + "time": 1516752000, + "high": 5734.82, + "low": 5321.7, + "open": 5513, + "volumefrom": 78843.44, + "volumeto": 423379023.15, + "close": 5369.87 + }, { + "time": 1516838400, + "high": 5386.85, + "low": 5090.3, + "open": 5242.54, + "volumefrom": 48382.83, + "volumeto": 252944467.58, + "close": 5227.98 + }, { + "time": 1516924800, + "high": 5107.63, + "low": 4617.53, + "open": 5072.11, + "volumefrom": 61505.89, + "volumeto": 300487025.59, + "close": 4885.5 + }, { + "time": 1517011200, + "high": 5004.02, + "low": 4725.87, + "open": 4916.93, + "volumefrom": 52166.88, + "volumeto": 250127669.55, + "close": 4794.76 + }, { + "time": 1517097600, + "high": 4736.06, + "low": 4511.51, + "open": 4720.71, + "volumefrom": 26566.54, + "volumeto": 122200770.69, + "close": 4599.8 + }, { + "time": 1517184000, + "high": 4619.81, + "low": 4383.98, + "open": 4522.97, + "volumefrom": 36996.56, + "volumeto": 164565508.43, + "close": 4448.13 + }, { + "time": 1517270400, + "high": 4132.17, + "low": 3841.53, + "open": 4121.15, + "volumefrom": 54341.68, + "volumeto": 213767670.53, + "close": 3933.77 + }, { + "time": 1517356800, + "high": 4021.96, + "low": 3688.63, + "open": 3814.41, + "volumefrom": 43600.51, + "volumeto": 163358902.83, + "close": 3746.72 + }, { + "time": 1517443200, + "high": 3499.05, + "low": 3199.03, + "open": 3228.06, + "volumefrom": 73551.59, + "volumeto": 254156783.73, + "close": 3455.49 + }, { + "time": 1517529600, + "high": 3711.94, + "low": 2891.07, + "open": 3682.03, + "volumefrom": 76733.79, + "volumeto": 261408235.06, + "close": 3406.69 + }, { + "time": 1517616000, + "high": 3482.25, + "low": 3159.95, + "open": 3412.52, + "volumefrom": 28537.39, + "volumeto": 98327860.24, + "close": 3445.58 + }, { + "time": 1517702400, + "high": 3317.9, + "low": 2886.3, + "open": 3287.38, + "volumefrom": 34642.35, + "volumeto": 105085836.61, + "close": 3033.45 + }, { + "time": 1517788800, + "high": 2786.18, + "low": 2484.98, + "open": 2596.62, + "volumefrom": 69839.16, + "volumeto": 182316523.96, + "close": 2610.52 + }, { + "time": 1517875200, + "high": 2762.91, + "low": 2464.61, + "open": 2685.19, + "volumefrom": 81657.82, + "volumeto": 216820293.4, + "close": 2655.23 + }, { + "time": 1517961600, + "high": 2821.72, + "low": 2629.31, + "open": 2716.85, + "volumefrom": 47951.28, + "volumeto": 131491040.99, + "close": 2742.18 + }, { + "time": 1518048000, + "high": 3027.79, + "low": 2872.22, + "open": 2909.46, + "volumefrom": 28859.32, + "volumeto": 85366445.75, + "close": 2958.02 + }, { + "time": 1518134400, + "high": 3133.19, + "low": 2948.41, + "open": 2988.41, + "volumefrom": 38143.87, + "volumeto": 118513004.09, + "close": 3107 + }, { + "time": 1518220800, + "high": 3192.37, + "low": 3017.36, + "open": 3162.8, + "volumefrom": 28362.44, + "volumeto": 87037237.75, + "close": 3068.75 + }, { + "time": 1518307200, + "high": 3100.17, + "low": 2797.54, + "open": 2990.03, + "volumefrom": 31769.61, + "volumeto": 90057948.86, + "close": 2834.72 + }, { + "time": 1518393600, + "high": 3332.52, + "low": 2949.71, + "open": 2991.92, + "volumefrom": 62847.08, + "volumeto": 188095654.2, + "close": 2992.91 + }, { + "time": 1518480000, + "high": 2931.34, + "low": 2761.66, + "open": 2931.34, + "volumefrom": 43776.13, + "volumeto": 122554778.03, + "close": 2799.58 + }, { + "time": 1518566400, + "high": 2955.07, + "low": 2783.16, + "open": 2937.22, + "volumefrom": 49951.87, + "volumeto": 141878296.36, + "close": 2840.3 + }, { + "time": 1518652800, + "high": 3087.5, + "low": 2862.54, + "open": 3051.29, + "volumefrom": 40776.66, + "volumeto": 119163672.35, + "close": 2922.35 + }, { + "time": 1518739200, + "high": 2970.3, + "low": 2807.86, + "open": 2944.88, + "volumefrom": 31269.61, + "volumeto": 90910449.85, + "close": 2907.31 + }, { + "time": 1518825600, + "high": 3173.58, + "low": 2941.08, + "open": 3153.21, + "volumefrom": 32704.82, + "volumeto": 96344148.09, + "close": 2945.87 + }, { + "time": 1518912000, + "high": 3047.91, + "low": 2844.79, + "open": 2844.79, + "volumefrom": 56171.96, + "volumeto": 162203275.14, + "close": 2887.62 + }, { + "time": 1518998400, + "high": 3024, + "low": 2857.2, + "open": 2994, + "volumefrom": 23397.48, + "volumeto": 67412819.38, + "close": 2881.2 + }, { + "time": 1519084800, + "high": 2983.86, + "low": 2639.78, + "open": 2961.05, + "volumefrom": 46591.29, + "volumeto": 127185369.35, + "close": 2729.81 + }, { + "time": 1519171200, + "high": 2599.53, + "low": 2467.29, + "open": 2563.57, + "volumefrom": 28145.98, + "volumeto": 71370605.87, + "close": 2535.73 + }, { + "time": 1519257600, + "high": 2547.63, + "low": 2363.88, + "open": 2412.44, + "volumefrom": 31299.99, + "volumeto": 75802941.78, + "close": 2421.82 + }, { + "time": 1519344000, + "high": 2546.04, + "low": 2427.99, + "open": 2490.98, + "volumefrom": 24435, + "volumeto": 59965689.15, + "close": 2454.09 + }, { + "time": 1519430400, + "high": 2907.8, + "low": 2314.45, + "open": 2338.79, + "volumefrom": 36589.42, + "volumeto": 87514574.76, + "close": 2391.8 + }, { + "time": 1519516800, + "high": 2436.31, + "low": 2332.92, + "open": 2344.58, + "volumefrom": 17239.77, + "volumeto": 41964875.74, + "close": 2434.19 + }, { + "time": 1519603200, + "high": 2561.71, + "low": 2408.04, + "open": 2528.66, + "volumefrom": 63669.41, + "volumeto": 157597070.41, + "close": 2475.24 + }, { + "time": 1519689600, + "high": 2763.73, + "low": 2527.72, + "open": 2537.32, + "volumefrom": 39811.16, + "volumeto": 101665361.18, + "close": 2553.69 + }, { + "time": 1519776000, + "high": 2524.18, + "low": 2315.2, + "open": 2481.94, + "volumefrom": 27921.62, + "volumeto": 67860146.82, + "close": 2430.38 + }, { + "time": 1519862400, + "high": 2527.1, + "low": 2375.47, + "open": 2516.31, + "volumefrom": 40440.66, + "volumeto": 98660651.76, + "close": 2439.64 + }, { + "time": 1519948800, + "high": 2493.2, + "low": 2343.13, + "open": 2470.2, + "volumefrom": 23034.92, + "volumeto": 54066412.48, + "close": 2347.15 + }, { + "time": 1520035200, + "high": 2615.65, + "low": 2423.71, + "open": 2432.65, + "volumefrom": 27347.75, + "volumeto": 67293787.99, + "close": 2460.67 + }, { + "time": 1520121600, + "high": 2502.36, + "low": 2385.87, + "open": 2465.92, + "volumefrom": 21827.17, + "volumeto": 52572266.85, + "close": 2408.57 + }, { + "time": 1520208000, + "high": 2429, + "low": 2377.84, + "open": 2398.66, + "volumefrom": 21516.31, + "volumeto": 51546408.7, + "close": 2395.69 + }, { + "time": 1520294400, + "high": 2331.9, + "low": 2255.84, + "open": 2268.8, + "volumefrom": 11515.56, + "volumeto": 26126502.53, + "close": 2268.8 + }, { + "time": 1520380800, + "high": 2184.76, + "low": 2109.2, + "open": 2177.75, + "volumefrom": 23569.44, + "volumeto": 50145162.07, + "close": 2127.55 + }, { + "time": 1520467200, + "high": 2179.26, + "low": 2039.95, + "open": 2056.65, + "volumefrom": 29827.98, + "volumeto": 64209201.15, + "close": 2152.65 + }, { + "time": 1520553600, + "high": 2150.62, + "low": 2028.81, + "open": 2138.69, + "volumefrom": 44948.91, + "volumeto": 92008171.32, + "close": 2046.95 + }, { + "time": 1520640000, + "high": 1967.15, + "low": 1835.55, + "open": 1931.93, + "volumefrom": 17799.89, + "volumeto": 32768351.5, + "close": 1840.93 + }, { + "time": 1520726400, + "high": 2184.8, + "low": 1969.76, + "open": 1993.07, + "volumefrom": 36136.7, + "volumeto": 72367355.42, + "close": 2002.6 + }, { + "time": 1520812800, + "high": 1961.68, + "low": 1904.8, + "open": 1920.04, + "volumefrom": 19231.71, + "volumeto": 37179511.04, + "close": 1933.24 + }, { + "time": 1520899200, + "high": 2156, + "low": 1922.78, + "open": 1938.56, + "volumefrom": 40013.71, + "volumeto": 85087553.77, + "close": 2126.46 + }, { + "time": 1520985600, + "high": 1999.64, + "low": 1771.29, + "open": 1962.05, + "volumefrom": 75053.93, + "volumeto": 133859434.69, + "close": 1783.51 + }, { + "time": 1521072000, + "high": 1879.71, + "low": 1744.17, + "open": 1753.85, + "volumefrom": 44057.24, + "volumeto": 78590185.86, + "close": 1783.82 + }, { + "time": 1521158400, + "high": 1960.89, + "low": 1781.03, + "open": 1793.55, + "volumefrom": 35791.79, + "volumeto": 65753813.24, + "close": 1837.12 + }, { + "time": 1521244800, + "high": 1769.34, + "low": 1681.12, + "open": 1747.29, + "volumefrom": 25986.72, + "volumeto": 44386097.36, + "close": 1708.03 + }, { + "time": 1521331200, + "high": 1770.81, + "low": 1551.88, + "open": 1744.23, + "volumefrom": 44486.94, + "volumeto": 72425183.19, + "close": 1628.01 + }, { + "time": 1521417600, + "high": 2173.37, + "low": 1684.42, + "open": 1690.97, + "volumefrom": 82094.57, + "volumeto": 149036945.22, + "close": 1815.43 + }, { + "time": 1521504000, + "high": 1956.7, + "low": 1871.31, + "open": 1882.47, + "volumefrom": 27103.29, + "volumeto": 52257040.35, + "close": 1928.07 + }, { + "time": 1521590400, + "high": 1977.24, + "low": 1926.13, + "open": 1934.41, + "volumefrom": 15118.73, + "volumeto": 29834545.85, + "close": 1973.35 + }, { + "time": 1521676800, + "high": 1961.41, + "low": 1925.3, + "open": 1938.78, + "volumefrom": 21452.16, + "volumeto": 41632421.43, + "close": 1940.71 + }, { + "time": 1521763200, + "high": 1980.35, + "low": 1900.24, + "open": 1956.08, + "volumefrom": 16799.05, + "volumeto": 32550343.25, + "close": 1937.63 + }, { + "time": 1521849600, + "high": 1934.19, + "low": 1868.97, + "open": 1872.72, + "volumefrom": 12174, + "volumeto": 22986946.8, + "close": 1888.2 + }, { + "time": 1521936000, + "high": 1898.14, + "low": 1848.6, + "open": 1862.95, + "volumefrom": 12793.71, + "volumeto": 23828156.94, + "close": 1862.49 + }, { + "time": 1522022400, + "high": 2025.95, + "low": 1819.11, + "open": 1836.91, + "volumefrom": 25840.12, + "volumeto": 49695977.19, + "close": 1923.21 + }, { + "time": 1522108800, + "high": 1910.37, + "low": 1775.72, + "open": 1884.59, + "volumefrom": 19405.66, + "volumeto": 36011277.32, + "close": 1855.71 + }, { + "time": 1522195200, + "high": 1927.49, + "low": 1875.1, + "open": 1885.94, + "volumefrom": 15096.07, + "volumeto": 28333964.74, + "close": 1876.91 + }, { + "time": 1522281600, + "high": 1712.03, + "low": 1509.15, + "open": 1696.51, + "volumefrom": 52914.26, + "volumeto": 81431871.28, + "close": 1538.94 + }, { + "time": 1522368000, + "high": 1530.42, + "low": 1461.62, + "open": 1473.74, + "volumefrom": 35624.86, + "volumeto": 52404169.06, + "close": 1471 + }, { + "time": 1522454400, + "high": 1499.48, + "low": 1453.84, + "open": 1467.88, + "volumefrom": 14910.12, + "volumeto": 21973491.15, + "close": 1473.73 + }, { + "time": 1522540800, + "high": 1429.1, + "low": 1345.13, + "open": 1429.1, + "volumefrom": 38052.33, + "volumeto": 51415547.25, + "close": 1351.18 + }, { + "time": 1522627200, + "high": 1460.25, + "low": 1356.5, + "open": 1377.71, + "volumefrom": 26142.69, + "volumeto": 36501208.06, + "close": 1396.23 + }, { + "time": 1522713600, + "high": 1558.11, + "low": 1417.47, + "open": 1442.17, + "volumefrom": 78714.1, + "volumeto": 114648660.93, + "close": 1456.52 + }, { + "time": 1522800000, + "high": 1377.74, + "low": 1256.8, + "open": 1343.92, + "volumefrom": 53834.26, + "volumeto": 69380517.6, + "close": 1288.78 + }, { + "time": 1522886400, + "high": 1517.94, + "low": 1294.49, + "open": 1308.29, + "volumefrom": 149784.01, + "volumeto": 219484501.21, + "close": 1465.34 + }, { + "time": 1522972800, + "high": 1446.32, + "low": 1323.5, + "open": 1440.09, + "volumefrom": 34289.31, + "volumeto": 45759084.2, + "close": 1334.5 + }, { + "time": 1523059200, + "high": 1366.65, + "low": 1316.05, + "open": 1364.4, + "volumefrom": 60281.16, + "volumeto": 79988276.83, + "close": 1326.92 + }, { + "time": 1523145600, + "high": 1347.51, + "low": 1315.25, + "open": 1328, + "volumefrom": 14855.73, + "volumeto": 19956890.57, + "close": 1343.38 + }, { + "time": 1523232000, + "high": 1363.73, + "low": 1324.61, + "open": 1334.3, + "volumefrom": 33225.37, + "volumeto": 44320317.8, + "close": 1333.93 + }, { + "time": 1523318400, + "high": 1465.93, + "low": 1427.01, + "open": 1448.68, + "volumefrom": 23784.83, + "volumeto": 34494663.25, + "close": 1450.28 + }, { + "time": 1523404800, + "high": 1515.05, + "low": 1482.42, + "open": 1493.16, + "volumefrom": 40825.02, + "volumeto": 61312648.04, + "close": 1501.84 + }, { + "time": 1523491200, + "high": 1667.85, + "low": 1529.28, + "open": 1641.67, + "volumefrom": 53839.74, + "volumeto": 86005754.27, + "close": 1597.44 + }, { + "time": 1523577600, + "high": 1747.98, + "low": 1566.71, + "open": 1609.98, + "volumefrom": 83874.44, + "volumeto": 141797289.52, + "close": 1690.59 + }, { + "time": 1523664000, + "high": 1701.8, + "low": 1649.03, + "open": 1688.6, + "volumefrom": 28814.26, + "volumeto": 47554766.56, + "close": 1650.39 + }, { + "time": 1523750400, + "high": 1775.72, + "low": 1669.41, + "open": 1729.48, + "volumefrom": 49740.3, + "volumeto": 87067908.14, + "close": 1750.45 + }, { + "time": 1523836800, + "high": 1722.21, + "low": 1632.35, + "open": 1709.17, + "volumefrom": 36583.12, + "volumeto": 60959916.18, + "close": 1666.34 + }, { + "time": 1523923200, + "high": 1701.72, + "low": 1632.53, + "open": 1639.86, + "volumefrom": 48483.72, + "volumeto": 81328046.44, + "close": 1677.43 + }, { + "time": 1524009600, + "high": 1847.33, + "low": 1674.72, + "open": 1680.68, + "volumefrom": 78188.23, + "volumeto": 143469928.87, + "close": 1834.93 + }, { + "time": 1524096000, + "high": 2685.56, + "low": 1858.09, + "open": 1858.09, + "volumefrom": 214252.1, + "volumeto": 456764051.99, + "close": 2131.9 + }, { + "time": 1524182400, + "high": 2335.76, + "low": 2168.24, + "open": 2293.26, + "volumefrom": 56667.6, + "volumeto": 126977924.7, + "close": 2240.75 + }, { + "time": 1524268800, + "high": 2301.24, + "low": 2118.8, + "open": 2239.76, + "volumefrom": 32872.06, + "volumeto": 70963874.41, + "close": 2158.79 + }, { + "time": 1524355200, + "high": 2319.64, + "low": 2143.79, + "open": 2164.33, + "volumefrom": 20959.24, + "volumeto": 47914289.79, + "close": 2286.07 + }, { + "time": 1524441600, + "high": 2421.79, + "low": 2299.88, + "open": 2327.43, + "volumefrom": 44167.1, + "volumeto": 106693138.46, + "close": 2415.67 + }, { + "time": 1524528000, + "high": 2735.24, + "low": 2570.66, + "open": 2624.41, + "volumefrom": 37922.21, + "volumeto": 98409651.84, + "close": 2595.04 + }, { + "time": 1524614400, + "high": 2420.22, + "low": 2129.27, + "open": 2411.46, + "volumefrom": 63531.78, + "volumeto": 148362589.25, + "close": 2335.25 + }, { + "time": 1524700800, + "high": 2547.01, + "low": 2377.07, + "open": 2439.99, + "volumefrom": 44970.08, + "volumeto": 112120752.56, + "close": 2493.23 + }, { + "time": 1524787200, + "high": 2435.31, + "low": 2296.05, + "open": 2400.11, + "volumefrom": 67231.31, + "volumeto": 155863018.29, + "close": 2318.31 + }, { + "time": 1524873600, + "high": 2429.67, + "low": 2356.26, + "open": 2400.73, + "volumefrom": 56169.58, + "volumeto": 134185756.45, + "close": 2388.94 + }, { + "time": 1524960000, + "high": 2405.72, + "low": 2290.91, + "open": 2391.77, + "volumefrom": 44497.11, + "volumeto": 103251539.02, + "close": 2320.41 + }, { + "time": 1525046400, + "high": 2380.49, + "low": 2285.29, + "open": 2326.17, + "volumefrom": 78971.37, + "volumeto": 186588814.75, + "close": 2362.74 + }, { + "time": 1525132800, + "high": 2378.53, + "low": 2256.49, + "open": 2341.76, + "volumefrom": 51773.58, + "volumeto": 118564604.61, + "close": 2290.06 + }, { + "time": 1525219200, + "high": 2346.03, + "low": 2265.36, + "open": 2305.16, + "volumefrom": 98883.39, + "volumeto": 226878050.02, + "close": 2294.4 + }, { + "time": 1525305600, + "high": 2968.78, + "low": 2385.57, + "open": 2392.3, + "volumefrom": 176608.75, + "volumeto": 448547371.08, + "close": 2539.78 + }, { + "time": 1525392000, + "high": 2666.39, + "low": 2456.27, + "open": 2557.65, + "volumefrom": 129635.23, + "volumeto": 326348913.41, + "close": 2517.44 + }, { + "time": 1525478400, + "high": 2588.83, + "low": 2501.3, + "open": 2531.62, + "volumefrom": 52046.55, + "volumeto": 133787218.17, + "close": 2570.53 + }, { + "time": 1525564800, + "high": 2554.58, + "low": 2470.14, + "open": 2546.08, + "volumefrom": 47557.82, + "volumeto": 120169575.15, + "close": 2526.81 + }, { + "time": 1525651200, + "high": 2509.31, + "low": 2449.04, + "open": 2487.55, + "volumefrom": 32039.47, + "volumeto": 79038168.54, + "close": 2466.9 + }, { + "time": 1525737600, + "high": 2889.13, + "low": 2446.91, + "open": 2451.91, + "volumefrom": 105181.96, + "volumeto": 284742291.19, + "close": 2707.14 + }, { + "time": 1525824000, + "high": 3344.43, + "low": 2670.05, + "open": 2735.08, + "volumefrom": 357901.66, + "volumeto": 1075394275.84, + "close": 3004.72 + }, { + "time": 1525910400, + "high": 2962.13, + "low": 2669.54, + "open": 2944.02, + "volumefrom": 156336.62, + "volumeto": 420608042.45, + "close": 2690.4 + }, { + "time": 1525996800, + "high": 6111.73, + "low": 2533.27, + "open": 2553.59, + "volumefrom": 910016.99, + "volumeto": 3109000244.98, + "close": 3416.42 + }, { + "time": 1526083200, + "high": 3511.17, + "low": 2920.12, + "open": 3441.88, + "volumefrom": 271633.69, + "volumeto": 858647675.77, + "close": 3161.05 + }, { + "time": 1526169600, + "high": 3373.77, + "low": 3084.99, + "open": 3208.6, + "volumefrom": 111974.87, + "volumeto": 352958227.22, + "close": 3152.12 + }, { + "time": 1526256000, + "high": 3554.05, + "low": 2984.51, + "open": 3065.35, + "volumefrom": 187055.46, + "volumeto": 590743589.34, + "close": 3158.12 + }, { + "time": 1526342400, + "high": 3478.34, + "low": 3076.88, + "open": 3077.39, + "volumefrom": 172739.22, + "volumeto": 547025379.72, + "close": 3166.77 + }, { + "time": 1526428800, + "high": 3133.67, + "low": 2910.41, + "open": 3125.2, + "volumefrom": 83497.95, + "volumeto": 249379152.37, + "close": 2986.65 + }, { + "time": 1526515200, + "high": 3656.94, + "low": 2866.66, + "open": 2907.41, + "volumefrom": 231297.06, + "volumeto": 778962238.67, + "close": 3367.8 + }, { + "time": 1526601600, + "high": 3585.15, + "low": 3130.32, + "open": 3439.49, + "volumefrom": 176610.58, + "volumeto": 588199770.58, + "close": 3330.49 + }, { + "time": 1526688000, + "high": 3315.91, + "low": 3133.91, + "open": 3315.41, + "volumefrom": 46015.6, + "volumeto": 147204364.56, + "close": 3199.01 + }, { + "time": 1526774400, + "high": 3367.03, + "low": 3216.07, + "open": 3307.87, + "volumefrom": 34742.53, + "volumeto": 112638061.66, + "close": 3242.08 + }, { + "time": 1526860800, + "high": 3192.38, + "low": 3021.27, + "open": 3189.87, + "volumefrom": 40740.57, + "volumeto": 124417219.32, + "close": 3053.89 + }, { + "time": 1526947200, + "high": 2982.43, + "low": 2690.12, + "open": 2911.63, + "volumefrom": 59555.53, + "volumeto": 160382446.73, + "close": 2692.99 + }, { + "time": 1527033600, + "high": 2613.29, + "low": 2394.14, + "open": 2582.12, + "volumefrom": 62920.09, + "volumeto": 160534317.63, + "close": 2551.4 + }, { + "time": 1527120000, + "high": 2581.81, + "low": 2411.07, + "open": 2561.1, + "volumefrom": 55801.57, + "volumeto": 142142781.25, + "close": 2547.29 + }, { + "time": 1527206400, + "high": 2557.87, + "low": 2429.07, + "open": 2555.1, + "volumefrom": 51495.81, + "volumeto": 125871723.34, + "close": 2444.31 + }, { + "time": 1527292800, + "high": 2447.65, + "low": 2394.72, + "open": 2415.71, + "volumefrom": 34401.02, + "volumeto": 83008629.23, + "close": 2412.97 + }, { + "time": 1527379200, + "high": 2435.84, + "low": 2361.04, + "open": 2411.21, + "volumefrom": 57190.22, + "volumeto": 135758716.14, + "close": 2373.81 + }, { + "time": 1527465600, + "high": 2329.58, + "low": 2054.91, + "open": 2317.11, + "volumefrom": 73202.85, + "volumeto": 151305166.75, + "close": 2066.93 + }, { + "time": 1527552000, + "high": 2375.37, + "low": 2139.79, + "open": 2161.67, + "volumefrom": 112856.36, + "volumeto": 265817356.09, + "close": 2355.36 + }, { + "time": 1527638400, + "high": 2572.28, + "low": 2212.56, + "open": 2322.82, + "volumefrom": 272736.7, + "volumeto": 616725862.88, + "close": 2261.25 + }, { + "time": 1527724800, + "high": 2382.84, + "low": 2239.43, + "open": 2276.09, + "volumefrom": 85637.32, + "volumeto": 203861353.01, + "close": 2380.52 + }, { + "time": 1527811200, + "high": 2457.83, + "low": 2344.21, + "open": 2378.53, + "volumefrom": 86120.34, + "volumeto": 210630543.96, + "close": 2445.77 + }, { + "time": 1527897600, + "high": 2515.72, + "low": 2412.3, + "open": 2467.99, + "volumefrom": 64035.02, + "volumeto": 159686050.42, + "close": 2493.73 + }, { + "time": 1527984000, + "high": 2553.77, + "low": 2475.77, + "open": 2514.06, + "volumefrom": 53124.9, + "volumeto": 132027595.23, + "close": 2485.23 + }, { + "time": 1528070400, + "high": 2432.27, + "low": 2296.19, + "open": 2424.89, + "volumefrom": 53282.3, + "volumeto": 123378895.41, + "close": 2315.57 + }, { + "time": 1528156800, + "high": 2371.2, + "low": 2281.73, + "open": 2327.62, + "volumefrom": 36902.11, + "volumeto": 86047971.08, + "close": 2331.79 + }, { + "time": 1528243200, + "high": 2338.58, + "low": 2281.82, + "open": 2316.43, + "volumefrom": 63964.85, + "volumeto": 147491430.43, + "close": 2305.82 + }, { + "time": 1528329600, + "high": 2408.74, + "low": 2292.58, + "open": 2293.95, + "volumefrom": 78815.48, + "volumeto": 184200446.46, + "close": 2337.11 + }, { + "time": 1528416000, + "high": 2385.77, + "low": 2321.72, + "open": 2379.69, + "volumefrom": 44837.48, + "volumeto": 105525457.55, + "close": 2353.51 + }, { + "time": 1528502400, + "high": 2351.3, + "low": 2269.57, + "open": 2324.52, + "volumefrom": 43532.59, + "volumeto": 99946038.06, + "close": 2295.89 + }, { + "time": 1528588800, + "high": 2118.97, + "low": 2045.77, + "open": 2103.74, + "volumefrom": 34560.48, + "volumeto": 70863499.4, + "close": 2050.42 + }, { + "time": 1528675200, + "high": 2126.66, + "low": 2077.49, + "open": 2108.38, + "volumefrom": 32514.94, + "volumeto": 68851035.75, + "close": 2117.52 + }, { + "time": 1528761600, + "high": 2077.33, + "low": 1951.2, + "open": 2019.25, + "volumefrom": 83508.01, + "volumeto": 163079452.41, + "close": 1952.86 + }, { + "time": 1528848000, + "high": 1952.72, + "low": 1844.23, + "open": 1885.47, + "volumefrom": 73938.4, + "volumeto": 143492992.26, + "close": 1940.71 + }, { + "time": 1528934400, + "high": 2215.1, + "low": 2031.78, + "open": 2043.15, + "volumefrom": 91007.83, + "volumeto": 199213409.64, + "close": 2188.97 + }, { + "time": 1529020800, + "high": 2114.7, + "low": 2019.2, + "open": 2110.64, + "volumefrom": 49668.26, + "volumeto": 102974720.05, + "close": 2073.25 + }, { + "time": 1529107200, + "high": 2137.51, + "low": 2078.78, + "open": 2110.21, + "volumefrom": 34969.7, + "volumeto": 74184022.19, + "close": 2121.38 + }, { + "time": 1529193600, + "high": 2143.92, + "low": 2067.75, + "open": 2100.51, + "volumefrom": 51421.39, + "volumeto": 110075198.5, + "close": 2140.65 + }, { + "time": 1529280000, + "high": 2208.82, + "low": 2145.94, + "open": 2205.86, + "volumefrom": 53282.36, + "volumeto": 115352579.63, + "close": 2164.93 + }, { + "time": 1529366400, + "high": 2333.72, + "low": 2163.47, + "open": 2183.04, + "volumefrom": 48318.1, + "volumeto": 111382884.12, + "close": 2305.2 + }, { + "time": 1529452800, + "high": 2310.32, + "low": 2191.98, + "open": 2297.17, + "volumefrom": 45337.73, + "volumeto": 102840933.09, + "close": 2268.33 + }, { + "time": 1529539200, + "high": 2301.95, + "low": 2236.55, + "open": 2285.7, + "volumefrom": 20182.87, + "volumeto": 45260893.29, + "close": 2242.54 + }, { + "time": 1529625600, + "high": 2067, + "low": 1911.23, + "open": 2043.25, + "volumefrom": 68908.86, + "volumeto": 135457591.54, + "close": 1965.75 + }, { + "time": 1529712000, + "high": 2041.99, + "low": 1983.07, + "open": 2023.15, + "volumefrom": 18218.47, + "volumeto": 36186982.59, + "close": 1986.28 + }, { + "time": 1529798400, + "high": 2013.99, + "low": 1945.61, + "open": 1993.48, + "volumefrom": 50336.09, + "volumeto": 101133761.95, + "close": 2009.17 + }, { + "time": 1529884800, + "high": 2085.62, + "low": 1967.65, + "open": 2011.13, + "volumefrom": 42088.74, + "volumeto": 87272685.94, + "close": 2073.54 + }, { + "time": 1529971200, + "high": 2019.06, + "low": 1920.48, + "open": 2006.98, + "volumefrom": 54989.6, + "volumeto": 106356485.15, + "close": 1934.12 + }, { + "time": 1530057600, + "high": 1944.73, + "low": 1886.39, + "open": 1943.55, + "volumefrom": 37019.79, + "volumeto": 70964346.04, + "close": 1916.93 + }, { + "time": 1530144000, + "high": 2162.72, + "low": 1813.19, + "open": 1822.86, + "volumefrom": 120675.7, + "volumeto": 232643441.49, + "close": 1927.84 + }, { + "time": 1530230400, + "high": 2226.84, + "low": 1982.33, + "open": 2030.13, + "volumefrom": 93497.81, + "volumeto": 193916327.9, + "close": 2074.02 + }, { + "time": 1530316800, + "high": 2242.88, + "low": 2104.77, + "open": 2118.78, + "volumefrom": 58933.4, + "volumeto": 129821440.19, + "close": 2202.85 + }, { + "time": 1530403200, + "high": 2226.81, + "low": 2123.64, + "open": 2166.16, + "volumefrom": 44324.5, + "volumeto": 95682411.66, + "close": 2158.68 + }, { + "time": 1530489600, + "high": 2333.82, + "low": 2205.82, + "open": 2263.63, + "volumefrom": 60763.46, + "volumeto": 140105347.9, + "close": 2305.75 + }, { + "time": 1530576000, + "high": 2334.46, + "low": 2214.36, + "open": 2273.4, + "volumefrom": 54809.62, + "volumeto": 122104871.44, + "close": 2227.8 + }, { + "time": 1530662400, + "high": 2282.15, + "low": 2199.57, + "open": 2255.31, + "volumefrom": 41590.55, + "volumeto": 92820541.77, + "close": 2231.77 + }, { + "time": 1530748800, + "high": 2289.86, + "low": 2213.36, + "open": 2222.82, + "volumefrom": 41097.93, + "volumeto": 93364633.46, + "close": 2271.76 + }, { + "time": 1530835200, + "high": 2473.83, + "low": 2280.01, + "open": 2305.43, + "volumefrom": 122327.72, + "volumeto": 280030170.07, + "close": 2289.18 + }, { + "time": 1530921600, + "high": 2367.98, + "low": 2086.3, + "open": 2329.8, + "volumefrom": 201930.75, + "volumeto": 449728050.55, + "close": 2227.14 + }, { + "time": 1531008000, + "high": 2263.93, + "low": 2086.63, + "open": 2216.65, + "volumefrom": 162910.4, + "volumeto": 349698577.33, + "close": 2146.57 + }, { + "time": 1531094400, + "high": 2165.44, + "low": 2075.97, + "open": 2105.8, + "volumefrom": 92642.66, + "volumeto": 197005542.92, + "close": 2126.51 + }, { + "time": 1531180800, + "high": 2048.29, + "low": 1927.57, + "open": 2032.06, + "volumefrom": 73394.5, + "volumeto": 141676339.13, + "close": 1930.34 + }, { + "time": 1531267200, + "high": 2020.83, + "low": 1899.37, + "open": 1958.7, + "volumefrom": 54023.33, + "volumeto": 108327581.32, + "close": 2005.2 + }, { + "time": 1531353600, + "high": 2021.24, + "low": 1606.45, + "open": 1966.59, + "volumefrom": 58907.32, + "volumeto": 112164249.87, + "close": 1904.08 + }, { + "time": 1531440000, + "high": 1919.11, + "low": 1731.7, + "open": 1894.85, + "volumefrom": 208752.15, + "volumeto": 367948627.11, + "close": 1762.61 + }, { + "time": 1531526400, + "high": 1793.78, + "low": 1743.36, + "open": 1775.27, + "volumefrom": 48494.97, + "volumeto": 86339959.64, + "close": 1780.39 + }, { + "time": 1531612800, + "high": 1812.97, + "low": 1721.5, + "open": 1797.46, + "volumefrom": 80862.23, + "volumeto": 145571420.94, + "close": 1800.24 + }, { + "time": 1531699200, + "high": 1929.06, + "low": 1853.28, + "open": 1884.93, + "volumefrom": 48359.67, + "volumeto": 90107605.92, + "close": 1863.28 + }, { + "time": 1531785600, + "high": 2043.6, + "low": 1894.76, + "open": 2018.79, + "volumefrom": 86805.56, + "volumeto": 169408862.84, + "close": 1951.59 + }, { + "time": 1531872000, + "high": 1972.26, + "low": 1861.97, + "open": 1940.43, + "volumefrom": 94052.38, + "volumeto": 178917723.52, + "close": 1902.32 + }, { + "time": 1531958400, + "high": 1946.22, + "low": 1821.91, + "open": 1932.1, + "volumefrom": 96988.82, + "volumeto": 180414723.41, + "close": 1860.16 + }, { + "time": 1532044800, + "high": 1856.05, + "low": 1720.58, + "open": 1841.19, + "volumefrom": 50031.33, + "volumeto": 86825871.02, + "close": 1735.43 + }, { + "time": 1532131200, + "high": 1847.3, + "low": 1744.02, + "open": 1754.48, + "volumefrom": 38868.82, + "volumeto": 70971355.81, + "close": 1825.92 + }, { + "time": 1532217600, + "high": 2650.14, + "low": 1793.33, + "open": 1816.42, + "volumefrom": 594431.74, + "volumeto": 1301020860.7, + "close": 2188.68 + }, { + "time": 1532304000, + "high": 2429.08, + "low": 1938.1, + "open": 2268.55, + "volumefrom": 432671.02, + "volumeto": 843029195.5, + "close": 1948.43 + }, { + "time": 1532390400, + "high": 2144.18, + "low": 1715.45, + "open": 2128.8, + "volumefrom": 608561.21, + "volumeto": 1129471348.92, + "close": 1855.97 + }, { + "time": 1532476800, + "high": 1908.05, + "low": 1762.31, + "open": 1806.73, + "volumefrom": 312381.72, + "volumeto": 573589066.63, + "close": 1836.18 + }, { + "time": 1532563200, + "high": 1911.48, + "low": 1797.34, + "open": 1805.7, + "volumefrom": 175201.16, + "volumeto": 324377939.69, + "close": 1851.46 + }, { + "time": 1532649600, + "high": 1948.05, + "low": 1866.74, + "open": 1900.58, + "volumefrom": 134383.99, + "volumeto": 253710253.92, + "close": 1887.95 + }, { + "time": 1532736000, + "high": 1906.25, + "low": 1859.95, + "open": 1902.18, + "volumefrom": 75653.22, + "volumeto": 141519182.93, + "close": 1870.63 + }, { + "time": 1532822400, + "high": 1974.41, + "low": 1859.79, + "open": 1872.53, + "volumefrom": 75202.31, + "volumeto": 142235393.06, + "close": 1891.37 + }, { + "time": 1532908800, + "high": 2031.12, + "low": 1861.02, + "open": 1877.73, + "volumefrom": 149100.65, + "volumeto": 287744871.42, + "close": 1929.87 + }, { + "time": 1532995200, + "high": 1948.43, + "low": 1801.81, + "open": 1856.86, + "volumefrom": 121176.79, + "volumeto": 228135907.23, + "close": 1882.67 + }, { + "time": 1533081600, + "high": 1979.37, + "low": 1803.4, + "open": 1858.21, + "volumefrom": 120052.07, + "volumeto": 229026935.5, + "close": 1907.73 + }, { + "time": 1533168000, + "high": 1956.01, + "low": 1846.81, + "open": 1900.46, + "volumefrom": 151019.09, + "volumeto": 280350328.49, + "close": 1856.39 + }, { + "time": 1533254400, + "high": 1928.67, + "low": 1776.02, + "open": 1831.79, + "volumefrom": 106502.28, + "volumeto": 199870698.83, + "close": 1876.68 + }, { + "time": 1533340800, + "high": 1802.4, + "low": 1737.34, + "open": 1769.43, + "volumefrom": 55470.98, + "volumeto": 99461685.98, + "close": 1793.04 + }, { + "time": 1533427200, + "high": 1844.8, + "low": 1785.82, + "open": 1797.89, + "volumefrom": 69222.52, + "volumeto": 125660332.78, + "close": 1815.31 + }, { + "time": 1533513600, + "high": 1805.86, + "low": 1767.39, + "open": 1796.57, + "volumefrom": 65392.91, + "volumeto": 115776839.3, + "close": 1770.48 + }, { + "time": 1533600000, + "high": 1734.71, + "low": 1704.51, + "open": 1727.38, + "volumefrom": 62410.11, + "volumeto": 106863583.15, + "close": 1712.28 + }, { + "time": 1533686400, + "high": 1659.21, + "low": 1477.25, + "open": 1648.82, + "volumefrom": 79190.59, + "volumeto": 116984299.08, + "close": 1477.25 + }, { + "time": 1533772800, + "high": 1807.32, + "low": 1552.17, + "open": 1575.2, + "volumefrom": 186576.05, + "volumeto": 326457711.97, + "close": 1749.73 + }, { + "time": 1533859200, + "high": 1748.16, + "low": 1549.71, + "open": 1741.99, + "volumefrom": 75053.31, + "volumeto": 120845586.03, + "close": 1604.5 + }], + "TimeTo": 1533859200, + "TimeFrom": 1502323200, + "FirstValueInArray": true, + "ConversionType": { + "type": "multiply", + "conversionSymbol": "BTC" + } +} \ No newline at end of file diff --git a/tests/e2e/fixtures/crypto-api/histoday7.json b/tests/e2e/fixtures/crypto-api/histoday7.json new file mode 100644 index 000000000..fdcd37663 --- /dev/null +++ b/tests/e2e/fixtures/crypto-api/histoday7.json @@ -0,0 +1,69 @@ +{ + "Response": "Success", + "Type": 100, + "Aggregated": false, + "Data": [{ + "time": 1531267200, + "high": 2020.83, + "low": 1899.37, + "open": 1958.7, + "volumefrom": 54023.33, + "volumeto": 108327581.32, + "close": 2005.2 + }, { + "time": 1531353600, + "high": 2021.24, + "low": 1606.45, + "open": 1966.59, + "volumefrom": 58907.32, + "volumeto": 112164249.87, + "close": 1904.08 + }, { + "time": 1531440000, + "high": 1919.11, + "low": 1731.7, + "open": 1894.85, + "volumefrom": 208752.15, + "volumeto": 367948627.11, + "close": 1762.61 + }, { + "time": 1531526400, + "high": 1793.78, + "low": 1743.36, + "open": 1775.27, + "volumefrom": 48494.97, + "volumeto": 86339959.64, + "close": 1780.39 + }, { + "time": 1531612800, + "high": 1812.97, + "low": 1721.5, + "open": 1797.46, + "volumefrom": 80862.23, + "volumeto": 145571420.94, + "close": 1800.24 + }, { + "time": 1531699200, + "high": 1929.06, + "low": 1853.28, + "open": 1884.93, + "volumefrom": 48359.67, + "volumeto": 90107605.92, + "close": 1863.28 + }, { + "time": 1531785600, + "high": 2043.6, + "low": 1894.76, + "open": 2018.79, + "volumefrom": 86805.56, + "volumeto": 169408862.84, + "close": 1951.59 + }], + "TimeTo": 1533859200, + "TimeFrom": 1531267200, + "FirstValueInArray": true, + "ConversionType": { + "type": "multiply", + "conversionSymbol": "BTC" + } +} \ No newline at end of file diff --git a/tests/e2e/fixtures/test@d3.priv b/tests/e2e/fixtures/test@d3.priv new file mode 100644 index 000000000..87ff52af3 --- /dev/null +++ b/tests/e2e/fixtures/test@d3.priv @@ -0,0 +1 @@ +0f0ce16d2afbb8eca23c7d8c2724f0c257a800ee2bbd54688cec6b898e3f7e33 \ No newline at end of file diff --git a/tests/e2e/integration/auth.spec.js b/tests/e2e/integration/auth.spec.js new file mode 100644 index 000000000..7a4f2746b --- /dev/null +++ b/tests/e2e/integration/auth.spec.js @@ -0,0 +1,36 @@ +const testKeyPath = 'test@d3.priv' + +describe('Test login page', () => { + it('Log in', () => { + cy.visit('/') + cy.login(testKeyPath) + }) + + it('Log out', () => { + cy.get('.el-side-menu .el-menu-item:contains("Logout")').click({ force: true }) + cy.contains('Login').should('be.visible') + }) +}) + +describe('Test register page', () => { + it('Click sign up button', () => { + cy.contains('Sign Up').click() + cy.contains('Sign Up').should('be.visible') + }) + + // Signing up should fail because the registration service doesn't work on CI now + it('Register new user - failure', () => { + cy.get('.el-input__inner[name="username"]').type('jasonstatham') + .should('have.value', 'jasonstatham') + cy.get('.el-input__inner[name="newAddress"]').type('0x070f9d09370fd7ae3a583fc22a4e9f50ae1bdc78') + .should('have.value', '0x070f9d09370fd7ae3a583fc22a4e9f50ae1bdc78') + cy.get('.el-form-item__content > .el-button').contains('ADD').click() + cy.get('.el-form-item__content > .el-button.fullwidth').click() + cy.get('.el-message-box__title:contains("Sign up error")').should('be.visible') + }) + + it.skip('Confirm should redirect to Log in', () => { + cy.contains('Confirm').click() + cy.url().should('be.eq', `${Cypress.config('baseUrl')}/#/login`) + }) +}) diff --git a/tests/e2e/integration/reports.spec.js b/tests/e2e/integration/reports.spec.js new file mode 100644 index 000000000..7998eff99 --- /dev/null +++ b/tests/e2e/integration/reports.spec.js @@ -0,0 +1,83 @@ +import { subMonths, format, startOfMonth, endOfMonth } from 'date-fns' + +const testKeyPath = 'test@d3.priv' + +describe('Reports page', () => { + const previousMonth = subMonths(Date.now(), 1) + const startOfPreviousMonth = format(startOfMonth(previousMonth), 'YYYYMMDD') + const endOfPreviousMonth = format(endOfMonth(previousMonth), 'YYYYMMDD') + const dateFrom = '2018-01-01' + const dateTo = '2018-03-31' + + let timezone = Intl.DateTimeFormat().resolvedOptions().timeZone + + // Replace 'UTC' with 'Etc/GMT' because timezone.json has only the latter. + if (['Etc/UTC', 'UTC'].includes(timezone)) timezone = 'Etc/GMT' + + it('does login', () => { + cy.visit('/') + cy.login(testKeyPath) + }) + + it(`sets timezone to ${timezone}`, () => { + cy.setTimezone(timezone) + }) + + it('goes to the reports page', () => { + cy.goToPage('reports', 'Reports') + }) + + it('lists the previous month\'s reports', () => { + const from = format(startOfMonth(previousMonth), 'MMM D, YYYY') + const to = format(endOfMonth(previousMonth), 'MMM D, YYYY') + const expectedDateRangeString = `${from} - ${to}` + + cy.get('#reports-page tbody tr').each($el => { + cy.wrap($el).contains(expectedDateRangeString) + }) + }) + + it.skip('should download a file when clicking a CSV button', () => { + const expectedFilename = `report-monaco-${startOfPreviousMonth}-${endOfPreviousMonth}.csv` + + cy.get('#reports-page tr:contains("Monaco") button:contains("CSV")') + .click() + .shouldDownload(expectedFilename) + }) + + it.skip('should download a file when clicking a PDF button', () => { + const expectedFilename = `report-monaco-${startOfPreviousMonth}-${endOfPreviousMonth}.pdf` + + cy.get('#reports-page tr:contains("Monaco") button:contains("PDF")') + .click() + .shouldDownload(expectedFilename) + }) + + it('opens "New Report" dialog', () => { + cy.get('#reports-page [data-cy=getReport]').click() + cy.get('#reports-page .el-dialog .el-dialog__header').contains('Report') + }) + + it('fills the form', () => { + cy.get('#reports-page .el-dialog input#wallet-selector').click() + cy.get('.el-select-dropdown .el-select-dropdown__item:contains("Monaco")').click({ force: true }) + cy.get('#reports-page .el-dialog input[placeholder="Start date"]').type(format(dateFrom, 'YYYY-MM-DD'), { force: true }) + cy.get('#reports-page .el-dialog input[placeholder="End date"]').type(format(dateTo, 'YYYY-MM-DD'), { force: true }).blur() + }) + + it.skip('should download the new report as CSV', () => { + const expectedFilename = `report-monaco-${format(dateFrom, 'YYYYMMDD')}-${format(dateTo, 'YYYYMMDD')}.csv` + + cy.get('#reports-page .el-dialog button:contains("CSV")') + .click({ force: true }) + .shouldDownload(expectedFilename) + }) + + it.skip('should download the new report as PDF', () => { + const expectedFilename = `report-monaco-${format(dateFrom, 'YYYYMMDD')}-${format(dateTo, 'YYYYMMDD')}.pdf` + + cy.get('#reports-page .el-dialog button:contains("PDF")') + .click({ force: true }) + .shouldDownload(expectedFilename) + }) +}) diff --git a/tests/e2e/integration/settings.spec.js b/tests/e2e/integration/settings.spec.js new file mode 100644 index 000000000..c7fb4ad87 --- /dev/null +++ b/tests/e2e/integration/settings.spec.js @@ -0,0 +1,93 @@ +const testKeyPath = 'alice@d3.priv' + +describe('Test settings page', () => { + it('Make auth', () => { + cy.visit('/') + cy.login(testKeyPath) + }) + + it('Go to settings page', () => { + cy.goToPage('settings', 'Settings') + }) + + it('Change settings', () => { + cy.get(':nth-child(1) > .el-col > .el-radio-group > :nth-child(2)').click().should(() => { + expect(localStorage.getItem('settings')).to.eq('{"view":{"fiat":"USD"}}') + }) + cy.get(':nth-child(2) > .el-col > .el-radio-group > :nth-child(3)').click().should(() => { + expect(localStorage.getItem('settings')).to.eq('{"view":{"fiat":"USD","crypto":"XRP"}}') + }) + cy.get(':nth-child(1) > :nth-child(1) > .el-input__inner').type('Europe/Dublin') + cy.contains('ul', 'Europe/Dublin').click().should(() => { + expect(localStorage.getItem('settings')).to.eq('{"view":{"fiat":"USD","crypto":"XRP","timezone":"Europe/Dublin"}}') + }) + }) + + describe('Public keys', () => { + let accountSignatories = 0 + + it('Get current amount of public key', () => { + cy.get('[data-cy="accountSignatories"]').children() + .then($children => { + accountSignatories = $children.length + }) + }) + + it('Add public key', () => { + cy.wrap('9c430dfe8c54b0a447e25f75121119ac3b649c1253bce8420f245e4c104dccd1').as('validPrivateKey') + cy.get('[data-cy="addPublicKey"]').click() + cy.get('[data-cy="addPublicKeyDialog"]') + .should('be.visible') + cy.get('[data-cy="addPublicKeyDialog').find('.el-button').click() + cy.get('#approval-dialog .el-input') + .each(function ($el, index) { + cy.wrap($el).find('.el-input__inner') + .type(this.validPrivateKey) + .should('have.value', this.validPrivateKey) + }) + cy.get('#confirm-approval-form').click({ force: true }) + }) + + it('Download private key', () => { + cy.get('[data-cy="downloadPrivateKeyDialog"]', { timeout: 10000 }) + .should('be.visible') + cy.get('[data-cy="buttonDownload"]') + .click() + cy.get('[data-cy="buttonConfirm"]') + .click() + }) + + it('Check new public key', () => { + cy.get('[data-cy="accountSignatories"]', { timeout: 5000 }).children() + .then($children => { + expect($children.length).eq(accountSignatories + 1) + }) + }) + + it.skip('Remove public key', () => { + // TODO: This test should not pick main public key + // const mainPublicKey = 'iJ9riB4zG+IUh9t33PMsX409XoBm540v6sQjn+kdQW8=' + let keyToRemove = 0 + cy.get('[data-cy="removeSignatory"]').eq(keyToRemove).click({ force: true }) + cy.get('[data-cy="removePublicKeyDialog"]') + .find('.el-button') + .click() + cy.wrap('0f0ce16d2afbb8eca23c7d8c2724f0c257a800ee2bbd54688cec6b898e3f7e33').as('validPrivateKey') + cy.get('#approval-dialog .el-input') + .each(function ($el, index) { + cy.wrap($el).find('.el-input__inner') + .type(this.validPrivateKey) + .should('have.value', this.validPrivateKey) + }) + cy.get('#confirm-approval-form').click({ force: true }) + }) + + it.skip('Handle success message', () => { + cy.get('.el-message', { timeout: 10000 }).should('be.visible') + cy.get('[data-cy="accountSignatories"]').children() + .then($children => { + expect($children.length).eq(accountSignatories) + }) + }) + }) +}) diff --git a/tests/e2e/integration/wallets.spec.js b/tests/e2e/integration/wallets.spec.js new file mode 100644 index 000000000..dc117b618 --- /dev/null +++ b/tests/e2e/integration/wallets.spec.js @@ -0,0 +1,693 @@ +const testKeyPath = 'test@d3.priv' +const aliceKeyPath = 'alice@d3.priv' + +const TOKEN_BAT = 'BasicAttentionToken' +const TOKEN_REP = 'Augur' + +describe('Test wallets page without white list', () => { + it('Make auth', () => { + cy.visit('/') + cy.login(aliceKeyPath) + }) + + it('Go to wallets page', () => { + cy.goToPage('wallets', 'Wallets') + }) + + describe('Test sorting', () => { + it('Sort wallets with alphabetical descending order', () => { + cy.get('#wallets-sort-button').click({ force: true }) + cy.get('.el-dropdown-menu__item:contains("alphabetical (desc)")').click({ force: true }) + + cy.get('a.card .label').first().invoke('text').as('firstWalletName') + cy.get('a.card .label').last().invoke('text').as('lastWalletName') + + cy.get('@firstWalletName').then(firstWalletName => { + cy.get('@lastWalletName').should('lte', firstWalletName) + }) + }) + + it('Sort wallets with alphabetical ascending order', () => { + cy.get('#wallets-sort-button').click({ force: true }) + cy.get('.el-dropdown-menu__item:contains("alphabetical (asc)")').click({ force: true }) + + cy.get('a.card .label').first().invoke('text').as('firstWalletName') + cy.get('a.card .label').last().invoke('text').as('lastWalletName') + + cy.get('@firstWalletName').then(firstWalletName => { + cy.get('@lastWalletName').should('gte', firstWalletName) + }) + }) + }) + + describe('Test search', () => { + it('Search for wallet', () => { + cy.get('.el-input__inner') + .type(TOKEN_BAT).should('have.value', TOKEN_BAT) + cy.get('aside').find('a.card').should('have.length', 1) + }) + + it('Open wallet', () => { + cy.get('a.card').first().click() + cy.url().should('contain', TOKEN_BAT.toLowerCase()) + cy.get('.card_header').first().should('contain', TOKEN_BAT) + }) + }) + + describe('Test deposit modal', () => { + it('Open modal', () => { + cy.get('[data-cy=deposit]').click() + cy.get('div.el-dialog').eq(1).should('be.visible') + }) + + it('QR Code value and address are equal', () => { + cy.get('[data-cy=deposit-address]').then(($span) => { + cy.get('canvas').parent() + .should('have.attr', 'value', $span.text()) + }) + }) + + it('Close modal', () => { + cy.get('i.el-dialog__close').eq(1).click() + cy.get('div.el-dialog').eq(1).should('not.be.visible') + }) + }) + + describe('Test withdraw modal', () => { + it('Open modal', () => { + cy.get('[data-cy=withdraw]').click() + cy.get('div.el-dialog').eq(0).should('be.visible') + }) + + it('Validate amount field', () => { + const tokenAmount = '0.1' + cy.get('div.el-dialog').eq(0) + .find(':nth-child(1) > .el-form-item__content > .el-input > .el-input__inner') + .type(tokenAmount) + .should('have.value', tokenAmount) + cy.get('div.el-dialog').eq(0) + .find(':nth-child(1) > .el-form-item__content > .el-form-item__error') + .should('not.be.visible') + cy.get('div.el-dialog').eq(0) + .find(':nth-child(1) > .el-form-item__content > .el-input > .el-input__inner') + .clear() + cy.get('div.el-dialog').eq(0) + .find(':nth-child(1) > .el-form-item__content > .el-form-item__error') + .should('be.visible') + }) + + it('Validate wallet field', () => { + const walletAddress = '0x0000000000000000000000000000000000000000' + cy.get('div.el-dialog').eq(0) + .find(':nth-child(3) > .el-form-item__content > .el-input > .el-input__inner') + .type(walletAddress) + .should('have.value', walletAddress) + cy.get('div.el-dialog').eq(0) + .find(':nth-child(3) > .el-form-item__content > .el-form-item__error') + .should('not.be.visible') + cy.get('div.el-dialog').eq(0) + .find(':nth-child(3) > .el-form-item__content > .el-input > .el-input__inner') + .clear() + cy.get('div.el-dialog').eq(0) + .find(':nth-child(3) > .el-form-item__content > .el-form-item__error') + .should('be.visible') + }) + + it('Validate modal - handle an error', () => { + cy.get('div.el-dialog').eq(0) + .find('.el-form-item__content > .el-button') + .click() + cy.get('div.el-dialog').eq(0) + .find(':nth-child(1) > .el-form-item__content > .el-form-item__error') + .should('be.visible') + cy.get('div.el-dialog').eq(0) + .find(':nth-child(3) > .el-form-item__content > .el-form-item__error') + .should('be.visible') + }) + + it('Validate modal - correct', () => { + const tokenAmount = '0.1' + const walletAddress = '0x0000000000000000000000000000000000000000' + cy.get('div.el-dialog').eq(0) + .find(':nth-child(1) > .el-form-item__content > .el-input > .el-input__inner') + .type(tokenAmount) + .should('have.value', tokenAmount) + cy.get('div.el-dialog').eq(0) + .find(':nth-child(3) > .el-form-item__content > .el-input > .el-input__inner') + .type(walletAddress) + .should('have.value', walletAddress) + cy.get('div.el-dialog').eq(0) + .find('.el-form-item__content > .el-button') + .click() + cy.get('div.el-dialog').eq(0) + .get('div.el-dialog') + .eq(4) + .should('be.visible') + }) + + it('Validate approval dialog - handle an error', () => { + cy.wrap('invalid_private_key').as('invalidPrivateKey') + + cy.get('#approval-dialog .el-input') + .each(function ($el, index) { + cy.wrap($el).find('.el-input__inner') + .clear() + .type(this.invalidPrivateKey) + .should('have.value', this.invalidPrivateKey) + + cy.get('#approval-dialog .el-form-item__error').eq(index) + .should('be.visible') + }) + + cy.get('#confirm-approval-form') + .should('be.disabled') + }) + + it('Validate approval dialog - correct', () => { + cy.wrap('0f0ce16d2afbb8eca23c7d8c2724f0c257a800ee2bbd54688cec6b898e3f7e33').as('validPrivateKey') + + cy.get('#approval-dialog .el-input') + .each(function ($el, index) { + cy.wrap($el).find('.el-input__inner') + .clear() + .type(this.validPrivateKey) + .should('have.value', this.validPrivateKey) + }) + + cy.get('#confirm-approval-form') + .should('not.be.disabled') + }) + + it('Close approval modal', () => { + cy.get('#approval-dialog i.el-dialog__close').click() + }) + + it('Close modal', () => { + cy.get('i.el-dialog__close').eq(0).click() + cy.get('div.el-dialog').eq(0).should('not.be.visible') + }) + }) + + describe('Test transfer modal', () => { + it('Open modal', () => { + cy.get('[data-cy=transfer]').click() + cy.get('div.el-dialog').eq(2).should('be.visible') + }) + + it('Validate amount field', () => { + const tokenAmount = '0.1' + cy.get('div.el-dialog').eq(2) + .find(':nth-child(1) > .el-form-item__content > .el-input > .el-input__inner') + .type(tokenAmount) + .should('have.value', tokenAmount) + cy.get('div.el-dialog').eq(2) + .find(':nth-child(1) > .el-form-item__content > .el-form-item__error') + .should('not.be.visible') + cy.get('div.el-dialog').eq(2) + .find(':nth-child(1) > .el-form-item__content > .el-input > .el-input__inner') + .clear() + cy.get('div.el-dialog').eq(2) + .find(':nth-child(1) > .el-form-item__content > .el-form-item__error') + .should('be.visible') + }) + + it('Validate account field', () => { + const account = 'james@bond' + cy.get('div.el-dialog').eq(2) + .find(':nth-child(3) > .el-form-item__content > .el-input > .el-input__inner') + .type(account) + .should('have.value', account) + cy.get('div.el-dialog').eq(2) + .find(':nth-child(3) > .el-form-item__content > .el-form-item__error') + .should('not.be.visible') + cy.get('div.el-dialog').eq(2) + .find(':nth-child(3) > .el-form-item__content > .el-input > .el-input__inner') + .clear() + cy.get('div.el-dialog').eq(2) + .find(':nth-child(3) > .el-form-item__content > .el-form-item__error') + .should('be.visible') + }) + + it('Validate modal - handle an error', () => { + cy.get('div.el-dialog').eq(2) + .find('.el-dialog__body > .el-button') + .click() + cy.get('div.el-dialog').eq(2) + .find(':nth-child(1) > .el-form-item__content > .el-form-item__error') + .should('be.visible') + cy.get('div.el-dialog').eq(2) + .find(':nth-child(3) > .el-form-item__content > .el-form-item__error') + .should('be.visible') + }) + + it('Validate modal - correct', () => { + const tokenAmount = '0.1' + const account = 'james@bond' + cy.get('div.el-dialog').eq(2) + .find(':nth-child(1) > .el-form-item__content > .el-input > .el-input__inner') + .type(tokenAmount) + .should('have.value', tokenAmount) + cy.get('div.el-dialog').eq(2) + .find(':nth-child(3) > .el-form-item__content > .el-input > .el-input__inner') + .type(account) + .should('have.value', account) + cy.get('div.el-dialog').eq(2) + .find('.el-dialog__body > .el-button') + .click() + cy.get('div.el-dialog').eq(4).should('be.visible') + cy.get('i.el-dialog__close').eq(4).click() + }) + + it('Close modal', () => { + cy.get('div.el-dialog').eq(2) + .find('i.el-dialog__close') + .click() + cy.get('div.el-dialog').eq(2) + .find('div.el-dialog') + .should('not.be.visible') + }) + }) + + describe('Test exchange modal', () => { + it('Open modal', () => { + cy.get('[data-cy=exchange]').click() + cy.get('div.el-dialog').eq(3).should('be.visible') + }) + + it('Validate first amount field', () => { + const tokenAmount = '0.1' + cy.get('div.el-dialog').eq(3) + .find(':nth-child(1) > .el-form-item__content > .el-input > .el-input__inner') + .type(tokenAmount) + .should('have.value', tokenAmount) + cy.get('div.el-dialog').eq(3) + .find(':nth-child(1) > .el-form-item__content > .el-form-item__error') + .should('not.be.visible') + cy.get('div.el-dialog').eq(3) + .find(':nth-child(1) > .el-form-item__content > .el-input > .el-input__inner') + .clear() + cy.get('div.el-dialog').eq(3) + .find(':nth-child(1) > .el-form-item__content > .el-form-item__error') + .should('be.visible') + }) + + it('Validate second amount field', () => { + const tokenAmount = '0.2' + cy.get('div.el-dialog').eq(3) + .find(':nth-child(3) > .el-form-item__content > .el-input > .el-input__inner') + .type(tokenAmount) + .should('have.value', tokenAmount) + cy.get('div.el-dialog').eq(3) + .find(':nth-child(3) > .el-form-item__content > .el-form-item__error') + .should('be.visible').should('contain', 'Please select asset') + cy.get('div.el-dialog').eq(3) + .find(':nth-child(3) > .el-form-item__content > .el-input > .el-input__inner') + .clear() + cy.get('div.el-dialog').eq(3) + .find(':nth-child(3) > .el-form-item__content > .el-form-item__error') + .should('be.visible') + }) + + it('Select second token', () => { + cy.get('div.el-dialog').eq(3) + .find(':nth-child(3) > .el-form-item__content > .el-input-group > .el-input-group__append > .el-select > .el-input > .el-input__inner') + .click() + cy.get('.el-scrollbar > .el-select-dropdown__wrap > .el-scrollbar__view') + .find(':nth-child(4) > span').eq(1) + .click() + cy.get('div.el-dialog').eq(3) + .find('.el-dialog__body > .el-form > :nth-child(4)') + .should('be.visible') + }) + + it('Validate account field', () => { + const account = 'james@bond' + cy.get('div.el-dialog').eq(3) + .find(':nth-child(5) > .el-form-item__content > .el-input > .el-input__inner') + .type(account) + .should('have.value', account) + cy.get('div.el-dialog').eq(3) + .find(':nth-child(5) > .el-form-item__content > .el-form-item__error') + .should('not.be.visible') + cy.get('div.el-dialog').eq(3) + .find(':nth-child(5) > .el-form-item__content > .el-input > .el-input__inner') + .clear() + cy.get('div.el-dialog').eq(3) + .find(':nth-child(5) > .el-form-item__content > .el-form-item__error') + .should('be.visible') + }) + + it('Validate modal - handle an error', () => { + cy.get('div.el-dialog').eq(3) + .find('.el-dialog__body > .el-button') + .click() + cy.get('div.el-dialog').eq(3) + .find(':nth-child(1) > .el-form-item__content > .el-form-item__error') + .should('be.visible') + cy.get('div.el-dialog').eq(3) + .find(':nth-child(3) > .el-form-item__content > .el-form-item__error') + .should('be.visible') + cy.get('div.el-dialog').eq(3) + .find(':nth-child(5) > .el-form-item__content > .el-form-item__error') + .should('be.visible') + }) + + it('Validate modal - correct', () => { + const tokenAmountFirst = '0.1' + const tokenAmountSecond = '0.2' + const account = 'james@bond' + cy.get('div.el-dialog').eq(3) + .find(':nth-child(1) > .el-form-item__content > .el-input > .el-input__inner') + .type(tokenAmountFirst) + .should('have.value', tokenAmountFirst) + cy.get('div.el-dialog').eq(3) + .find(':nth-child(3) > .el-form-item__content > .el-input > .el-input__inner') + .type(tokenAmountSecond) + .should('have.value', tokenAmountSecond) + cy.get('div.el-dialog').eq(3) + .find(':nth-child(5) > .el-form-item__content > .el-input > .el-input__inner') + .type(account) + .should('have.value', account) + cy.get('div.el-dialog').eq(3) + .find('.el-dialog__body > .el-button') + .click() + cy.get('div.el-dialog').eq(4).should('be.visible') + cy.get('i.el-dialog__close').eq(4).click() + }) + + it('Close modal', () => { + cy.get('i.el-dialog__close').eq(3).click() + cy.get('div.el-dialog').eq(3).should('not.be.visible') + }) + }) +}) + +describe('Test wallets page with white list', () => { + it('Make auth', () => { + cy.visit('/') + cy.login(testKeyPath) + }) + + it('Go to wallets page', () => { + cy.goToPage('wallets', 'Wallets') + }) + + describe('Test withdraw modal', () => { + it('Open modal', () => { + cy.contains('Withdraw').click() + cy.get('div.el-dialog').eq(0).should('be.visible') + }) + + it('Validate amount field', () => { + const tokenAmount = '0.1' + cy.get('div.el-dialog').eq(0) + .find(':nth-child(1) > .el-form-item__content > .el-input > .el-input__inner') + .type(tokenAmount) + .should('have.value', tokenAmount) + cy.get('div.el-dialog').eq(0) + .find(':nth-child(1) > .el-form-item__content > .el-form-item__error') + .should('not.be.visible') + cy.get('div.el-dialog').eq(0) + .find(':nth-child(1) > .el-form-item__content > .el-input > .el-input__inner') + .clear() + cy.get('div.el-dialog').eq(0) + .find(':nth-child(1) > .el-form-item__content > .el-form-item__error') + .should('be.visible') + }) + + it('Validate modal - handle an error', () => { + cy.get('div.el-dialog').eq(0) + .find('.el-form-item__content > .el-button') + .click() + cy.get('div.el-dialog').eq(0) + .find(':nth-child(1) > .el-form-item__content > .el-form-item__error') + .should('be.visible') + cy.get('div.el-dialog').eq(0) + .find(':nth-child(3) > .el-form-item__content > .el-form-item__error') + .should('be.visible') + }) + + it('Validate modal - correct', () => { + const tokenAmount = '0.1' + cy.get('div.el-dialog').eq(0) + .find(':nth-child(1) > .el-form-item__content > .el-input > .el-input__inner') + .type(tokenAmount) + .should('have.value', tokenAmount) + cy.get('div.el-dialog').eq(0) + .find('.el-select > .el-input > .el-input__inner') + .click() + cy.get('.el-select-dropdown__item') + .click() + cy.get('div.el-dialog').eq(0) + .find('.el-form-item__content > .el-button') + .click() + cy.get('div.el-dialog').eq(0) + .get('div.el-dialog') + .eq(4) + .should('be.visible') + }) + + it('Validate approval dialog - handle an error', () => { + cy.wrap('invalid_private_key').as('invalidPrivateKey') + + cy.get('#approval-dialog .el-input') + .each(function ($el, index) { + cy.wrap($el).find('.el-input__inner') + .clear() + .type(this.invalidPrivateKey) + .should('have.value', this.invalidPrivateKey) + + cy.get('#approval-dialog .el-form-item__error').eq(index) + .should('be.visible') + }) + + cy.get('#confirm-approval-form') + .should('be.disabled') + }) + + it('Validate approval dialog - correct', () => { + cy.wrap('0f0ce16d2afbb8eca23c7d8c2724f0c257a800ee2bbd54688cec6b898e3f7e33').as('validPrivateKey') + + cy.get('#approval-dialog .el-input') + .each(function ($el, index) { + cy.wrap($el).find('.el-input__inner') + .clear() + .type(this.validPrivateKey) + .should('have.value', this.validPrivateKey) + }) + + cy.get('#confirm-approval-form') + .should('not.be.disabled') + }) + + it('Close approval modal', () => { + cy.get('#approval-dialog i.el-dialog__close').click() + }) + + it('Close modal', () => { + cy.get('i.el-dialog__close').eq(0).click() + cy.get('div.el-dialog').eq(0).should('not.be.visible') + }) + }) +}) + +describe('Test transfer with one private key', () => { + it('Make auth', () => { + cy.visit('/') + cy.login(aliceKeyPath) + }) + + it('Go to wallets page', () => { + cy.goToPage('wallets', 'Wallets') + }) + + it('Open wallet', () => { + cy.get('.el-input__inner') + .type(TOKEN_REP).should('have.value', TOKEN_REP) + cy.get('a.card').first().click() + cy.url().should('contain', TOKEN_REP.toLowerCase()) + cy.get('.card_header').first().should('contain', TOKEN_REP) + }) + + describe('Test transfer with one key', () => { + it('Open modal', () => { + cy.get('[data-cy=transfer]').click() + cy.get('div.el-dialog').eq(2).should('be.visible') + }) + + it('Validate modal - correct', () => { + const tokenAmount = '0.001' + const account = 'test@d3' + cy.get('div.el-dialog').eq(2) + .find(':nth-child(1) > .el-form-item__content > .el-input > .el-input__inner') + .type(tokenAmount) + .should('have.value', tokenAmount) + cy.get('div.el-dialog').eq(2) + .find(':nth-child(3) > .el-form-item__content > .el-input > .el-input__inner') + .type(account) + .should('have.value', account) + cy.get('div.el-dialog').eq(2) + .find('.el-dialog__body > .el-button') + .click() + }) + + it('Enter one private key and send', () => { + cy.wrap('9c430dfe8c54b0a447e25f75121119ac3b649c1253bce8420f245e4c104dccd1').as('validPrivateKey') + cy.get('#approval-dialog .el-input') + .each(function ($el, index) { + cy.wrap($el).find('.el-input__inner') + .type(this.validPrivateKey) + .should('have.value', this.validPrivateKey) + }) + cy.get('#confirm-approval-form').click({ force: true }) + }) + + it('Handle success message', () => { + cy.get('.el-message', { timeout: 10000 }).should('be.visible') + }) + }) +}) + +describe('Test transfer with two private keys', () => { + it('Make auth', () => { + cy.visit('/') + cy.login(testKeyPath) + }) + + it('Go to wallets page', () => { + cy.goToPage('wallets', 'Wallets') + }) + + it('Open wallet', () => { + cy.get('.el-input__inner') + .type(TOKEN_REP).should('have.value', TOKEN_REP) + cy.get('a.card').first().click() + cy.url().should('contain', TOKEN_REP.toLowerCase()) + cy.get('.card_header').first().should('contain', TOKEN_REP) + }) + + describe('Test transfer with two keys', () => { + it('Open modal', () => { + cy.get('[data-cy=transfer]').click() + cy.get('div.el-dialog').eq(2).should('be.visible') + }) + + it('Validate modal - correct', () => { + const tokenAmount = '0.001' + const account = 'alice@d3' + cy.get('div.el-dialog').eq(2) + .find(':nth-child(1) > .el-form-item__content > .el-input > .el-input__inner') + .type(tokenAmount) + .should('have.value', tokenAmount) + cy.get('div.el-dialog').eq(2) + .find(':nth-child(3) > .el-form-item__content > .el-input > .el-input__inner') + .type(account) + .should('have.value', account) + cy.get('div.el-dialog').eq(2) + .find('.el-dialog__body > .el-button') + .click() + }) + + it('Enter two private keys and send', () => { + cy.wrap('0f0ce16d2afbb8eca23c7d8c2724f0c257a800ee2bbd54688cec6b898e3f7e33').as('validPrivateKey1') + cy.wrap('9c430dfe8c54b0a447e25f75121119ac3b649c1253bce8420f245e4c104dccd1').as('validPrivateKey2') + cy.get('#approval-dialog .el-input') + .each(function ($el, index) { + if (index === 0) { + cy.wrap($el).find('.el-input__inner') + .type(this.validPrivateKey1) + .should('have.value', this.validPrivateKey1) + } else { + cy.wrap($el).find('.el-input__inner') + .type(this.validPrivateKey2) + .should('have.value', this.validPrivateKey2) + } + }) + cy.get('#confirm-approval-form').click({ force: true }) + }) + + it('Handle success message', () => { + cy.get('.el-message', { timeout: 10000 }).should('be.visible') + }) + }) +}) + +describe('Test transfer with one private key and quorum 2', () => { + it('Make auth', () => { + cy.visit('/') + cy.login(testKeyPath) + }) + + it('Go to wallets page', () => { + cy.goToPage('wallets', 'Wallets') + }) + + it('Open wallet', () => { + cy.get('.el-input__inner') + .type(TOKEN_REP).should('have.value', TOKEN_REP) + cy.get('a.card').first().click() + cy.url().should('contain', TOKEN_REP.toLowerCase()) + cy.get('.card_header').first().should('contain', TOKEN_REP) + }) + + describe('Test transfer with one key and quorum 2', () => { + it('Open modal', () => { + cy.get('[data-cy=transfer]').click() + cy.get('div.el-dialog').eq(2).should('be.visible') + }) + + it('Validate modal - correct', () => { + const tokenAmount = '0.001' + const account = 'alice@d3' + cy.get('div.el-dialog').eq(2) + .find(':nth-child(1) > .el-form-item__content > .el-input > .el-input__inner') + .type(tokenAmount) + .should('have.value', tokenAmount) + cy.get('div.el-dialog').eq(2) + .find(':nth-child(3) > .el-form-item__content > .el-input > .el-input__inner') + .type(account) + .should('have.value', account) + cy.get('div.el-dialog').eq(2) + .find('.el-dialog__body > .el-button') + .click() + }) + + it('Enter one private key', () => { + cy.wrap('0f0ce16d2afbb8eca23c7d8c2724f0c257a800ee2bbd54688cec6b898e3f7e33').as('validPrivateKey1') + cy.get('#approval-dialog .el-input') + .each(function ($el, index) { + if (index === 0) { + cy.wrap($el).find('.el-input__inner') + .type(this.validPrivateKey1) + .should('have.value', this.validPrivateKey1) + } + }) + cy.get('#confirm-approval-form').click({ force: true }) + }) + + it('Handle success message', () => { + cy.get('.el-message', { timeout: 15000 }).should('be.visible') + }) + + it('Go to transactions page', () => { + cy.goToPage('transactions', 'Transactions') + }) + + it('Open add signature modal', () => { + cy.get('.transaction_action > .el-button').eq(0).click() + }) + + it('Enter second private key', () => { + const validPrivateKey2 = '9c430dfe8c54b0a447e25f75121119ac3b649c1253bce8420f245e4c104dccd1' + cy.get('#approval-dialog .el-input__inner') + .type(validPrivateKey2) + .should('have.value', validPrivateKey2) + cy.get('#confirm-approval-form').click({ force: true }) + }) + + it('Show message that transaction signed correctly', () => { + cy.wait(1000) + cy.get('.el-message', { timeout: 10000 }).should('be.visible') + }) + }) +}) diff --git a/tests/e2e/specs/test.js b/tests/e2e/specs/test.js deleted file mode 100644 index 03256494c..000000000 --- a/tests/e2e/specs/test.js +++ /dev/null @@ -1,14 +0,0 @@ -// For authoring Nightwatch tests, see -// http://nightwatchjs.org/guide#usage - -module.exports = { - 'default e2e tests': browser => { - browser - .url(process.env.VUE_DEV_SERVER_URL) - .waitForElementVisible('#app', 5000) - .assert.elementPresent('.hello') - .assert.containsText('h1', 'Welcome to Your Vue.js App') - .assert.elementCount('img', 1) - .end() - } -} diff --git a/tests/e2e/support/command.js b/tests/e2e/support/command.js new file mode 100644 index 000000000..409ee7d61 --- /dev/null +++ b/tests/e2e/support/command.js @@ -0,0 +1,54 @@ +Cypress.Commands.add('upload_file', (fileName, selector) => { + return cy.get(selector).then(subject => { + return cy.fixture(fileName, 'base64') + .then(Cypress.Blob.base64StringToBlob) + .then(blob => { + const el = subject[0] + const testFile = new File([blob], fileName, { type: 'text' }) + const dataTransfer = new DataTransfer() + dataTransfer.items.add(testFile) + el.files = dataTransfer.files + return subject + }) + }) +}) + +Cypress.Commands.add('goToPage', (url, expect) => { + cy.wait(2000) + cy.get(`.el-side-menu .el-menu-item:contains("${expect}")`).click({ force: true }) + cy.url().should('contain', url) +}) + +Cypress.Commands.add('login', (keyPath) => { + cy.upload_file(keyPath, 'input.el-upload__input') + cy.get('form > div:nth-child(3) input') + .type(Cypress.env('IROHA')).should('have.value', Cypress.env('IROHA')) + cy.get('.el-scrollbar__view > :nth-child(1)').click() + cy.get('.login-button-container > div > button').click() + cy.url().should('be.not.eq', `${Cypress.config('baseUrl')}/#/login`) +}) + +Cypress.Commands.add('setTimezone', (timezone) => { + cy.goToPage('settings', 'Settings') + cy.get('#timezone_select').should('be.visible').type(timezone) + cy.get('.el-select-dropdown .el-select-dropdown__list').contains(new RegExp(`^\\s*${timezone}\\s*$`)).click({ force: true }).should(() => { + const view = JSON.parse(localStorage.getItem('settings')).view + + expect(view).to.have.property('timezone', timezone) + }) +}) + +/* + * In test environment, clicking a download button opens an alert instead of + * downloading a file so Cypress can detect window:alert event to verify that + * the correct file will be downloaded. + */ +Cypress.Commands.add('shouldDownload', { + prevSubject: true +}, (subject, expectedFilename) => { + const stub = cy.stub() + + cy.on('window:alert', stub) + cy.wrap(subject).should(() => expect(stub.called).to.be.true) + .then(() => expect(stub.getCall(0)).to.be.calledWith(`downloading ${expectedFilename}`)) +}) diff --git a/tests/e2e/support/index.js b/tests/e2e/support/index.js new file mode 100644 index 000000000..c89a1f3cf --- /dev/null +++ b/tests/e2e/support/index.js @@ -0,0 +1 @@ +require('./command.js') diff --git a/tests/unit/.eslintrc.js b/tests/unit/.eslintrc.js index 4e51c63f4..2fbf44cb2 100644 --- a/tests/unit/.eslintrc.js +++ b/tests/unit/.eslintrc.js @@ -1,8 +1,10 @@ module.exports = { env: { - jest: true + mocha: true }, rules: { - 'import/no-extraneous-dependencies': 'off' + 'import/no-extraneous-dependencies': 'off', + 'import/no-webpack-loader-syntax': 'off', + 'no-unused-expressions': 'off' } } \ No newline at end of file diff --git a/tests/unit/HelloWorld.spec.js b/tests/unit/HelloWorld.spec.js deleted file mode 100644 index 941379a96..000000000 --- a/tests/unit/HelloWorld.spec.js +++ /dev/null @@ -1,12 +0,0 @@ -import { shallow } from '@vue/test-utils' -import HelloWorld from '@/components/HelloWorld.vue' - -describe('HelloWorld.vue', () => { - it('renders props.msg when passed', () => { - const msg = 'new message' - const wrapper = shallow(HelloWorld, { - propsData: { msg } - }) - expect(wrapper.text()).toMatch(msg) - }) -}) diff --git a/tests/unit/fixtures/assets.json b/tests/unit/fixtures/assets.json new file mode 100644 index 000000000..ba5b455d0 --- /dev/null +++ b/tests/unit/fixtures/assets.json @@ -0,0 +1,32 @@ +[ + { + "assetId": "omisego#test", + "accountId": "admin@test", + "balance": "10.80368522" + }, + { + "assetId": "augur#test", + "accountId": "admin@test", + "balance": "1000.02" + }, + { + "assetId": "bytom#test", + "accountId": "admin@test", + "balance": "10.25" + }, + { + "assetId": "eos#test", + "accountId": "admin@test", + "balance": "10.80368522" + }, + { + "assetId": "golem#test", + "accountId": "admin@test", + "balance": "200.04" + }, + { + "assetId": "dgd#test", + "accountId": "admin@test", + "balance": "30.03" + } +] \ No newline at end of file diff --git a/tests/unit/fixtures/report.json b/tests/unit/fixtures/report.json new file mode 100644 index 000000000..e86f6cb47 --- /dev/null +++ b/tests/unit/fixtures/report.json @@ -0,0 +1,356 @@ +{ + "params": { + "accountId": "report@test", + "wallet": { + "name": "Ethereum", + "asset": "ETH", + "amount": 10.15, + "assetId": "ethereum#test", + "precision": 2 + }, + "priceFiatList": [ + { + "date": 1530403200000, + "price": 0.0023 + }, + { + "date": 1530489600000, + "price": 0.0021 + }, + { + "date": 1530576000000, + "price": 0.0022 + }, + { + "date": 1530662400000, + "price": 0.0023 + }, + { + "date": 1530748800000, + "price": 0.0021 + }, + { + "date": 1530835200000, + "price": 0.0024 + }, + { + "date": 1530921600000, + "price": 0.0024 + }, + { + "date": 1531008000000, + "price": 0.002 + }, + { + "date": 1531094400000, + "price": 0.0022 + }, + { + "date": 1531180800000, + "price": 0.002 + }, + { + "date": 1531267200000, + "price": 0.0023 + }, + { + "date": 1531353600000, + "price": 0.0024 + }, + { + "date": 1531440000000, + "price": 0.0024 + }, + { + "date": 1531526400000, + "price": 0.0021 + }, + { + "date": 1531612800000, + "price": 0.0023 + }, + { + "date": 1531699200000, + "price": 0.0023 + }, + { + "date": 1531785600000, + "price": 0.0022 + }, + { + "date": 1531872000000, + "price": 0.0022 + } + ], + "dateFrom": "Jul. 1, 2018 00:00", + "dateTo": "Jul. 17, 2018 23:59", + "fiat": "USD", + "ext": "pdf", + "transactions": [ + { + "from": "you", + "to": "alice@test", + "amount": "1.23", + "date": 1531902561757, + "message": "" + }, + { + "from": "you", + "to": "alice@test", + "amount": "1.1", + "date": 1531811895944, + "message": "" + }, + { + "from": "alice@test", + "to": "you", + "amount": "0.59", + "date": 1531802515551, + "message": "hello" + }, + { + "from": "alice@test", + "to": "you", + "amount": "0.85", + "date": 1531802515546, + "message": "" + }, + { + "from": "you", + "to": "alice@test", + "amount": "0.84", + "date": 1531802510422, + "message": "hi" + }, + { + "from": "you", + "to": "alice@test", + "amount": "0.20", + "date": 1531802510419, + "message": "hello" + }, + { + "from": "you", + "to": "alice@test", + "amount": "0.08", + "date": 1531802510417, + "message": "" + }, + { + "from": "you", + "to": "alice@test", + "amount": "1.24", + "date": 1531802505264, + "message": "initial tx" + }, + { + "from": "alice@test", + "to": "you", + "amount": "0.90", + "date": 1531466238473, + "message": "hi" + }, + { + "from": "alice@test", + "to": "you", + "amount": "0.83", + "date": 1531466238465, + "message": "hi" + }, + { + "from": "you", + "to": "alice@test", + "amount": "0.10", + "date": 1531466233368, + "message": "hi" + }, + { + "from": "you", + "to": "alice@test", + "amount": "0.73", + "date": 1531466233363, + "message": "hello" + }, + { + "from": "you", + "to": "alice@test", + "amount": "0.12", + "date": 1531466233357, + "message": "" + }, + { + "from": "you", + "to": "alice@test", + "amount": "1.66", + "date": 1531466228261, + "message": "initial tx" + } + ] + }, + "expected": { + "filename": "report-ethereum-20180701-20180717.pdf", + "accountId": "report@test", + "walletName": "Ethereum", + "cryptoCurrencyUnit": "ETH", + "transfersIn": "3.17", + "transfersOut": "6.07", + "netChange": "-2.90", + "endingBalance": "11.38", + "startingBalance": "14.28", + "transactionsByDay": [ + { + "date": "Jul. 13, 2018 00:00", + "dailyIn": "1.73", + "dailyInFiat": "720.83", + "dailyOut": "2.61", + "dailyOutFiat": "1087.50", + "dailyNet": "-0.88" + }, + { + "date": "Jul. 17, 2018 00:00", + "dailyIn": "1.44", + "dailyInFiat": "654.55", + "dailyOut": "3.46", + "dailyOutFiat": "1572.73", + "dailyNet": "-2.02" + } + ], + "transactionDetails": [ + { + "time": "Jul. 1, 2018 00:00", + "to": null, + "description": "Starting Balance", + "amount": "", + "amountFiat": "", + "balance": "14.28", + "balanceFiat": "6208.70" + }, + { + "time": "Jul. 13, 2018 07:17", + "to": "alice@test", + "description": "initial tx", + "amount": "-1.66", + "amountFiat": "-691.67", + "balance": "12.62", + "balanceFiat": "5258.33" + }, + { + "time": "Jul. 13, 2018 07:17", + "to": "alice@test", + "description": "", + "amount": "-0.12", + "amountFiat": "-50.00", + "balance": "12.50", + "balanceFiat": "5208.33" + }, + { + "time": "Jul. 13, 2018 07:17", + "to": "alice@test", + "description": "hello", + "amount": "-0.73", + "amountFiat": "-304.17", + "balance": "11.77", + "balanceFiat": "4904.17" + }, + { + "time": "Jul. 13, 2018 07:17", + "to": "alice@test", + "description": "hi", + "amount": "-0.10", + "amountFiat": "-41.67", + "balance": "11.67", + "balanceFiat": "4862.50" + }, + { + "time": "Jul. 13, 2018 07:17", + "to": "Received", + "description": "hi", + "amount": "0.83", + "amountFiat": "345.83", + "balance": "12.50", + "balanceFiat": "5208.33" + }, + { + "time": "Jul. 13, 2018 07:17", + "to": "Received", + "description": "hi", + "amount": "0.90", + "amountFiat": "375.00", + "balance": "13.40", + "balanceFiat": "5583.33" + }, + { + "time": "Jul. 17, 2018 04:41", + "to": "alice@test", + "description": "initial tx", + "amount": "-1.24", + "amountFiat": "-563.64", + "balance": "12.16", + "balanceFiat": "5527.27" + }, + { + "time": "Jul. 17, 2018 04:41", + "to": "alice@test", + "description": "", + "amount": "-0.08", + "amountFiat": "-36.36", + "balance": "12.08", + "balanceFiat": "5490.91" + }, + { + "time": "Jul. 17, 2018 04:41", + "to": "alice@test", + "description": "hello", + "amount": "-0.20", + "amountFiat": "-90.91", + "balance": "11.88", + "balanceFiat": "5400.00" + }, + { + "time": "Jul. 17, 2018 04:41", + "to": "alice@test", + "description": "hi", + "amount": "-0.84", + "amountFiat": "-381.82", + "balance": "11.04", + "balanceFiat": "5018.18" + }, + { + "time": "Jul. 17, 2018 04:41", + "to": "Received", + "description": "", + "amount": "0.85", + "amountFiat": "386.36", + "balance": "11.89", + "balanceFiat": "5404.55" + }, + { + "time": "Jul. 17, 2018 04:41", + "to": "Received", + "description": "hello", + "amount": "0.59", + "amountFiat": "268.18", + "balance": "12.48", + "balanceFiat": "5672.73" + }, + { + "time": "Jul. 17, 2018 07:18", + "to": "alice@test", + "description": "", + "amount": "-1.10", + "amountFiat": "-500.00", + "balance": "11.38", + "balanceFiat": "5172.73" + }, + { + "time": "Jul. 17, 2018 23:59", + "to": null, + "description": "Ending Balance", + "amount": "", + "amountFiat": "", + "balance": "11.38", + "balanceFiat": "6490.91" + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/fixtures/transactions.json b/tests/unit/fixtures/transactions.json new file mode 100644 index 000000000..de2a5d59d --- /dev/null +++ b/tests/unit/fixtures/transactions.json @@ -0,0 +1,265 @@ +{ + "omisego#test": [ + { + "payload": { + "reducedPayload": { + "commandsList": [ + { + "transferAsset": { + "srcAccountId": "alice@test", + "destAccountId": "admin@test", + "assetId": "omisego#test", + "description": "hello", + "amount": { + "value": "0.39600075", + "precision": 8 + } + } + } + ], + "creatorAccountId": "alice@test", + "createdTime": 1528872321913 + } + }, + "signaturesList": [ + { + "publicKey": "vMSrFnrn2zcWchcO0x44L3xhL7/pGPmcJ2zZ3BmURqQ=", + "signature": + "itKfWVrUYPlyuEHWOr1vpvnYdldTjYIDN80EWHPYXNOwHqapwHhi87zpB01SjetCE7GNPlR8O0mFN8db+yV6Aw==" + } + ] + }, + { + "payload": { + "reducedPayload": { + "commandsList": [ + { + "transferAsset": { + "srcAccountId": "alice@test", + "destAccountId": "admin@test", + "assetId": "omisego#test", + "description": "hi", + "amount": { + "value": "0.44646002", + "precision": 8 + } + } + } + ], + "creatorAccountId": "alice@test", + "createdTime": 1528872321922 + } + }, + "signaturesList": [ + { + "publicKey": "vMSrFnrn2zcWchcO0x44L3xhL7/pGPmcJ2zZ3BmURqQ=", + "signature": + "gm1PodpdMZaR9MdStXePVlWBLX9gKcvadKpnMrFAglNF1mvpmHwnzmQgHs9Px4DX/bpx2xyb/86Lt4edO6jVBg==" + } + ] + }, + { + "payload": { + "reducedPayload": { + "commandsList": [ + { + "transferAsset": { + "srcAccountId": "alice@test", + "destAccountId": "admin@test", + "assetId": "omisego#test", + "description": "", + "amount": { + "value": "0.99913421", + "precision": 8 + } + } + } + ], + "creatorAccountId": "alice@test", + "createdTime": 1528872321919 + } + }, + "signaturesList": [ + { + "publicKey": "vMSrFnrn2zcWchcO0x44L3xhL7/pGPmcJ2zZ3BmURqQ=", + "signature": + "4/Jg1rEQ/5pB/QVwAliXNuGW7p7UsRzzL/E0oGZUobLWrk19+JQap0eQT4dZX3S4rncuIatR3VrJIbXuk1vGAw==" + } + ] + }, + { + "payload": { + "reducedPayload": { + "commandsList": [ + { + "transferAsset": { + "srcAccountId": "alice@test", + "destAccountId": "admin@test", + "assetId": "omisego#test", + "description": "hi", + "amount": { + "value": "0.47356821", + "precision": 8 + } + } + } + ], + "creatorAccountId": "alice@test", + "createdTime": 1528872321916 + } + }, + "signaturesList": [ + { + "publicKey": "vMSrFnrn2zcWchcO0x44L3xhL7/pGPmcJ2zZ3BmURqQ=", + "signature": + "aGIFM5GuGoLkkJboOSjevo3aFDAZInBXPGy8alpbtocx/ehc3a9/MQNhHRh8Ij0y6jjCId4PAaljnEEuYa7KCQ==" + } + ] + }, + { + "payload": { + "reducedPayload": { + "commandsList": [ + { + "transferAsset": { + "srcAccountId": "admin@test", + "destAccountId": "alice@test", + "assetId": "omisego#test", + "description": "initial tx", + "amount": { + "value": "1.66206859", + "precision": 8 + } + } + } + ], + "creatorAccountId": "admin@test", + "createdTime": 1528872311159 + } + }, + "signaturesList": [ + { + "publicKey": "iJ9riB4zG+IUh9t33PMsX409XoBm540v6sQjn+kdQW8=", + "signature": + "iT7mbbOgAo+70PWSS8CLB3JFuw+yIpcpDzOW/utwi5oaGTW6Be7b81E3o6EXgvgwtcNasYOGT3TQNbfXdeYBCA==" + } + ] + }, + { + "payload": { + "reducedPayload": { + "commandsList": [ + { + "transferAsset": { + "srcAccountId": "admin@test", + "destAccountId": "alice@test", + "assetId": "omisego#test", + "description": "hi", + "amount": { + "value": "0.28568069", + "precision": 8 + } + } + } + ], + "creatorAccountId": "admin@test", + "createdTime": 1528872316349 + } + }, + "signaturesList": [ + { + "publicKey": "iJ9riB4zG+IUh9t33PMsX409XoBm540v6sQjn+kdQW8=", + "signature": + "ztbSgcqouCm9IxOAfrYCh+64txNHh2JvrSUQHd4w2yh42WsbOt6Rc7ADhiDH3GQpRUVp+XyohyX57rcMosx9CQ==" + } + ] + }, + { + "payload": { + "reducedPayload": { + "commandsList": [ + { + "transferAsset": { + "srcAccountId": "admin@test", + "destAccountId": "alice@test", + "assetId": "omisego#test", + "description": "", + "amount": { + "value": "0.77628717", + "precision": 8 + } + } + } + ], + "creatorAccountId": "admin@test", + "createdTime": 1528872316354 + } + }, + "signaturesList": [ + { + "publicKey": "iJ9riB4zG+IUh9t33PMsX409XoBm540v6sQjn+kdQW8=", + "signature": + "4DqLDA8JZwh/jwkn2QTBW1xV+kcaZOLhHSqM64ER99PcLXjJYboTMWm5cQKLl9LbpfjmCl2N1x5POvD2LjPYCQ==" + } + ] + }, + { + "payload": { + "reducedPayload": { + "commandsList": [ + { + "transferAsset": { + "srcAccountId": "admin@test", + "destAccountId": "alice@test", + "assetId": "omisego#test", + "description": "hi", + "amount": { + "value": "0.58337340", + "precision": 8 + } + } + } + ], + "creatorAccountId": "admin@test", + "createdTime": 1528872316358 + } + }, + "signaturesList": [ + { + "publicKey": "iJ9riB4zG+IUh9t33PMsX409XoBm540v6sQjn+kdQW8=", + "signature": + "5AlFKbIXwI0oNn4XzNDOENfgACDTkMCnzQWIxWMkACT6+thtqRjHOFxF4LfVcI/Z/2bSErHZxW7Tn8x1a3LQAw==" + } + ] + }, + { + "payload": { + "reducedPayload": { + "commandsList": [ + { + "transferAsset": { + "srcAccountId": "admin@test", + "destAccountId": "alice@test", + "assetId": "omisego#test", + "description": "hello", + "amount": { + "value": "0.11840092", + "precision": 8 + } + } + } + ], + "creatorAccountId": "admin@test", + "createdTime": 1528872316346 + } + }, + "signaturesList": [ + { + "publicKey": "iJ9riB4zG+IUh9t33PMsX409XoBm540v6sQjn+kdQW8=", + "signature": + "TewmkTNWgeT/YneVcSX5X7eNWo5XXriLW/8MnpoYu5+Q3jy1ZcysOVTcafRCNDMP797i1/oK3HtX0tQdKFGfDA==" + } + ] + } + ] +} diff --git a/tests/unit/helper.js b/tests/unit/helper.js new file mode 100644 index 000000000..896ba48ad --- /dev/null +++ b/tests/unit/helper.js @@ -0,0 +1,22 @@ +const crypto = require('crypto') +const _ = require('lodash') + +const randomHex = (n) => crypto.randomBytes(2 * n).toString('hex') + +export default { + randomHex, + randomAccountId: () => randomHex(5) + '@' + randomHex(5), + randomAssetId: () => randomHex(5) + '#' + randomHex(5), + randomNodeIp: () => 'localhost:' + _.random(0, 65535), + randomPublicKey: () => randomHex(16), + randomPrivateKey: () => randomHex(16), + randomObject: () => ({ [randomHex(5)]: randomHex(5) }), + randomAmount: () => String(Math.random()).substr(0, _.random(5, 10)), + randomAmountRng: (obj) => { + obj = obj || {} + obj.max = obj.max || 100000 + obj.min = obj.min || 0 + return _.random(obj.min, obj.max) + }, + randomArrayElement: (arr) => _.sample(arr) +} diff --git a/tests/unit/store/Account.spec.js b/tests/unit/store/Account.spec.js new file mode 100644 index 000000000..4a032fdbe --- /dev/null +++ b/tests/unit/store/Account.spec.js @@ -0,0 +1,456 @@ +import chai from 'chai' +import sinon from 'sinon' +import AccountInjector from 'inject-loader!../../../src/store/Account.js' +import helper from '../helper' + +const { + randomHex, + randomAccountId, + randomAssetId, + randomNodeIp, + randomPublicKey, + randomPrivateKey, + randomObject, + randomAmount, + randomAmountRng +} = helper +const expect = chai.expect + +chai.use(require('chai-things')) + +describe('Account store', () => { + /* + * Mock irohaUtil so that unit tests can work without irohad + */ + const MOCK_ASSETS = require('../fixtures/assets.json') + const MOCK_ASSET_TRANSACTIONS = require('../fixtures/transactions.json') + const MOCK_TRANSACTIONS = MOCK_ASSET_TRANSACTIONS['omisego#test'] + const MOCK_NODE_IP = 'MOCK_NODE_IP' + const MOCK_NOTARY_IP = 'MOCK_NOTARY_IP' + const MOCK_ACCOUNT_RESPONSE = { accountId: randomAccountId() } + const MOCK_KEYPAIR = { + publicKey: randomPublicKey(), + privateKey: randomPrivateKey() + } + const irohaUtil = require('@util/iroha').default + const irohaUtilMock = Object.assign(irohaUtil, { + getStoredNodeIp: () => MOCK_NODE_IP, + signup: (username) => Promise.resolve({ username, ...MOCK_KEYPAIR }), + login: (username, privateKey, nodeIp) => Promise.resolve(MOCK_ACCOUNT_RESPONSE), + logout: () => Promise.resolve(), + generateKeypair: () => MOCK_KEYPAIR, + getAccountAssetTransactions: () => Promise.resolve(MOCK_TRANSACTIONS), + getAccountAssets: (accountId) => Promise.resolve(MOCK_ASSETS), + getAccountTransactions: () => Promise.resolve(MOCK_TRANSACTIONS), + transferAsset: () => Promise.resolve() + }) + + const notaryUtilMock = { + _forceFail: false, + _MOCK_ERROR: new Error(), + baseURL: MOCK_NOTARY_IP, + signup: () => { + if (notaryUtilMock._forceFail) return new Promise(() => { throw notaryUtilMock._MOCK_ERROR }) + else return Promise.resolve() + } + } + + let types, mutations, actions, getters + + beforeEach(() => { + ({ types, mutations, actions, getters } = AccountInjector({ + '@util/iroha': irohaUtilMock, + '@util/store-util': require('@util/store-util'), + '@util/notary-util': notaryUtilMock + }).default) + + notaryUtilMock._forceFail = false + }) + + describe('Mutations', () => { + function testErrorHandling (type) { + const codes = ['Unavailable', 'Canceled'] + + codes.forEach(codeName => { + it(`${type} should treat grpc ${codeName} as a connection error`, () => { + const grpc = require('grpc-web-client').grpc + const state = {} + const error = { code: grpc.Code[codeName] } + + expect(state.connectionError).to.not.exist + + mutations[types[type]](state, error) + + expect(state.connectionError).to.equal(error) + }) + }) + + it(`${type} should not treat other errors as a connection error`, () => { + const state = {} + const error = new Error() + + expect(state.connectionError).to.not.exist + + mutations[types[type]](state, error) + + expect(state.connectionError).to.not.exist + }) + } + + it('RESET should reset the state', () => { + const state = { + accountId: randomAccountId(), + nodeIp: randomNodeIp(), + notaryIp: randomNodeIp(), + accountInfo: randomObject(), + accountQuorum: randomAmountRng(), + accountSignatories: [randomObject()], + rawAssetTransactions: randomObject(), + rawUnsignedTransactions: [randomObject()], + rawTransactions: [randomObject()], + rawPendingTransactions: [randomObject()], + assets: randomObject(), + connectionError: new Error() + } + + const expectedState = { + accountId: '', + nodeIp: MOCK_NODE_IP, + notaryIp: MOCK_NOTARY_IP, + accountInfo: {}, + accountQuorum: 0, + accountSignatories: [], + rawAssetTransactions: {}, + rawUnsignedTransactions: [], + rawTransactions: [], + rawPendingTransactions: null, + assets: [], + connectionError: null + } + + mutations[types.RESET](state) + + expect(state).to.be.deep.equal(expectedState) + }) + + it('SIGNUP_SUCCESS should not change the state', () => { + const state = {} + const params = { + username: randomAccountId().split('@')[1], + publicKey: randomPublicKey(), + privateKey: randomPrivateKey() + } + const expectedState = {} + + mutations[types.SIGNUP_SUCCESS](state, params) + + expect(state).to.be.deep.equal(expectedState) + }) + + testErrorHandling('SIGNUP_FAILURE') + + it('LOGIN_SUCCESS should set an accountId to state', () => { + const state = {} + const account = { accountId: randomAccountId(), jsonData: '{"registration_service_red@notary": {"ethereum_wallet": "0x5f3dba5e45909d1bf126aa0af0601b1a369dbfd7"}}' } + + mutations[types.LOGIN_SUCCESS](state, account) + + expect(state.accountId).to.be.equal(account.accountId) + }) + + it('LOGIN_SUCCESS should set an accountInfo to state', () => { + const state = {} + const account = { accountId: randomAccountId(), jsonData: '{"registration_service_red@notary": {"ethereum_wallet": "0x5f3dba5e45909d1bf126aa0af0601b1a369dbfd7"}}' } + + mutations[types.LOGIN_SUCCESS](state, account) + + expect(state.accountInfo).to.be.deep.equal(JSON.parse(account.jsonData)) + }) + + testErrorHandling('LOGIN_FAILURE') + testErrorHandling('LOGOUT_FAILURE') + + it('GET_ACCOUNT_ASSET_TRANSACTIONS_SUCCESS should set transactions to state', () => { + const state = { rawAssetTransactions: {} } + const assetId = randomAssetId() + const transactions = MOCK_TRANSACTIONS + + mutations[types.GET_ACCOUNT_ASSET_TRANSACTIONS_SUCCESS](state, { assetId, transactions }) + + expect(state.rawAssetTransactions) + .to.have.property(assetId) + .that.is.deep.equal(transactions) + }) + + testErrorHandling('GET_ACCOUNT_ASSET_TRANSACTIONS_FAILURE') + + it('GET_ACCOUNT_ASSETS_SUCCESS should set assets to state', () => { + const state = {} + const assets = MOCK_ASSETS + + mutations[types.GET_ACCOUNT_ASSETS_SUCCESS](state, assets) + + expect(state.assets).to.deep.equal(assets) + }) + + testErrorHandling('GET_ACCOUNT_ASSETS_FAILURE') + + it('GET_ACCOUNT_TRANSACTIONS_SUCCESS should set transactions to state', () => { + const state = { rawTransactions: {} } + const transactions = MOCK_TRANSACTIONS + + mutations[types.GET_ACCOUNT_TRANSACTIONS_SUCCESS](state, transactions) + + expect(state.rawTransactions).to.be.deep.equal(transactions) + }) + + testErrorHandling('GET_ACCOUNT_TRANSACTIONS_FAILURE') + testErrorHandling('TRANSFER_ASSET_FAILURE') + + it.skip('CREATE_SETTLEMENT') + it.skip('ACCEPT_SETTLEMENT') + it.skip('REJECT_SETTLEMENT') + it.skip('CANCEL_SETTLEMENT') + }) + + describe('Actions', () => { + describe('signup', () => { + it('should call mutations in correct order', done => { + const commit = sinon.spy() + const params = { username: randomAccountId().split('@')[1] } + actions.signup({ commit }, params) + .then(() => { + expect(commit.args).to.be.deep.equal([ + [types.SIGNUP_REQUEST], + [types.SIGNUP_SUCCESS, { + username: params.username, + ...MOCK_KEYPAIR + }] + ]) + done() + }) + .catch(done) + }) + + it('should call SIGNUP_FAILURE if notary-util fails', done => { + const commit = sinon.spy() + const params = { username: randomAccountId().split('@')[1] } + + notaryUtilMock._forceFail = true + actions.signup({ commit }, params) + .then(() => done('it should fail')) + .catch(() => { + expect(commit.args).to.be.deep.equal([ + [types.SIGNUP_REQUEST], + [types.SIGNUP_FAILURE, notaryUtilMock._MOCK_ERROR] + ]) + done() + }) + }) + }) + + describe('login', () => { + it('should call mutations in correct order', done => { + const commit = sinon.spy() + const params = { + username: randomAccountId(), + privateKey: randomPrivateKey(), + nodeIp: randomNodeIp() + } + + actions.login({ commit }, params) + .then(() => { + expect(commit.args).to.be.deep.equal([ + [types.LOGIN_REQUEST], + [types.LOGIN_SUCCESS, MOCK_ACCOUNT_RESPONSE] + ]) + done() + }) + .catch(done) + }) + }) + + describe('logout', () => { + it('should call mutations in correct order', done => { + const commit = sinon.spy() + + actions.logout({ commit }) + .then(() => { + expect(commit.args).to.deep.equal([ + [types.LOGOUT_REQUEST], + [types.RESET], + [types.LOGOUT_SUCCESS] + ]) + done() + }) + .catch(done) + }) + }) + + describe('getAccountAssetTransactions', () => { + it('should call mutations in correct order', done => { + const commit = sinon.spy() + const state = { accountId: randomAccountId() } + const params = { assetId: randomAssetId() } + const expectedResponse = { + assetId: params.assetId, + transactions: MOCK_TRANSACTIONS + } + + actions.getAccountAssetTransactions({ commit, state }, params) + .then(() => { + expect(commit.args).to.deep.equal([ + [types.GET_ACCOUNT_ASSET_TRANSACTIONS_REQUEST], + [types.GET_ACCOUNT_ASSET_TRANSACTIONS_SUCCESS, expectedResponse] + ]) + done() + }) + .catch(done) + }) + }) + + describe('getAccountAssets', () => { + it('should call mutations in correct order', done => { + const commit = sinon.spy() + const state = { accountId: randomAccountId() } + const expectedResponse = MOCK_ASSETS + + actions.getAccountAssets({ commit, state }) + .then(() => { + expect(commit.args).to.deep.equal([ + [types.GET_ACCOUNT_ASSETS_REQUEST], + [types.GET_ACCOUNT_ASSETS_SUCCESS, expectedResponse] + ]) + done() + }) + .catch(done) + }) + }) + + describe('getAccountTransactions', () => { + it('should call mutations in correct order', done => { + const commit = sinon.spy() + const state = { accountId: randomAccountId() } + const expectedResponse = MOCK_TRANSACTIONS + + actions.getAccountTransactions({ commit, state }) + .then(() => { + expect(commit.args).to.deep.equal([ + [types.GET_ACCOUNT_TRANSACTIONS_REQUEST], + [types.GET_ACCOUNT_TRANSACTIONS_SUCCESS, expectedResponse] + ]) + done() + }) + .catch(done) + }) + }) + + describe('getAllUnsignedTransactions', () => { + it.skip('should call mutations in correct order') + }) + + describe('transferAsset', () => { + it('should call mutations in correct order', done => { + const commit = sinon.spy() + const state = { accountId: randomAccountId() } + const params = { + assetId: randomAssetId(), + to: randomAccountId(), + description: randomHex(10), + amount: randomAmount() + } + + actions.transferAsset({ commit, state }, params) + .then(() => { + expect(commit.args).to.deep.equal([ + [types.TRANSFER_ASSET_REQUEST], + [types.TRANSFER_ASSET_SUCCESS] + ]) + done() + }) + .catch(done) + }) + }) + + describe('createSettlement', () => { + it.skip('should call mutations in correct order') + }) + + describe('acceptSettlement', () => { + it.skip('should call mutations in correct order') + }) + + describe('rejectSettlement', () => { + it.skip('should call mutations in correct order') + }) + + describe('cancelSettlement', () => { + it.skip('should call mutations in correct order') + }) + }) + + describe('Getters', () => { + describe('wallets', () => { + it('should return wallets transformed from raw assets', () => { + const state = { assets: MOCK_ASSETS } + const result = getters.wallets(state) + const expectedKeys = ['id', 'assetId', 'name', 'asset', 'color', 'domain', 'amount', 'precision'] + + expect(result) + .to.be.an('array') + .which.contains.something.that.has.all.keys(expectedKeys) + }) + }) + + describe('getTransactionsByAssetId', () => { + it('should return transformed transactions', () => { + const state = { rawAssetTransactions: MOCK_ASSET_TRANSACTIONS } + const result = getters.getTransactionsByAssetId(state)('omisego#test') + const expectedKeys = [ + 'amount', + 'date', + 'from', + 'to', + 'message', + 'id', + 'assetId', + 'signatures', + 'batch' + ] + + expect(result) + .to.be.an('array') + .which.contains.something.that.has.all.keys(expectedKeys) + }) + + it('should return an empty array if there is no transactions', () => { + const state = { rawAssetTransactions: {} } + const result = getters.getTransactionsByAssetId(state)('omisego#test') + + expect(result).to.be.an('array').which.is.empty + }) + }) + + describe('waitingSettlements', () => { + it.skip('should return only waiting settlements') + + it('should return an empty array if there is no transactions', () => { + const state = { rawUnsignedTransactions: [] } + const result = getters.waitingSettlements(state) + + expect(result).to.be.an('array').which.is.empty + }) + }) + + describe('resolvedSettlements', () => { + it.skip('should return only resolved settlements') + + it('should return an empty array if there is no transactions', () => { + const state = { rawTransactions: [] } + const result = getters.resolvedSettlements(state) + + expect(result).to.be.an('array').which.is.empty + }) + }) + }) +}) diff --git a/tests/unit/store/Dashboard.spec.js b/tests/unit/store/Dashboard.spec.js new file mode 100644 index 000000000..114fb1a7b --- /dev/null +++ b/tests/unit/store/Dashboard.spec.js @@ -0,0 +1,428 @@ +import chai from 'chai' +import sinon from 'sinon' +import DashboardInjector from 'inject-loader!../../../src/store/Dashboard' +import helper from '../helper' + +const { + randomAmountRng, + randomArrayElement +} = helper +const expect = chai.expect + +chai.use(require('chai-things')) + +describe('Dashboard store', () => { + let types, mutations, actions, getters + + beforeEach(() => { + ({ types, mutations, actions, getters } = DashboardInjector({ + '@util/cryptoApi-axios-util': require('@util/cryptoApi-axios-util') + }).default) + }) + + describe('Mutations', () => { + function testErrorHandling (type, state = {}) { + it(`${type} should set connectionError`, () => { + state = { ...state, connectionError: null } + const error = new Error() + expect(state.connectionError).to.be.a('null') + mutations[types[type]](state, error) + expect(state.connectionError).to.equal(error) + }) + } + + it('RESET should reset the state', () => { + const state = { + portfolio: { + assetsFullPrice: { + diff: 555, + value: 555, + percent: 555 + }, + assetsPercentage: [{}, {}, {}], + assetsHistory: [{}, {}, {}], + filter: 'ALL' + }, + assetList: [{}, {}, {}], + assetChart: { + filter: '1Y', + crypto: 'BTC', + data: [{}, {}, {}] + }, + isLoading: true, + connectionError: null + } + const expectedState = { + portfolio: { + assetsFullPrice: { + diff: 0, + value: 0, + percent: 0 + }, + assetsPercentage: [], + assetsHistory: [], + filter: '1W', + isLoading: false + }, + assetList: [], + assetChart: { + filter: '1M', + crypto: null, + data: [], + isLoading: false + }, + isLoading: false, + connectionError: null + } + mutations[types.RESET](state) + + expect(state).to.be.deep.equal(expectedState) + }) + + it('GET_PORTFOLIO_FULL_PRICE should calculte value, difference and percent difference', () => { + const today = randomAmountRng() + const prevDay = randomAmountRng() + const state = { + portfolio: { + assetsHistory: [{ + sum: prevDay + }, { + sum: today + }] + } + } + const assetsFullPrice = { + value: today.toFixed(2), + diff: (today - prevDay).toFixed(2), + percent: (100 - ((prevDay * 100) / today)).toFixed(2) + } + mutations[types.GET_PORTFOLIO_FULL_PRICE](state) + + expect(state.portfolio) + .to.have.property('assetsFullPrice') + .to.be.deep.equal(assetsFullPrice) + }) + + it('GET_PORTFOLIO_PRICE_PERCENTAGE should calculate array of objects with data for pie chart', () => { + const assets = ['BTC', 'ETH'] + const wallets = assets + .map((_, index) => ({ + amount: randomAmountRng({ max: 10 }), + color: '#00000', + asset: assets[index] + })) + const data = assets + .map((_, index) => ({ + asset: assets[index], + value: { + open: randomAmountRng({ max: 1000 }), + close: randomAmountRng({ max: 1000 }) + } + })) + const today = { + data: [...data], + sum: randomAmountRng({ min: 10000 }), + time: new Date().getTime() + } + const state = { + portfolio: { + assetsHistory: [today] + } + } + mutations[types.GET_PORTFOLIO_PRICE_PERCENTAGE](state, wallets) + + const expectedKeys = ['asset', 'color', 'price', 'percent'] + + expect(state.portfolio) + .to.have.property('assetsPercentage') + .to.be.an('array') + .which.contains.something.that.has.all.keys(expectedKeys) + }) + + it('GET_PORTFOLIO_PRICE_LIST should calculate array of objects width data for table list of cryptocurrencies', () => { + const assets = [{ + asset: 'BTC', + name: 'Bitcoin' + }, { + asset: 'ETH', + name: 'Ethereum' + }] + const wallets = assets + .map((_, index) => ({ + amount: randomAmountRng({ max: 10 }), + color: '#00000', + asset: assets[index].asset, + name: assets[index].name + })) + const data = () => assets + .map((_, index) => ({ + asset: assets[index].asset, + value: { + open: randomAmountRng({ max: 1000 }), + close: randomAmountRng({ max: 1000 }) + } + })) + const history = assets + .map(() => ({ + data: [...data()], + sum: randomAmountRng(), + time: new Date().getTime() + })) + const state = { + portfolio: { + assetsHistory: [...history] + } + } + mutations[types.GET_PORTFOLIO_PRICE_LIST](state, wallets) + const expectedKeys = ['asset', 'name', 'price', 'diff', 'percent'] + + expect(state.assetList) + .to.be.an('array') + .which.contains.something.that.has.all.keys(expectedKeys) + }) + + it('SELECT_CHART_FILTER should change filter of chart', () => { + const filter = randomArrayElement(['1Y', '1M', '1W', '1D', '1H']) + const state = { assetChart: {} } + mutations[types.SELECT_CHART_FILTER](state, filter) + expect(state.assetChart) + .to.have.property('filter') + .to.be.deep.equal(filter) + }) + + it('SELECT_CHART_CRYPTO should change cryptocurrency of chart', () => { + const crypto = randomArrayElement(['BTC', 'ETH', 'XRP']) + const state = { assetChart: {} } + mutations[types.SELECT_CHART_CRYPTO](state, crypto) + expect(state.assetChart) + .to.have.property('crypto') + .to.be.equal(crypto) + }) + + it('GET_PRICE_BY_FILTER_SUCCESS should set data', () => { + const size = randomAmountRng({ max: 700 }) + const data = new Array(size) + .fill(null) + .map(() => ({ + open: randomAmountRng(), + close: randomAmountRng(), + low: randomAmountRng(), + high: randomAmountRng(), + time: new Date().getTime(), + volumefrom: randomAmountRng(), + volumeto: randomAmountRng() + })) + const state = { assetChart: { + isLoading: true + } } + mutations[types.GET_PRICE_BY_FILTER_SUCCESS](state, data) + + expect(state.assetChart) + .to.have.property('data') + .to.be.deep.equal(data) + + expect(state.assetChart) + .to.have.property('isLoading') + .to.be.equal(false) + }) + + testErrorHandling('GET_PRICE_BY_FILTER_FAILURE', { assetChart: { isLoading: true } }) + + it('GET_PORTFOLIO_HISTORY_SUCCESS should set data', () => { + const size = randomAmountRng({ max: 50 }) + const history = new Array(size) + .fill(null) + .map(() => ({ + data: [], + sum: randomAmountRng(), + time: new Date().getTime() + })) + const state = { portfolio: { + isLoading: true + } } + mutations[types.GET_PORTFOLIO_HISTORY_SUCCESS](state, history) + + expect(state.portfolio) + .to.have.property('assetsHistory') + .to.be.deep.equal(history) + + expect(state.portfolio) + .to.have.property('isLoading') + .to.be.equal(false) + }) + + testErrorHandling('GET_PORTFOLIO_HISTORY_FAILURE', { portfolio: { isLoading: true } }) + + it('LOAD_DASHBOARD_SUCCESS should change lodaing state to TRUE', () => { + const state = { + isLoading: true + } + const expectedState = { + isLoading: false + } + mutations[types.LOAD_DASHBOARD_SUCCESS](state) + + expect(state).to.be.deep.equal(expectedState) + }) + + testErrorHandling('LOAD_DASHBOARD_FAILURE') + }) + + describe('Actions', () => { + describe('loadDashboard', () => { + it.skip('should call mutations in correct order') + }) + + describe('getPortfolioHistory', () => { + it('should call mutations in correct order', async () => { + const assets = ['BTC', 'ETH'] + const wallets = assets + .map((_, index) => ({ + amount: randomAmountRng({ max: 10 }), + color: '#00000', + asset: assets[index] + })) + const commit = sinon.spy() + const getters = { + wallets, + settingsView: { + fiat: randomArrayElement(['USD', 'EUR', 'RUB']), + crypto: randomArrayElement(['BTC', 'ETH', 'XRP']) + } + } + const filter = randomArrayElement(['1Y', '1M', '1W', '1D', '1H']) + await actions.getPortfolioHistory({ commit, getters }, { filter }) + + const response = commit.thirdCall.args[1] + + expect(commit.args).to.deep.equal([ + [types.SELECT_PORTFOLIO_FILTER, filter], + [types.GET_PORTFOLIO_HISTORY_REQUEST], + [types.GET_PORTFOLIO_HISTORY_SUCCESS, response] + ]) + }) + }) + + describe('getPriceByFilter', () => { + it('should call mutations in correct order', async () => { + const commit = sinon.spy() + const data = { + filter: randomArrayElement(['1Y', '1M', '1W', '1D', '1H']), + crypto: randomArrayElement(['BTC', 'ETH', 'XRP']) + } + const getters = { + wallets: [], + settingsView: { + fiat: randomArrayElement(['USD', 'EUR', 'RUB']), + crypto: randomArrayElement(['BTC', 'ETH', 'XRP']) + }, + portfolioChart: { + filter: data.filter, + crypto: data.crypto + } + } + const state = { assetChart: {} } + await actions.getPriceByFilter({ commit, getters, state }, data) + + const response = commit.getCall(3).args[1] + + expect(commit.args).to.deep.equal([ + [types.SELECT_CHART_CRYPTO, data.crypto], + [types.SELECT_CHART_FILTER, data.filter], + [types.GET_PRICE_BY_FILTER_REQUEST], + [types.GET_PRICE_BY_FILTER_SUCCESS, response] + ]) + }) + }) + }) + + describe('Getters', () => { + describe('portfolioPrice', () => { + it('should return object that haves diff, value, percent', () => { + const state = { + portfolio: { + assetsFullPrice: { + diff: randomAmountRng(), + value: randomAmountRng(), + percent: randomAmountRng() + } + } + } + const result = getters.portfolioPrice(state) + expect(result) + .to.have.property('diff') + .to.be.equal(state.portfolio.assetsFullPrice.diff) + expect(result) + .to.have.property('value') + .to.be.equal(state.portfolio.assetsFullPrice.value) + expect(result) + .to.have.property('percent') + .to.be.equal(state.portfolio.assetsFullPrice.percent) + }) + }) + describe('portfolioPercent', () => { + it('should return empty array', () => { + const state = { + portfolio: { + assetsPercentage: [] + } + } + const result = getters.portfolioPercent(state) + expect(result).to.be.an('array').which.is.empty + }) + }) + describe('portfolioChart', () => { + it('should return object that haves data, current filter and cryptocurrency', () => { + const state = { + assetChart: { + filter: '1Y', + crypto: 'BTC', + data: [] + } + } + const result = getters.portfolioChart(state) + expect(result) + .to.have.property('filter') + .to.be.equal('1Y') + expect(result) + .to.have.property('crypto') + .to.be.equal('BTC') + expect(result) + .to.have.property('data') + .to.be.an('array').which.is.empty + }) + }) + describe('portfolioHistory', () => { + it('should return empty array', () => { + const state = { + portfolio: { + assetsHistory: [] + } + } + const result = getters.portfolioHistory(state) + expect(result).to.be.an('array').which.is.empty + }) + }) + describe('portfolioList', () => { + it('should return empty array', () => { + const state = { assetList: [] } + const result = getters.portfolioList(state) + expect(result).to.be.an('array').which.is.empty + }) + }) + describe('connectionError', () => { + it('should return null', () => { + const state = { connectionError: null } + const result = getters.connectionError(state) + expect(result).to.be.a('null') + }) + }) + describe('isDashboardLoading', () => { + it('should return false', () => { + const state = { isLoading: false } + const result = getters.isDashboardLoading(state) + expect(result).to.be.false + }) + }) + }) +}) diff --git a/tests/unit/store/Wallets.spec.js b/tests/unit/store/Wallets.spec.js new file mode 100644 index 000000000..543949e20 --- /dev/null +++ b/tests/unit/store/Wallets.spec.js @@ -0,0 +1,235 @@ +import chai from 'chai' +import sinon from 'sinon' +import WalletInjector from 'inject-loader!../../../src/store/Wallet' +import helper from '../helper' + +const { + randomAmountRng, + randomArrayElement +} = helper +const expect = chai.expect + +chai.use(require('chai-things')) + +describe('Wallet store', () => { + let types, mutations, actions, getters + + beforeEach(() => { + ({ types, mutations, actions, getters } = WalletInjector({ + '@util/cryptoApi-axios-util': require('../../../src/util/cryptoApi-axios-util') + }).default) + }) + + describe('Mutations', () => { + it('RESET should reset the state', () => { + const state = { + cryptoInfo: { + current: { + fiat: randomAmountRng(), + fiat_change: randomAmountRng(), + crypto: randomAmountRng(), + crypto_change: randomAmountRng() + }, + market: { + cap: { + fiat: randomAmountRng(), + crypto: randomAmountRng() + }, + volume: { + fiat: randomAmountRng(), + crypto: randomAmountRng() + }, + supply: randomAmountRng() + }, + isLoading: true + }, + connectionError: new Error() + } + const expectedState = { + cryptoInfo: { + current: { + fiat: 0, + fiat_change: 0, + crypto: 0, + crypto_change: 0 + }, + market: { + cap: { + fiat: 0, + crypto: 0 + }, + volume: { + fiat: 0, + crypto: 0 + }, + supply: 0 + }, + isLoading: false + }, + connectionError: null + } + mutations[types.RESET](state) + + expect(state).to.be.deep.equal(expectedState) + }) + + it('GET_CRYPTO_FULL_DATA_REQUEST should set loading to true', () => { + const state = { cryptoInfo: { isLoading: false } } + const expectedState = { cryptoInfo: { isLoading: true } } + mutations[types.GET_CRYPTO_FULL_DATA_REQUEST](state) + expect(state).to.be.deep.equal(expectedState) + }) + + it('GET_CRYPTO_FULL_DATA_SUCCESS should set cryptoInfo data', () => { + const state = { cryptoInfo: {} } + const number = randomAmountRng() + const price = randomAmountRng() + const assets = ['BTC', 'ETH'] + const fiats = ['USD', 'EUR'] + const asset = randomArrayElement(assets) + const fiat = randomArrayElement(fiats) + const currencies = { + fiat, + crypto: asset + } + const historicalDataFiat = { + Data: [ + { close: number }, + { close: number } + ] + } + const historicalDataCrypto = { + Data: [ + { close: number }, + { close: number } + ] + } + const volumeData = { + Data: [ + { volume: number }, + { volume: number } + ] + } + const priceData = { + RAW: { + test: { + [fiat]: { + PRICE: price, + CHANGEDAY: number, + MKTCAP: number, + SUPPLY: number, + TOTALVOLUME24HTO: number, + TOTALVOLUME24H: number + }, + [asset]: { + PRICE: price, + CHANGEPCTDAY: number + } + } + } + } + const expectedState = { + cryptoInfo: { + current: { + fiat: price, + fiat_change: 0, + crypto: price, + crypto_change: 0 + }, + market: { + cap: { + fiat: number, + crypto: number + }, + volume: { + fiat: price * (number * 2), + crypto: number * 2 + }, + supply: number + }, + isLoading: false + } + } + mutations[types.GET_CRYPTO_FULL_DATA_SUCCESS](state, { + historicalDataFiat, + historicalDataCrypto, + volumeData, + priceData, + currencies + }) + expect(state).to.be.deep.equal(expectedState) + }) + + it('GET_CRYPTO_FULL_DATA_FAILURE should set loading to fasle and set error', () => { + const state = { cryptoInfo: { isLoading: true } } + const err = new Error() + const expectedState = { + cryptoInfo: { isLoading: false }, + connectionError: err + } + mutations[types.GET_CRYPTO_FULL_DATA_FAILURE](state, err) + expect(state).to.be.deep.equal(expectedState) + }) + }) + + describe('Actions', () => { + describe('getCryptoFullData', () => { + it('should call mutations in correct order', async () => { + const assets = ['BTC', 'ETH'] + const fiats = ['USD', 'EUR'] + const filter = '1D' + const asset = randomArrayElement(assets) + const fiat = randomArrayElement(fiats) + const getters = { + settingsView: { + fiat, + crypto: asset + } + } + const commit = sinon.spy() + await actions.getCryptoFullData({ commit, getters }, { filter, asset }) + const response = commit.secondCall.args[1] + expect(commit.args).to.deep.equal([ + [types.GET_CRYPTO_FULL_DATA_REQUEST], + [types.GET_CRYPTO_FULL_DATA_SUCCESS, response] + ]) + }) + }) + }) + + describe('Getters', () => { + describe('cryptoInfo', () => { + it('should return object that haves market prices', () => { + const state = { + cryptoInfo: { + current: { + fiat: randomAmountRng(), + fiat_change: randomAmountRng(), + crypto: randomAmountRng(), + crypto_change: randomAmountRng() + }, + market: { + cap: { + fiat: randomAmountRng(), + crypto: randomAmountRng() + }, + volume: { + fiat: randomAmountRng(), + crypto: randomAmountRng() + }, + supply: randomAmountRng() + }, + isLoading: false + } + } + const result = getters.cryptoInfo(state) + expect(result) + .to.have.property('current') + .to.be.deep.equal(state.cryptoInfo.current) + expect(result) + .to.have.property('market') + .to.be.equal(state.cryptoInfo.market) + }) + }) + }) +}) diff --git a/tests/unit/util/report-util.spec.js b/tests/unit/util/report-util.spec.js new file mode 100644 index 000000000..145dd53b3 --- /dev/null +++ b/tests/unit/util/report-util.spec.js @@ -0,0 +1,64 @@ +import chai from 'chai' +import reportUtilInjector from 'inject-loader!@util/report-util.js' +import { format as formatDateOriginal } from 'date-fns' + +const expect = chai.expect + +describe('report-util', () => { + const { generateReportData } = reportUtilInjector({ + 'pdfmake-lite/build/pdfmake.min': {} + }) + + describe('generateReportData', () => { + const MOCK_REPORT = require('../fixtures/report.json') + + /** + * Force to format a date as UTC+0 for testing. + * + * e.g. + * formatDateWith(1534828440000, 'MMM. D, HH:mm') == 'Aug. 21, 05:14' + * formatDateWith('Aug. 21, 05:14', 'MMM. D, HH:mm') == 'Aug. 21, 05:14' + * formatDateWith('Aug. 1', 'MMM. D, HH:mm') == 'Aug. 1, 00:00' + */ + const formatDateWith = function (date, formatString) { + const isUnixTimestamp = Number.isFinite(date) + const tzOffsetMilliseconds = new Date().getTimezoneOffset() * 60 * 1000 + + // Once parse the passed date with the environment's timezone. + const dateWithOffset = new Date(date) + + const superficialUnixTimestamp = isUnixTimestamp + ? dateWithOffset.getTime() + tzOffsetMilliseconds + : dateWithOffset.getTime() + + // Technically, it is not UTC because it includes a timezone offset, + // but its date and time parts are superficially the same as UTC. + // + // dateSuperficialUTC = Tue Aug 21 2018 13:49:53 GMT+0900 (GMT+09:00) + // ^^^^^^^^^^^^^^^^^^^^^^^^ + // ^here is the same as UTC + // + const dateSuperficialUTC = new Date(superficialUnixTimestamp) + + return formatDateOriginal(dateSuperficialUTC, formatString) + } + const formatDate = (date) => formatDateWith(date, 'MMM. D, HH:mm') + + it('should throw an error against lack of parameters', () => { + const invalidParams = {} + + expect(() => generateReportData(invalidParams)).to.throw() + }) + + it('should return the correct data', () => { + const params = { + formatDate, + formatDateWith, + ...MOCK_REPORT.params + } + const reportData = generateReportData(params) + + expect(reportData).to.deep.include(MOCK_REPORT.expected) + }) + }) +}) diff --git a/vue.config.js b/vue.config.js index c52805879..740399e2d 100644 --- a/vue.config.js +++ b/vue.config.js @@ -1,11 +1,31 @@ const path = require('path') +const rules = [] + +if (process.env.NODE_ENV === 'test') { + rules.push({ + test: /\.(js|ts)$/, + include: path.resolve('src'), + loader: 'istanbul-instrumenter-loader', + query: { + esModules: true + } + }) +} + module.exports = { + chainWebpack: config => { + config.resolve.alias + .set('@util', path.resolve(__dirname, 'src/util')) + .set('@router', path.resolve(__dirname, 'src/router.js')) + config.plugin('html').tap(args => { + args[0].chunksSortMode = 'none' + return args + }) + }, configureWebpack: { - resolve: { - alias: { - 'util': path.resolve(__dirname, 'src/util') - } + module: { + rules: rules } } } diff --git a/yarn.lock b/yarn.lock index c6378f3c0..4e610fbf2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,31 +2,29 @@ # yarn lockfile v1 -"7zip-bin@~4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-4.0.2.tgz#6abbdc22f33cab742053777a26db2e25ca527179" - -"7zip@0.0.6": - version "0.0.6" - resolved "https://registry.yarnpkg.com/7zip/-/7zip-0.0.6.tgz#9cafb171af82329490353b4816f03347aa150a30" - "@babel/code-frame@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9" dependencies: "@babel/highlight" "7.0.0-beta.44" -"@babel/code-frame@7.0.0-beta.47", "@babel/code-frame@^7.0.0-beta.35": +"@babel/code-frame@7.0.0-beta.47": version "7.0.0-beta.47" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.47.tgz#d18c2f4c4ba8d093a2bcfab5616593bfe2441a27" dependencies: "@babel/highlight" "7.0.0-beta.47" -"@babel/code-frame@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.49.tgz#becd805482734440c9d137e46d77340e64d7f51b" +"@babel/code-frame@7.0.0-beta.51": + version "7.0.0-beta.51" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.51.tgz#bd71d9b192af978df915829d39d4094456439a0c" dependencies: - "@babel/highlight" "7.0.0-beta.49" + "@babel/highlight" "7.0.0-beta.51" + +"@babel/code-frame@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" + dependencies: + "@babel/highlight" "^7.0.0" "@babel/core@7.0.0-beta.47": version "7.0.0-beta.47" @@ -48,22 +46,40 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.0.0-beta.47": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.0.0-beta.49.tgz#73de2081dd652489489f0cb4aa97829a1133314e" - dependencies: - "@babel/code-frame" "7.0.0-beta.49" - "@babel/generator" "7.0.0-beta.49" - "@babel/helpers" "7.0.0-beta.49" - "@babel/parser" "7.0.0-beta.49" - "@babel/template" "7.0.0-beta.49" - "@babel/traverse" "7.0.0-beta.49" - "@babel/types" "7.0.0-beta.49" +"@babel/core@7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.0.1.tgz#406658caed0e9686fa4feb5c2f3cefb6161c0f41" + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.0.0" + "@babel/helpers" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" convert-source-map "^1.1.0" debug "^3.1.0" json5 "^0.5.0" - lodash "^4.17.5" - micromatch "^2.3.11" + lodash "^4.17.10" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.0.0.tgz#0cb0c0fd2e78a0a2bec97698f549ae9ce0b99515" + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.0.0" + "@babel/helpers" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + convert-source-map "^1.1.0" + debug "^3.1.0" + json5 "^0.5.0" + lodash "^4.17.10" resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" @@ -88,27 +104,37 @@ source-map "^0.5.0" trim-right "^1.0.1" -"@babel/generator@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.49.tgz#e9cffda913996accec793bbc25ab91bc19d0bf7a" +"@babel/generator@7.0.0-beta.51": + version "7.0.0-beta.51" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.51.tgz#6c7575ffde761d07485e04baedc0392c6d9e30f6" dependencies: - "@babel/types" "7.0.0-beta.49" + "@babel/types" "7.0.0-beta.51" jsesc "^2.5.1" lodash "^4.17.5" source-map "^0.5.0" trim-right "^1.0.1" +"@babel/generator@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0.tgz#1efd58bffa951dc846449e58ce3a1d7f02d393aa" + dependencies: + "@babel/types" "^7.0.0" + jsesc "^2.5.1" + lodash "^4.17.10" + source-map "^0.5.0" + trim-right "^1.0.1" + "@babel/helper-annotate-as-pure@7.0.0-beta.47": version "7.0.0-beta.47" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0-beta.47.tgz#354fb596055d9db369211bf075f0d5e93904d6f6" dependencies: "@babel/types" "7.0.0-beta.47" -"@babel/helper-annotate-as-pure@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0-beta.49.tgz#7d9005d54fe7ad6cb876790251e75575419186e9" +"@babel/helper-annotate-as-pure@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" dependencies: - "@babel/types" "7.0.0-beta.49" + "@babel/types" "^7.0.0" "@babel/helper-builder-binary-assignment-operator-visitor@7.0.0-beta.47": version "7.0.0-beta.47" @@ -117,12 +143,19 @@ "@babel/helper-explode-assignable-expression" "7.0.0-beta.47" "@babel/types" "7.0.0-beta.47" -"@babel/helper-builder-binary-assignment-operator-visitor@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.0.0-beta.49.tgz#c62dd5042b54a590d5e71e6020c46b91d6c6c875" +"@babel/helper-builder-binary-assignment-operator-visitor@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.0.0.tgz#ba26336beb2abb547d58b6eba5b84d77975a39eb" + dependencies: + "@babel/helper-explode-assignable-expression" "^7.0.0" + "@babel/types" "^7.0.0" + +"@babel/helper-builder-react-jsx@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz#fa154cb53eb918cf2a9a7ce928e29eb649c5acdb" dependencies: - "@babel/helper-explode-assignable-expression" "7.0.0-beta.49" - "@babel/types" "7.0.0-beta.49" + "@babel/types" "^7.0.0" + esutils "^2.0.0" "@babel/helper-call-delegate@7.0.0-beta.47": version "7.0.0-beta.47" @@ -132,13 +165,13 @@ "@babel/traverse" "7.0.0-beta.47" "@babel/types" "7.0.0-beta.47" -"@babel/helper-call-delegate@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.0.0-beta.49.tgz#4b5d41782a683d5dc6497834a32310a8d02a3af9" +"@babel/helper-call-delegate@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.0.0.tgz#e036956bb33d76e59c07a04a1fff144e9f62ab78" dependencies: - "@babel/helper-hoist-variables" "7.0.0-beta.49" - "@babel/traverse" "7.0.0-beta.49" - "@babel/types" "7.0.0-beta.49" + "@babel/helper-hoist-variables" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" "@babel/helper-define-map@7.0.0-beta.47": version "7.0.0-beta.47" @@ -148,13 +181,13 @@ "@babel/types" "7.0.0-beta.47" lodash "^4.17.5" -"@babel/helper-define-map@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.0.0-beta.49.tgz#4ea067aa720937240df395cd073c24fcad9c2b3b" +"@babel/helper-define-map@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.0.0.tgz#a5684dd2adf30f0137cf9b0bde436f8c2db17225" dependencies: - "@babel/helper-function-name" "7.0.0-beta.49" - "@babel/types" "7.0.0-beta.49" - lodash "^4.17.5" + "@babel/helper-function-name" "^7.0.0" + "@babel/types" "^7.0.0" + lodash "^4.17.10" "@babel/helper-explode-assignable-expression@7.0.0-beta.47": version "7.0.0-beta.47" @@ -163,12 +196,12 @@ "@babel/traverse" "7.0.0-beta.47" "@babel/types" "7.0.0-beta.47" -"@babel/helper-explode-assignable-expression@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.0.0-beta.49.tgz#2bfb95df7ec130735bf655e44a217a70d3b13e93" +"@babel/helper-explode-assignable-expression@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.0.0.tgz#fdfa4c88603ae3e954d0fc3244d5ca82fb468497" dependencies: - "@babel/traverse" "7.0.0-beta.49" - "@babel/types" "7.0.0-beta.49" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" "@babel/helper-function-name@7.0.0-beta.44": version "7.0.0-beta.44" @@ -186,13 +219,21 @@ "@babel/template" "7.0.0-beta.47" "@babel/types" "7.0.0-beta.47" -"@babel/helper-function-name@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.49.tgz#a25c1119b9f035278670126e0225c03041c8de32" +"@babel/helper-function-name@7.0.0-beta.51": + version "7.0.0-beta.51" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.51.tgz#21b4874a227cf99ecafcc30a90302da5a2640561" dependencies: - "@babel/helper-get-function-arity" "7.0.0-beta.49" - "@babel/template" "7.0.0-beta.49" - "@babel/types" "7.0.0-beta.49" + "@babel/helper-get-function-arity" "7.0.0-beta.51" + "@babel/template" "7.0.0-beta.51" + "@babel/types" "7.0.0-beta.51" + +"@babel/helper-function-name@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0.tgz#a68cc8d04420ccc663dd258f9cc41b8261efa2d4" + dependencies: + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/types" "^7.0.0" "@babel/helper-get-function-arity@7.0.0-beta.44": version "7.0.0-beta.44" @@ -206,11 +247,17 @@ dependencies: "@babel/types" "7.0.0-beta.47" -"@babel/helper-get-function-arity@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.49.tgz#cf5023f32d2ad92d087374939cec0951bcb51441" +"@babel/helper-get-function-arity@7.0.0-beta.51": + version "7.0.0-beta.51" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.51.tgz#3281b2d045af95c172ce91b20825d85ea4676411" + dependencies: + "@babel/types" "7.0.0-beta.51" + +"@babel/helper-get-function-arity@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" dependencies: - "@babel/types" "7.0.0-beta.49" + "@babel/types" "^7.0.0" "@babel/helper-hoist-variables@7.0.0-beta.47": version "7.0.0-beta.47" @@ -218,11 +265,11 @@ dependencies: "@babel/types" "7.0.0-beta.47" -"@babel/helper-hoist-variables@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0-beta.49.tgz#d9740651c93bb4fa79c1b6bac634051fc4d03ff5" +"@babel/helper-hoist-variables@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz#46adc4c5e758645ae7a45deb92bab0918c23bb88" dependencies: - "@babel/types" "7.0.0-beta.49" + "@babel/types" "^7.0.0" "@babel/helper-member-expression-to-functions@7.0.0-beta.47": version "7.0.0-beta.47" @@ -230,11 +277,11 @@ dependencies: "@babel/types" "7.0.0-beta.47" -"@babel/helper-member-expression-to-functions@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0-beta.49.tgz#2f642b003d45155e0a9e7a4ad0e688d91bbc1583" +"@babel/helper-member-expression-to-functions@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" dependencies: - "@babel/types" "7.0.0-beta.49" + "@babel/types" "^7.0.0" "@babel/helper-module-imports@7.0.0-beta.35": version "7.0.0-beta.35" @@ -250,12 +297,11 @@ "@babel/types" "7.0.0-beta.47" lodash "^4.17.5" -"@babel/helper-module-imports@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.49.tgz#41d7d59891016c493432a46f7464446552890c75" +"@babel/helper-module-imports@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" dependencies: - "@babel/types" "7.0.0-beta.49" - lodash "^4.17.5" + "@babel/types" "^7.0.0" "@babel/helper-module-transforms@7.0.0-beta.47": version "7.0.0-beta.47" @@ -268,16 +314,16 @@ "@babel/types" "7.0.0-beta.47" lodash "^4.17.5" -"@babel/helper-module-transforms@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.0.0-beta.49.tgz#fc660bda9d6497412e18776a71aed9a9e2e5f7ad" +"@babel/helper-module-transforms@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.0.0.tgz#b01ee7d543e81e8c3fc404b19c9f26acb6e4cf4c" dependencies: - "@babel/helper-module-imports" "7.0.0-beta.49" - "@babel/helper-simple-access" "7.0.0-beta.49" - "@babel/helper-split-export-declaration" "7.0.0-beta.49" - "@babel/template" "7.0.0-beta.49" - "@babel/types" "7.0.0-beta.49" - lodash "^4.17.5" + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-simple-access" "^7.0.0" + "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/types" "^7.0.0" + lodash "^4.17.10" "@babel/helper-optimise-call-expression@7.0.0-beta.47": version "7.0.0-beta.47" @@ -285,19 +331,19 @@ dependencies: "@babel/types" "7.0.0-beta.47" -"@babel/helper-optimise-call-expression@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0-beta.49.tgz#a98b43c3a6c54bef48f87b10dc4568dec0b41bf7" +"@babel/helper-optimise-call-expression@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" dependencies: - "@babel/types" "7.0.0-beta.49" + "@babel/types" "^7.0.0" "@babel/helper-plugin-utils@7.0.0-beta.47": version "7.0.0-beta.47" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0-beta.47.tgz#4f564117ec39f96cf60fafcde35c9ddce0e008fd" -"@babel/helper-plugin-utils@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0-beta.49.tgz#0e9fcbb834f878bb365d2a8ea90eee21ba3ccd23" +"@babel/helper-plugin-utils@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" "@babel/helper-regex@7.0.0-beta.47": version "7.0.0-beta.47" @@ -305,11 +351,11 @@ dependencies: lodash "^4.17.5" -"@babel/helper-regex@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0-beta.49.tgz#ff244f19c2a2f167ff4b3165a636b08fd641816b" +"@babel/helper-regex@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0.tgz#2c1718923b57f9bbe64705ffe5640ac64d9bdb27" dependencies: - lodash "^4.17.5" + lodash "^4.17.10" "@babel/helper-remap-async-to-generator@7.0.0-beta.47": version "7.0.0-beta.47" @@ -321,15 +367,15 @@ "@babel/traverse" "7.0.0-beta.47" "@babel/types" "7.0.0-beta.47" -"@babel/helper-remap-async-to-generator@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.0.0-beta.49.tgz#b3fdaab412784d7e8657bacab286923efc9498b8" +"@babel/helper-remap-async-to-generator@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.0.0.tgz#6512273c2feb91587822335cf913fdf680c26901" dependencies: - "@babel/helper-annotate-as-pure" "7.0.0-beta.49" - "@babel/helper-wrap-function" "7.0.0-beta.49" - "@babel/template" "7.0.0-beta.49" - "@babel/traverse" "7.0.0-beta.49" - "@babel/types" "7.0.0-beta.49" + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-wrap-function" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" "@babel/helper-replace-supers@7.0.0-beta.47": version "7.0.0-beta.47" @@ -340,14 +386,14 @@ "@babel/traverse" "7.0.0-beta.47" "@babel/types" "7.0.0-beta.47" -"@babel/helper-replace-supers@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.0.0-beta.49.tgz#e7444c718057f6a0a3645caf8e78fb546ffb0d9f" +"@babel/helper-replace-supers@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.0.0.tgz#b6f21237280e0be54f591f63a464b66627ced707" dependencies: - "@babel/helper-member-expression-to-functions" "7.0.0-beta.49" - "@babel/helper-optimise-call-expression" "7.0.0-beta.49" - "@babel/traverse" "7.0.0-beta.49" - "@babel/types" "7.0.0-beta.49" + "@babel/helper-member-expression-to-functions" "^7.0.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" "@babel/helper-simple-access@7.0.0-beta.47": version "7.0.0-beta.47" @@ -357,13 +403,12 @@ "@babel/types" "7.0.0-beta.47" lodash "^4.17.5" -"@babel/helper-simple-access@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.0.0-beta.49.tgz#97a41e2789a9bf8a6c30536a258b79e7444c5d82" +"@babel/helper-simple-access@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.0.0.tgz#ff36a27983ae4c27122da2f7f294dced80ecbd08" dependencies: - "@babel/template" "7.0.0-beta.49" - "@babel/types" "7.0.0-beta.49" - lodash "^4.17.5" + "@babel/template" "^7.0.0" + "@babel/types" "^7.0.0" "@babel/helper-split-export-declaration@7.0.0-beta.44": version "7.0.0-beta.44" @@ -377,11 +422,17 @@ dependencies: "@babel/types" "7.0.0-beta.47" -"@babel/helper-split-export-declaration@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.49.tgz#40d78eda0968d011b1c52866e5746cfb23e57548" +"@babel/helper-split-export-declaration@7.0.0-beta.51": + version "7.0.0-beta.51" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.51.tgz#8a6c3f66c4d265352fc077484f9f6e80a51ab978" + dependencies: + "@babel/types" "7.0.0-beta.51" + +"@babel/helper-split-export-declaration@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813" dependencies: - "@babel/types" "7.0.0-beta.49" + "@babel/types" "^7.0.0" "@babel/helper-wrap-function@7.0.0-beta.47": version "7.0.0-beta.47" @@ -392,14 +443,14 @@ "@babel/traverse" "7.0.0-beta.47" "@babel/types" "7.0.0-beta.47" -"@babel/helper-wrap-function@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.0.0-beta.49.tgz#385591460b4d93ef96ee3819539c0cdc9bbd4758" +"@babel/helper-wrap-function@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.0.0.tgz#1c8e42a2cfb0808e3140189dfe9490782a6fa740" dependencies: - "@babel/helper-function-name" "7.0.0-beta.49" - "@babel/template" "7.0.0-beta.49" - "@babel/traverse" "7.0.0-beta.49" - "@babel/types" "7.0.0-beta.49" + "@babel/helper-function-name" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" "@babel/helpers@7.0.0-beta.47": version "7.0.0-beta.47" @@ -409,13 +460,13 @@ "@babel/traverse" "7.0.0-beta.47" "@babel/types" "7.0.0-beta.47" -"@babel/helpers@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.0.0-beta.49.tgz#054d84032d4e94286a80586500068e41005a51d0" +"@babel/helpers@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.0.0.tgz#7213388341eeb07417f44710fd7e1d00acfa6ac0" dependencies: - "@babel/template" "7.0.0-beta.49" - "@babel/traverse" "7.0.0-beta.49" - "@babel/types" "7.0.0-beta.49" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" "@babel/highlight@7.0.0-beta.44": version "7.0.0-beta.44" @@ -433,17 +484,29 @@ esutils "^2.0.2" js-tokens "^3.0.0" -"@babel/highlight@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.49.tgz#96bdc6b43e13482012ba6691b1018492d39622cc" +"@babel/highlight@7.0.0-beta.51": + version "7.0.0-beta.51" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.51.tgz#e8844ae25a1595ccfd42b89623b4376ca06d225d" dependencies: chalk "^2.0.0" esutils "^2.0.2" js-tokens "^3.0.0" -"@babel/parser@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.0.0-beta.49.tgz#944d0c5ba2812bb159edbd226743afd265179bdc" +"@babel/highlight@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@babel/parser@7.0.0-beta.51": + version "7.0.0-beta.51" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.0.0-beta.51.tgz#27cec2df409df60af58270ed8f6aa55409ea86f6" + +"@babel/parser@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.0.0.tgz#697655183394facffb063437ddf52c0277698775" "@babel/plugin-proposal-async-generator-functions@7.0.0-beta.47": version "7.0.0-beta.47" @@ -453,13 +516,13 @@ "@babel/helper-remap-async-to-generator" "7.0.0-beta.47" "@babel/plugin-syntax-async-generators" "7.0.0-beta.47" -"@babel/plugin-proposal-async-generator-functions@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.0.0-beta.49.tgz#8761a5e2d8b5251e70df28f4d0aa64aa28a596b1" +"@babel/plugin-proposal-async-generator-functions@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.0.0.tgz#5d1eb6b44fd388b97f964350007ab9da090b1d70" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.49" - "@babel/helper-remap-async-to-generator" "7.0.0-beta.49" - "@babel/plugin-syntax-async-generators" "7.0.0-beta.49" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.0.0" + "@babel/plugin-syntax-async-generators" "^7.0.0" "@babel/plugin-proposal-class-properties@7.0.0-beta.47": version "7.0.0-beta.47" @@ -477,27 +540,12 @@ "@babel/helper-plugin-utils" "7.0.0-beta.47" "@babel/plugin-syntax-decorators" "7.0.0-beta.47" -"@babel/plugin-proposal-export-namespace-from@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.0.0-beta.47.tgz#38171dd0fd5f54aee377d338ed41bb92e25d6720" - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/plugin-syntax-export-namespace-from" "7.0.0-beta.47" - -"@babel/plugin-proposal-function-sent@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-function-sent/-/plugin-proposal-function-sent-7.0.0-beta.47.tgz#3ad46c04a277a887731f21843013292d254f7ba9" - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/helper-wrap-function" "7.0.0-beta.47" - "@babel/plugin-syntax-function-sent" "7.0.0-beta.47" - -"@babel/plugin-proposal-numeric-separator@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.0.0-beta.47.tgz#3ace5cbacb62c3fa223c3c0b66c0c16e63a8e259" +"@babel/plugin-proposal-json-strings@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.0.0.tgz#3b4d7b5cf51e1f2e70f52351d28d44fc2970d01e" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/plugin-syntax-numeric-separator" "7.0.0-beta.47" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-json-strings" "^7.0.0" "@babel/plugin-proposal-object-rest-spread@7.0.0-beta.47": version "7.0.0-beta.47" @@ -506,12 +554,12 @@ "@babel/helper-plugin-utils" "7.0.0-beta.47" "@babel/plugin-syntax-object-rest-spread" "7.0.0-beta.47" -"@babel/plugin-proposal-object-rest-spread@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0-beta.49.tgz#6d0cd60f7a7bd7c444a371c4e9470bff02f5777c" +"@babel/plugin-proposal-object-rest-spread@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0.tgz#9a17b547f64d0676b6c9cecd4edf74a82ab85e7e" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.49" - "@babel/plugin-syntax-object-rest-spread" "7.0.0-beta.49" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" "@babel/plugin-proposal-optional-catch-binding@7.0.0-beta.47": version "7.0.0-beta.47" @@ -520,19 +568,12 @@ "@babel/helper-plugin-utils" "7.0.0-beta.47" "@babel/plugin-syntax-optional-catch-binding" "7.0.0-beta.47" -"@babel/plugin-proposal-optional-catch-binding@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0-beta.49.tgz#1f53d36785101d5eb4b55d65686aa2b39fa21c4b" - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.49" - "@babel/plugin-syntax-optional-catch-binding" "7.0.0-beta.49" - -"@babel/plugin-proposal-throw-expressions@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-throw-expressions/-/plugin-proposal-throw-expressions-7.0.0-beta.47.tgz#9a67f8b0852b4b0b255eff5d6d25fa436928424f" +"@babel/plugin-proposal-optional-catch-binding@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0.tgz#b610d928fe551ff7117d42c8bb410eec312a6425" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/plugin-syntax-throw-expressions" "7.0.0-beta.47" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.0.0" "@babel/plugin-proposal-unicode-property-regex@7.0.0-beta.47": version "7.0.0-beta.47" @@ -542,13 +583,13 @@ "@babel/helper-regex" "7.0.0-beta.47" regexpu-core "^4.1.4" -"@babel/plugin-proposal-unicode-property-regex@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0-beta.49.tgz#0ef5fb9abda980cd1585ef4c8e8f680b63263c72" +"@babel/plugin-proposal-unicode-property-regex@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0.tgz#498b39cd72536cd7c4b26177d030226eba08cd33" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.49" - "@babel/helper-regex" "7.0.0-beta.49" - regexpu-core "^4.1.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + regexpu-core "^4.2.0" "@babel/plugin-syntax-async-generators@7.0.0-beta.47": version "7.0.0-beta.47" @@ -556,11 +597,11 @@ dependencies: "@babel/helper-plugin-utils" "7.0.0-beta.47" -"@babel/plugin-syntax-async-generators@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0-beta.49.tgz#50ee943002aedc9ab3a8d12292bd35dd9edb1df8" +"@babel/plugin-syntax-async-generators@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0.tgz#bf0891dcdbf59558359d0c626fdc9490e20bc13c" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.49" + "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-class-properties@7.0.0-beta.47": version "7.0.0-beta.47" @@ -580,23 +621,17 @@ dependencies: "@babel/helper-plugin-utils" "7.0.0-beta.47" -"@babel/plugin-syntax-export-namespace-from@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.0.0-beta.47.tgz#fd446c76c59849f15e6cde235b5b8e153413f21e" - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - -"@babel/plugin-syntax-function-sent@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-function-sent/-/plugin-syntax-function-sent-7.0.0-beta.47.tgz#8d15536f55b21acdf9bfaa177c46591a589fe8b0" +"@babel/plugin-syntax-dynamic-import@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.0.0.tgz#6dfb7d8b6c3be14ce952962f658f3b7eb54c33ee" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" + "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-import-meta@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.0.0-beta.47.tgz#8ab5174209a954b91e327004a7d16737bcc4774d" +"@babel/plugin-syntax-json-strings@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.0.0.tgz#0d259a68090e15b383ce3710e01d5b23f3770cbd" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" + "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-jsx@7.0.0-beta.47": version "7.0.0-beta.47" @@ -604,11 +639,11 @@ dependencies: "@babel/helper-plugin-utils" "7.0.0-beta.47" -"@babel/plugin-syntax-numeric-separator@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.0.0-beta.47.tgz#9f06cb770a94f464b3b2889d2110080bc302fc80" +"@babel/plugin-syntax-jsx@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.0.0.tgz#034d5e2b4e14ccaea2e4c137af7e4afb39375ffd" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" + "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread@7.0.0-beta.47": version "7.0.0-beta.47" @@ -616,11 +651,11 @@ dependencies: "@babel/helper-plugin-utils" "7.0.0-beta.47" -"@babel/plugin-syntax-object-rest-spread@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0-beta.49.tgz#4784b3880823ff12e742c26b41e9857f701d639e" +"@babel/plugin-syntax-object-rest-spread@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0.tgz#37d8fbcaf216bd658ea1aebbeb8b75e88ebc549b" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.49" + "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-optional-catch-binding@7.0.0-beta.47": version "7.0.0-beta.47" @@ -628,17 +663,11 @@ dependencies: "@babel/helper-plugin-utils" "7.0.0-beta.47" -"@babel/plugin-syntax-optional-catch-binding@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0-beta.49.tgz#3e1dd3d5daeb4270e4ee4863641d4faa06bbcd11" - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.49" - -"@babel/plugin-syntax-throw-expressions@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-throw-expressions/-/plugin-syntax-throw-expressions-7.0.0-beta.47.tgz#8ca197bab3534f443eecd7eb79da47e199dafaf7" +"@babel/plugin-syntax-optional-catch-binding@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0.tgz#886f72008b3a8b185977f7cb70713b45e51ee475" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" + "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-arrow-functions@7.0.0-beta.47": version "7.0.0-beta.47" @@ -646,11 +675,11 @@ dependencies: "@babel/helper-plugin-utils" "7.0.0-beta.47" -"@babel/plugin-transform-arrow-functions@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0-beta.49.tgz#dd3845b63c683d187d5186ee0e882c4046c4f0e3" +"@babel/plugin-transform-arrow-functions@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0.tgz#a6c14875848c68a3b4b3163a486535ef25c7e749" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.49" + "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-async-to-generator@7.0.0-beta.47": version "7.0.0-beta.47" @@ -660,13 +689,13 @@ "@babel/helper-plugin-utils" "7.0.0-beta.47" "@babel/helper-remap-async-to-generator" "7.0.0-beta.47" -"@babel/plugin-transform-async-to-generator@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.0.0-beta.49.tgz#911a40eb93040186ceb693105ca76def7fe97d03" +"@babel/plugin-transform-async-to-generator@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.0.0.tgz#feaf18f4bfeaf2236eea4b2d4879da83006cc8f5" dependencies: - "@babel/helper-module-imports" "7.0.0-beta.49" - "@babel/helper-plugin-utils" "7.0.0-beta.49" - "@babel/helper-remap-async-to-generator" "7.0.0-beta.49" + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.0.0" "@babel/plugin-transform-block-scoped-functions@7.0.0-beta.47": version "7.0.0-beta.47" @@ -674,11 +703,11 @@ dependencies: "@babel/helper-plugin-utils" "7.0.0-beta.47" -"@babel/plugin-transform-block-scoped-functions@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0-beta.49.tgz#7aa9f46fdf873b7211aaa2eb0d37c4c371a1abd2" +"@babel/plugin-transform-block-scoped-functions@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0.tgz#482b3f75103927e37288b3b67b65f848e2aa0d07" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.49" + "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-block-scoping@7.0.0-beta.47": version "7.0.0-beta.47" @@ -687,12 +716,12 @@ "@babel/helper-plugin-utils" "7.0.0-beta.47" lodash "^4.17.5" -"@babel/plugin-transform-block-scoping@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0-beta.49.tgz#dd5a9ddd986775c8b20cf5b61065afb3dd9eaac9" +"@babel/plugin-transform-block-scoping@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0.tgz#1745075edffd7cdaf69fab2fb6f9694424b7e9bc" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.49" - lodash "^4.17.5" + "@babel/helper-plugin-utils" "^7.0.0" + lodash "^4.17.10" "@babel/plugin-transform-classes@7.0.0-beta.47": version "7.0.0-beta.47" @@ -707,17 +736,17 @@ "@babel/helper-split-export-declaration" "7.0.0-beta.47" globals "^11.1.0" -"@babel/plugin-transform-classes@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.0.0-beta.49.tgz#5342471d2e6a3337332ea246b46c0bddf5fc544d" - dependencies: - "@babel/helper-annotate-as-pure" "7.0.0-beta.49" - "@babel/helper-define-map" "7.0.0-beta.49" - "@babel/helper-function-name" "7.0.0-beta.49" - "@babel/helper-optimise-call-expression" "7.0.0-beta.49" - "@babel/helper-plugin-utils" "7.0.0-beta.49" - "@babel/helper-replace-supers" "7.0.0-beta.49" - "@babel/helper-split-export-declaration" "7.0.0-beta.49" +"@babel/plugin-transform-classes@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.0.0.tgz#9e65ca401747dde99e344baea90ab50dccb4c468" + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-define-map" "^7.0.0" + "@babel/helper-function-name" "^7.0.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.0.0" + "@babel/helper-split-export-declaration" "^7.0.0" globals "^11.1.0" "@babel/plugin-transform-computed-properties@7.0.0-beta.47": @@ -726,11 +755,11 @@ dependencies: "@babel/helper-plugin-utils" "7.0.0-beta.47" -"@babel/plugin-transform-computed-properties@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0-beta.49.tgz#b8259d174bf07ab4b56566562b46ee6520c3dfd2" +"@babel/plugin-transform-computed-properties@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0.tgz#2fbb8900cd3e8258f2a2ede909b90e7556185e31" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.49" + "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-destructuring@7.0.0-beta.47": version "7.0.0-beta.47" @@ -738,11 +767,11 @@ dependencies: "@babel/helper-plugin-utils" "7.0.0-beta.47" -"@babel/plugin-transform-destructuring@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.0.0-beta.49.tgz#4366392c9c82d1231056c1d0029438a60d362b82" +"@babel/plugin-transform-destructuring@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.0.0.tgz#68e911e1935dda2f06b6ccbbf184ffb024e9d43a" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.49" + "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-dotall-regex@7.0.0-beta.47": version "7.0.0-beta.47" @@ -752,12 +781,12 @@ "@babel/helper-regex" "7.0.0-beta.47" regexpu-core "^4.1.3" -"@babel/plugin-transform-dotall-regex@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.0.0-beta.49.tgz#35ae2bc187bee752d0f7785d2704e52b87377369" +"@babel/plugin-transform-dotall-regex@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.0.0.tgz#73a24da69bc3c370251f43a3d048198546115e58" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.49" - "@babel/helper-regex" "7.0.0-beta.49" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" regexpu-core "^4.1.3" "@babel/plugin-transform-duplicate-keys@7.0.0-beta.47": @@ -766,11 +795,11 @@ dependencies: "@babel/helper-plugin-utils" "7.0.0-beta.47" -"@babel/plugin-transform-duplicate-keys@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0-beta.49.tgz#fac244809ddecbf095e375558ccb716da1042316" +"@babel/plugin-transform-duplicate-keys@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0.tgz#a0601e580991e7cace080e4cf919cfd58da74e86" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.49" + "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-exponentiation-operator@7.0.0-beta.47": version "7.0.0-beta.47" @@ -779,12 +808,12 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "7.0.0-beta.47" "@babel/helper-plugin-utils" "7.0.0-beta.47" -"@babel/plugin-transform-exponentiation-operator@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.0.0-beta.49.tgz#457b2d09004794684aa6e1b04015080b80a08a14" +"@babel/plugin-transform-exponentiation-operator@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.0.0.tgz#c51b45e090a01876f64d32b5b46c0799c85ea56c" dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "7.0.0-beta.49" - "@babel/helper-plugin-utils" "7.0.0-beta.49" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-for-of@7.0.0-beta.47": version "7.0.0-beta.47" @@ -792,11 +821,11 @@ dependencies: "@babel/helper-plugin-utils" "7.0.0-beta.47" -"@babel/plugin-transform-for-of@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0-beta.49.tgz#3ec72726bf1d89a0d4d511be7a9549066f57aade" +"@babel/plugin-transform-for-of@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0.tgz#f2ba4eadb83bd17dc3c7e9b30f4707365e1c3e39" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.49" + "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-function-name@7.0.0-beta.47": version "7.0.0-beta.47" @@ -805,12 +834,12 @@ "@babel/helper-function-name" "7.0.0-beta.47" "@babel/helper-plugin-utils" "7.0.0-beta.47" -"@babel/plugin-transform-function-name@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.0.0-beta.49.tgz#af39f60e7aefce9b25eb4adcedd04d50866ce218" +"@babel/plugin-transform-function-name@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.0.0.tgz#eeda18dc22584e13c3581a68f6be4822bb1d1d81" dependencies: - "@babel/helper-function-name" "7.0.0-beta.49" - "@babel/helper-plugin-utils" "7.0.0-beta.49" + "@babel/helper-function-name" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-literals@7.0.0-beta.47": version "7.0.0-beta.47" @@ -818,11 +847,11 @@ dependencies: "@babel/helper-plugin-utils" "7.0.0-beta.47" -"@babel/plugin-transform-literals@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0-beta.49.tgz#07c838254d65e6867e86513eb0f22d5f26b0a56a" +"@babel/plugin-transform-literals@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0.tgz#2aec1d29cdd24c407359c930cdd89e914ee8ff86" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.49" + "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-modules-amd@7.0.0-beta.47": version "7.0.0-beta.47" @@ -831,12 +860,12 @@ "@babel/helper-module-transforms" "7.0.0-beta.47" "@babel/helper-plugin-utils" "7.0.0-beta.47" -"@babel/plugin-transform-modules-amd@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.0.0-beta.49.tgz#16d07480954b0415ea70f1ec3edbd0597bd3ddfe" +"@babel/plugin-transform-modules-amd@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.0.0.tgz#2430ab73db9960c4ca89966f425b803f5d0d0468" dependencies: - "@babel/helper-module-transforms" "7.0.0-beta.49" - "@babel/helper-plugin-utils" "7.0.0-beta.49" + "@babel/helper-module-transforms" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-modules-commonjs@7.0.0-beta.47": version "7.0.0-beta.47" @@ -846,13 +875,13 @@ "@babel/helper-plugin-utils" "7.0.0-beta.47" "@babel/helper-simple-access" "7.0.0-beta.47" -"@babel/plugin-transform-modules-commonjs@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.0.0-beta.49.tgz#09fb345d5927c2ba3bd89e7cdb13a55067ed39a0" +"@babel/plugin-transform-modules-commonjs@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.0.0.tgz#20b906e5ab130dd8e456b694a94d9575da0fd41f" dependencies: - "@babel/helper-module-transforms" "7.0.0-beta.49" - "@babel/helper-plugin-utils" "7.0.0-beta.49" - "@babel/helper-simple-access" "7.0.0-beta.49" + "@babel/helper-module-transforms" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-simple-access" "^7.0.0" "@babel/plugin-transform-modules-systemjs@7.0.0-beta.47": version "7.0.0-beta.47" @@ -861,12 +890,12 @@ "@babel/helper-hoist-variables" "7.0.0-beta.47" "@babel/helper-plugin-utils" "7.0.0-beta.47" -"@babel/plugin-transform-modules-systemjs@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.0.0-beta.49.tgz#68225a3ae1312771bc5a36f71ff10d02c1243d9f" +"@babel/plugin-transform-modules-systemjs@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.0.0.tgz#8873d876d4fee23209decc4d1feab8f198cf2df4" dependencies: - "@babel/helper-hoist-variables" "7.0.0-beta.49" - "@babel/helper-plugin-utils" "7.0.0-beta.49" + "@babel/helper-hoist-variables" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-modules-umd@7.0.0-beta.47": version "7.0.0-beta.47" @@ -875,12 +904,12 @@ "@babel/helper-module-transforms" "7.0.0-beta.47" "@babel/helper-plugin-utils" "7.0.0-beta.47" -"@babel/plugin-transform-modules-umd@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.0.0-beta.49.tgz#7048ca5a77189706f4b3e96e4b996eb30590dd63" +"@babel/plugin-transform-modules-umd@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.0.0.tgz#e7bb4f2a6cd199668964241951a25013450349be" dependencies: - "@babel/helper-module-transforms" "7.0.0-beta.49" - "@babel/helper-plugin-utils" "7.0.0-beta.49" + "@babel/helper-module-transforms" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-new-target@7.0.0-beta.47": version "7.0.0-beta.47" @@ -888,11 +917,11 @@ dependencies: "@babel/helper-plugin-utils" "7.0.0-beta.47" -"@babel/plugin-transform-new-target@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0-beta.49.tgz#c2ffef1ebbaf724a9e58dde114e57e3e6864a5e7" +"@babel/plugin-transform-new-target@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz#ae8fbd89517fa7892d20e6564e641e8770c3aa4a" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.49" + "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-object-super@7.0.0-beta.47": version "7.0.0-beta.47" @@ -901,12 +930,12 @@ "@babel/helper-plugin-utils" "7.0.0-beta.47" "@babel/helper-replace-supers" "7.0.0-beta.47" -"@babel/plugin-transform-object-super@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.0.0-beta.49.tgz#b302f55702847343c10ff4fb8435cc3574755fe3" +"@babel/plugin-transform-object-super@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.0.0.tgz#b8587d511309b3a0e96e9e38169908b3e392041e" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.49" - "@babel/helper-replace-supers" "7.0.0-beta.49" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.0.0" "@babel/plugin-transform-parameters@7.0.0-beta.47": version "7.0.0-beta.47" @@ -916,13 +945,41 @@ "@babel/helper-get-function-arity" "7.0.0-beta.47" "@babel/helper-plugin-utils" "7.0.0-beta.47" -"@babel/plugin-transform-parameters@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.0.0-beta.49.tgz#1cad71a2a33281e5efbb1a4623a964c073ce9a2d" +"@babel/plugin-transform-parameters@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.0.0.tgz#da864efa111816a6df161d492f33de10e74b1949" + dependencies: + "@babel/helper-call-delegate" "^7.0.0" + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-react-display-name@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.0.0.tgz#93759e6c023782e52c2da3b75eca60d4f10533ee" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-react-jsx-self@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.0.0.tgz#a84bb70fea302d915ea81d9809e628266bb0bc11" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.0.0" + +"@babel/plugin-transform-react-jsx-source@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.0.0.tgz#28e00584f9598c0dd279f6280eee213fa0121c3c" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.0.0" + +"@babel/plugin-transform-react-jsx@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.0.0.tgz#524379e4eca5363cd10c4446ba163f093da75f3e" dependencies: - "@babel/helper-call-delegate" "7.0.0-beta.49" - "@babel/helper-get-function-arity" "7.0.0-beta.49" - "@babel/helper-plugin-utils" "7.0.0-beta.49" + "@babel/helper-builder-react-jsx" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.0.0" "@babel/plugin-transform-regenerator@7.0.0-beta.47": version "7.0.0-beta.47" @@ -930,11 +987,11 @@ dependencies: regenerator-transform "^0.12.3" -"@babel/plugin-transform-regenerator@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0-beta.49.tgz#d4ed7967033f4f5b49363c203503899b8357cae2" +"@babel/plugin-transform-regenerator@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz#5b41686b4ed40bef874d7ed6a84bdd849c13e0c1" dependencies: - regenerator-transform "^0.12.3" + regenerator-transform "^0.13.3" "@babel/plugin-transform-runtime@7.0.0-beta.47": version "7.0.0-beta.47" @@ -949,11 +1006,11 @@ dependencies: "@babel/helper-plugin-utils" "7.0.0-beta.47" -"@babel/plugin-transform-shorthand-properties@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0-beta.49.tgz#49f134dbde4f655834c21524e9e61a58d4e17900" +"@babel/plugin-transform-shorthand-properties@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0.tgz#85f8af592dcc07647541a0350e8c95c7bf419d15" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.49" + "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-spread@7.0.0-beta.47": version "7.0.0-beta.47" @@ -961,11 +1018,11 @@ dependencies: "@babel/helper-plugin-utils" "7.0.0-beta.47" -"@babel/plugin-transform-spread@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0-beta.49.tgz#6abab05fc0cca829aaf9e2a85044b79763e681ca" +"@babel/plugin-transform-spread@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0.tgz#93583ce48dd8c85e53f3a46056c856e4af30b49b" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.49" + "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-sticky-regex@7.0.0-beta.47": version "7.0.0-beta.47" @@ -974,12 +1031,12 @@ "@babel/helper-plugin-utils" "7.0.0-beta.47" "@babel/helper-regex" "7.0.0-beta.47" -"@babel/plugin-transform-sticky-regex@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0-beta.49.tgz#08cc5b64cf6a5942a87bdd9b4a4818d4cba12df3" +"@babel/plugin-transform-sticky-regex@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0.tgz#30a9d64ac2ab46eec087b8530535becd90e73366" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.49" - "@babel/helper-regex" "7.0.0-beta.49" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" "@babel/plugin-transform-template-literals@7.0.0-beta.47": version "7.0.0-beta.47" @@ -988,12 +1045,12 @@ "@babel/helper-annotate-as-pure" "7.0.0-beta.47" "@babel/helper-plugin-utils" "7.0.0-beta.47" -"@babel/plugin-transform-template-literals@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0-beta.49.tgz#e609aed6b8fcc7e1ebccacf22138a647202940a2" +"@babel/plugin-transform-template-literals@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0.tgz#084f1952efe5b153ddae69eb8945f882c7a97c65" dependencies: - "@babel/helper-annotate-as-pure" "7.0.0-beta.49" - "@babel/helper-plugin-utils" "7.0.0-beta.49" + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-typeof-symbol@7.0.0-beta.47": version "7.0.0-beta.47" @@ -1001,11 +1058,11 @@ dependencies: "@babel/helper-plugin-utils" "7.0.0-beta.47" -"@babel/plugin-transform-typeof-symbol@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0-beta.49.tgz#365141ba355bf739eefd6c2bb9df1c3b7146e450" +"@babel/plugin-transform-typeof-symbol@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0.tgz#4dcf1e52e943e5267b7313bff347fdbe0f81cec9" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.49" + "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-unicode-regex@7.0.0-beta.47": version "7.0.0-beta.47" @@ -1015,21 +1072,67 @@ "@babel/helper-regex" "7.0.0-beta.47" regexpu-core "^4.1.3" -"@babel/plugin-transform-unicode-regex@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0-beta.49.tgz#c375db5709757621523d41acb62a9abf0d4374b8" +"@babel/plugin-transform-unicode-regex@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0.tgz#c6780e5b1863a76fe792d90eded9fcd5b51d68fc" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.49" - "@babel/helper-regex" "7.0.0-beta.49" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" regexpu-core "^4.1.3" -"@babel/polyfill@^7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.0.0-beta.49.tgz#618f8c677c30504b13f1c8812c65322fb1ac4803" +"@babel/polyfill@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.0.0.tgz#c8ff65c9ec3be6a1ba10113ebd40e8750fb90bff" dependencies: - core-js "^2.5.6" + core-js "^2.5.7" regenerator-runtime "^0.11.1" +"@babel/preset-env@7.0.0", "@babel/preset-env@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.0.0.tgz#f450f200c14e713f98cb14d113bf0c2cfbb89ca9" + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-async-generator-functions" "^7.0.0" + "@babel/plugin-proposal-json-strings" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.0.0" + "@babel/plugin-syntax-async-generators" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-async-to-generator" "^7.0.0" + "@babel/plugin-transform-block-scoped-functions" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-dotall-regex" "^7.0.0" + "@babel/plugin-transform-duplicate-keys" "^7.0.0" + "@babel/plugin-transform-exponentiation-operator" "^7.0.0" + "@babel/plugin-transform-for-of" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-amd" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-modules-systemjs" "^7.0.0" + "@babel/plugin-transform-modules-umd" "^7.0.0" + "@babel/plugin-transform-new-target" "^7.0.0" + "@babel/plugin-transform-object-super" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-regenerator" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + "@babel/plugin-transform-typeof-symbol" "^7.0.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + browserslist "^4.1.0" + invariant "^2.2.2" + js-levenshtein "^1.1.3" + semver "^5.3.0" + "@babel/preset-env@7.0.0-beta.47": version "7.0.0-beta.47" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.0.0-beta.47.tgz#a3dab3b5fac4de56e3510bdbcb528f1cbdedbe2d" @@ -1074,74 +1177,27 @@ invariant "^2.2.2" semver "^5.3.0" -"@babel/preset-env@^7.0.0-beta.47", "@babel/preset-env@^7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.0.0-beta.49.tgz#4a8a8b92139f51fa2f90fbf6f1fad7597532aebc" - dependencies: - "@babel/helper-module-imports" "7.0.0-beta.49" - "@babel/helper-plugin-utils" "7.0.0-beta.49" - "@babel/plugin-proposal-async-generator-functions" "7.0.0-beta.49" - "@babel/plugin-proposal-object-rest-spread" "7.0.0-beta.49" - "@babel/plugin-proposal-optional-catch-binding" "7.0.0-beta.49" - "@babel/plugin-proposal-unicode-property-regex" "7.0.0-beta.49" - "@babel/plugin-syntax-async-generators" "7.0.0-beta.49" - "@babel/plugin-syntax-object-rest-spread" "7.0.0-beta.49" - "@babel/plugin-syntax-optional-catch-binding" "7.0.0-beta.49" - "@babel/plugin-transform-arrow-functions" "7.0.0-beta.49" - "@babel/plugin-transform-async-to-generator" "7.0.0-beta.49" - "@babel/plugin-transform-block-scoped-functions" "7.0.0-beta.49" - "@babel/plugin-transform-block-scoping" "7.0.0-beta.49" - "@babel/plugin-transform-classes" "7.0.0-beta.49" - "@babel/plugin-transform-computed-properties" "7.0.0-beta.49" - "@babel/plugin-transform-destructuring" "7.0.0-beta.49" - "@babel/plugin-transform-dotall-regex" "7.0.0-beta.49" - "@babel/plugin-transform-duplicate-keys" "7.0.0-beta.49" - "@babel/plugin-transform-exponentiation-operator" "7.0.0-beta.49" - "@babel/plugin-transform-for-of" "7.0.0-beta.49" - "@babel/plugin-transform-function-name" "7.0.0-beta.49" - "@babel/plugin-transform-literals" "7.0.0-beta.49" - "@babel/plugin-transform-modules-amd" "7.0.0-beta.49" - "@babel/plugin-transform-modules-commonjs" "7.0.0-beta.49" - "@babel/plugin-transform-modules-systemjs" "7.0.0-beta.49" - "@babel/plugin-transform-modules-umd" "7.0.0-beta.49" - "@babel/plugin-transform-new-target" "7.0.0-beta.49" - "@babel/plugin-transform-object-super" "7.0.0-beta.49" - "@babel/plugin-transform-parameters" "7.0.0-beta.49" - "@babel/plugin-transform-regenerator" "7.0.0-beta.49" - "@babel/plugin-transform-shorthand-properties" "7.0.0-beta.49" - "@babel/plugin-transform-spread" "7.0.0-beta.49" - "@babel/plugin-transform-sticky-regex" "7.0.0-beta.49" - "@babel/plugin-transform-template-literals" "7.0.0-beta.49" - "@babel/plugin-transform-typeof-symbol" "7.0.0-beta.49" - "@babel/plugin-transform-unicode-regex" "7.0.0-beta.49" - browserslist "^3.0.0" - invariant "^2.2.2" - semver "^5.3.0" - -"@babel/preset-stage-2@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "https://registry.yarnpkg.com/@babel/preset-stage-2/-/preset-stage-2-7.0.0-beta.47.tgz#deb930c44d7d6e519a33174bba121a2a630ed654" +"@babel/preset-react@7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz#e86b4b3d99433c7b3e9e91747e2653958bc6b3c0" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/plugin-proposal-decorators" "7.0.0-beta.47" - "@babel/plugin-proposal-export-namespace-from" "7.0.0-beta.47" - "@babel/plugin-proposal-function-sent" "7.0.0-beta.47" - "@babel/plugin-proposal-numeric-separator" "7.0.0-beta.47" - "@babel/plugin-proposal-throw-expressions" "7.0.0-beta.47" - "@babel/preset-stage-3" "7.0.0-beta.47" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-self" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" -"@babel/preset-stage-3@7.0.0-beta.47": - version "7.0.0-beta.47" - resolved "https://registry.yarnpkg.com/@babel/preset-stage-3/-/preset-stage-3-7.0.0-beta.47.tgz#17028f3b5dddc548d80404c86ed62622f601597b" +"@babel/register@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.0.0.tgz#fa634bae1bfa429f60615b754fc1f1d745edd827" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.47" - "@babel/plugin-proposal-async-generator-functions" "7.0.0-beta.47" - "@babel/plugin-proposal-class-properties" "7.0.0-beta.47" - "@babel/plugin-proposal-object-rest-spread" "7.0.0-beta.47" - "@babel/plugin-proposal-optional-catch-binding" "7.0.0-beta.47" - "@babel/plugin-proposal-unicode-property-regex" "7.0.0-beta.47" - "@babel/plugin-syntax-dynamic-import" "7.0.0-beta.47" - "@babel/plugin-syntax-import-meta" "7.0.0-beta.47" + core-js "^2.5.7" + find-cache-dir "^1.0.0" + home-or-tmp "^3.0.0" + lodash "^4.17.10" + mkdirp "^0.5.1" + pirates "^4.0.0" + source-map-support "^0.5.9" "@babel/runtime@7.0.0-beta.47": version "7.0.0-beta.47" @@ -1168,15 +1224,23 @@ babylon "7.0.0-beta.47" lodash "^4.17.5" -"@babel/template@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.49.tgz#e38abe8217cb9793f461a5306d7ad745d83e1d27" +"@babel/template@7.0.0-beta.51": + version "7.0.0-beta.51" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.51.tgz#9602a40aebcf357ae9677e2532ef5fc810f5fbff" dependencies: - "@babel/code-frame" "7.0.0-beta.49" - "@babel/parser" "7.0.0-beta.49" - "@babel/types" "7.0.0-beta.49" + "@babel/code-frame" "7.0.0-beta.51" + "@babel/parser" "7.0.0-beta.51" + "@babel/types" "7.0.0-beta.51" lodash "^4.17.5" +"@babel/template@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0.tgz#c2bc9870405959c89a9c814376a2ecb247838c80" + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/types" "^7.0.0" + "@babel/traverse@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.44.tgz#a970a2c45477ad18017e2e465a0606feee0d2966" @@ -1207,21 +1271,35 @@ invariant "^2.2.0" lodash "^4.17.5" -"@babel/traverse@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.49.tgz#4f2a73682a18334ed6625d100a8d27319f7c2d68" +"@babel/traverse@7.0.0-beta.51": + version "7.0.0-beta.51" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.51.tgz#981daf2cec347a6231d3aa1d9e1803b03aaaa4a8" dependencies: - "@babel/code-frame" "7.0.0-beta.49" - "@babel/generator" "7.0.0-beta.49" - "@babel/helper-function-name" "7.0.0-beta.49" - "@babel/helper-split-export-declaration" "7.0.0-beta.49" - "@babel/parser" "7.0.0-beta.49" - "@babel/types" "7.0.0-beta.49" + "@babel/code-frame" "7.0.0-beta.51" + "@babel/generator" "7.0.0-beta.51" + "@babel/helper-function-name" "7.0.0-beta.51" + "@babel/helper-split-export-declaration" "7.0.0-beta.51" + "@babel/parser" "7.0.0-beta.51" + "@babel/types" "7.0.0-beta.51" debug "^3.1.0" globals "^11.1.0" invariant "^2.2.0" lodash "^4.17.5" +"@babel/traverse@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0.tgz#b1fe9b6567fdf3ab542cfad6f3b31f854d799a61" + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.0.0" + "@babel/helper-function-name" "^7.0.0" + "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/types" "^7.0.0" + debug "^3.1.0" + globals "^11.1.0" + lodash "^4.17.10" + "@babel/types@7.0.0-beta.35": version "7.0.0-beta.35" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.35.tgz#cf933a9a9a38484ca724b335b88d83726d5ab960" @@ -1246,14 +1324,79 @@ lodash "^4.17.5" to-fast-properties "^2.0.0" -"@babel/types@7.0.0-beta.49": - version "7.0.0-beta.49" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.49.tgz#b7e3b1c3f4d4cfe11bdf8c89f1efd5e1617b87a6" +"@babel/types@7.0.0-beta.51": + version "7.0.0-beta.51" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.51.tgz#d802b7b543b5836c778aa691797abf00f3d97ea9" dependencies: esutils "^2.0.2" lodash "^4.17.5" to-fast-properties "^2.0.0" +"@babel/types@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0.tgz#6e191793d3c854d19c6749989e3bc55f0e962118" + dependencies: + esutils "^2.0.2" + lodash "^4.17.10" + to-fast-properties "^2.0.0" + +"@cypress/listr-verbose-renderer@0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@cypress/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#a77492f4b11dcc7c446a34b3e28721afd33c642a" + dependencies: + chalk "^1.1.3" + cli-cursor "^1.0.2" + date-fns "^1.27.2" + figures "^1.7.0" + +"@cypress/webpack-preprocessor@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@cypress/webpack-preprocessor/-/webpack-preprocessor-3.0.0.tgz#81db0364eeb4b04707c54cdf7453f7f753a449c9" + dependencies: + "@babel/core" "7.0.1" + "@babel/preset-env" "7.0.0" + "@babel/preset-react" "7.0.0" + babel-loader "8.0.2" + bluebird "3.5.0" + debug "3.1.0" + lodash.clonedeep "4.5.0" + webpack "4.18.1" + +"@cypress/xvfb@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.3.tgz#6319afdcdcff7d1505daeeaa84484d0596189860" + dependencies: + debug "^3.1.0" + lodash.once "^4.1.1" + +"@fortawesome/fontawesome-common-types@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.3.tgz#bcdffc26f2289ada8f6beb7808b45b05439b6718" + +"@fortawesome/fontawesome-svg-core@^1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.3.tgz#e393f63e5e15da1f5af4601616a2cd58d1701a9e" + dependencies: + "@fortawesome/fontawesome-common-types" "^0.2.3" + +"@fortawesome/free-solid-svg-icons@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.3.0.tgz#6aab98a8b5451489236e62654fe1d19b74b90fc6" + dependencies: + "@fortawesome/fontawesome-common-types" "^0.2.3" + +"@fortawesome/vue-fontawesome@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@fortawesome/vue-fontawesome/-/vue-fontawesome-0.1.1.tgz#f54cad4028213a011c6ecb10eaf2b99dbd4a8496" + +"@intervolga/optimize-cssnano-plugin@^1.0.5": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz#be7c7846128b88f6a9b1d1261a0ad06eb5c0fdf8" + dependencies: + cssnano "^4.0.0" + cssnano-preset-default "^4.0.0" + postcss "^7.0.0" + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -1262,12 +1405,8 @@ glob-to-regexp "^0.3.0" "@nodelib/fs.stat@^1.0.1": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.0.2.tgz#d056b68999769728a1cff8d643bc59eb6f0be436" - -"@posthtml/esm@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@posthtml/esm/-/esm-1.0.0.tgz#09bcb28a02438dcee22ad1970ca1d85a000ae0cf" + version "1.1.0" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.0.tgz#50c1e2260ac0ed9439a181de3725a0168d59c48a" "@samverschueren/stream-to-observable@^0.3.0": version "0.3.0" @@ -1275,106 +1414,161 @@ dependencies: any-observable "^0.3.0" -"@sindresorhus/is@^0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" +"@sinonjs/commons@^1.0.1": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.0.2.tgz#3e0ac737781627b8844257fadc3d803997d0526e" + dependencies: + type-detect "4.0.8" -"@types/node@^8.0.24": - version "8.10.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.18.tgz#eb9ad8b0723d13fa9bc8b42543e3661ed805f2bb" +"@sinonjs/formatio@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-2.0.0.tgz#84db7e9eb5531df18a8c5e0bfb6e449e55e654b2" + dependencies: + samsam "1.3.0" -"@types/strip-bom@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" +"@sinonjs/samsam@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-2.0.0.tgz#9163742ac35c12d3602dece74317643b35db6a80" + +"@types/blob-util@1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@types/blob-util/-/blob-util-1.3.3.tgz#adba644ae34f88e1dd9a5864c66ad651caaf628a" + +"@types/bluebird@3.5.18": + version "3.5.18" + resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.18.tgz#6a60435d4663e290f3709898a4f75014f279c4d6" + +"@types/chai-jquery@1.1.35": + version "1.1.35" + resolved "https://registry.yarnpkg.com/@types/chai-jquery/-/chai-jquery-1.1.35.tgz#9a8f0a39ec0851b2768a8f8c764158c2a2568d04" + dependencies: + "@types/chai" "*" + "@types/jquery" "*" + +"@types/chai@*": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.1.4.tgz#5ca073b330d90b4066d6ce18f60d57f2084ce8ca" + +"@types/chai@4.0.8": + version "4.0.8" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.0.8.tgz#d27600e9ba2f371e08695d90a0fe0408d89c7be7" + +"@types/jquery@*": + version "3.3.5" + resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.3.5.tgz#75cfec8c5ee38355d14296ada7e7e2fb8bd3ac2f" + +"@types/jquery@3.2.16": + version "3.2.16" + resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.2.16.tgz#04419c404a3194350e7d3f339a90e72c88db3111" + +"@types/lodash@4.14.87": + version "4.14.87" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.87.tgz#55f92183b048c2c64402afe472f8333f4e319a6b" + +"@types/minimatch@3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" -"@types/strip-json-comments@0.0.30": - version "0.0.30" - resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" +"@types/mocha@2.2.44": + version "2.2.44" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.44.tgz#1d4a798e53f35212fd5ad4d04050620171cd5b5e" -"@types/webpack-env@^1.13.6": - version "1.13.6" - resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.13.6.tgz#128d1685a7c34d31ed17010fc87d6a12c1de6976" +"@types/sinon-chai@2.7.29": + version "2.7.29" + resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-2.7.29.tgz#4db01497e2dd1908b2bd30d1782f456353f5f723" + dependencies: + "@types/chai" "*" + "@types/sinon" "*" + +"@types/sinon@*": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-5.0.1.tgz#a15b36ec42f1f53166617491feabd1734cb03e21" + +"@types/sinon@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-4.0.0.tgz#9a93ffa4ee1329e85166278a5ed99f81dc4c8362" -"@vue/babel-preset-app@^3.0.0-beta.15": - version "3.0.0-beta.15" - resolved "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-3.0.0-beta.15.tgz#8ea954f7ca3d10d1986ed767d9682cc8b5ffea4e" +"@vue/babel-preset-app@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-3.0.1.tgz#24188938e93f259f7141a6a1190da9c511d123d8" dependencies: + "@babel/plugin-proposal-class-properties" "7.0.0-beta.47" + "@babel/plugin-proposal-decorators" "7.0.0-beta.47" + "@babel/plugin-syntax-dynamic-import" "7.0.0-beta.47" "@babel/plugin-syntax-jsx" "7.0.0-beta.47" "@babel/plugin-transform-runtime" "7.0.0-beta.47" "@babel/preset-env" "7.0.0-beta.47" - "@babel/preset-stage-2" "7.0.0-beta.47" "@babel/runtime" "7.0.0-beta.47" babel-helper-vue-jsx-merge-props "^2.0.3" - babel-plugin-dynamic-import-node "^1.2.0" + babel-plugin-dynamic-import-node "^2.0.0" babel-plugin-transform-vue-jsx "^4.0.1" -"@vue/cli-overlay@^3.0.0-beta.15": - version "3.0.0-beta.15" - resolved "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-3.0.0-beta.15.tgz#e4b477bcbeaede138ce191e27d2222fac09078ed" +"@vue/cli-overlay@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-3.0.1.tgz#474067e18fc7c1b303c97901175d6441bfdcde6f" -"@vue/cli-plugin-babel@3.0.0-beta.15": - version "3.0.0-beta.15" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-babel/-/cli-plugin-babel-3.0.0-beta.15.tgz#95becf4a1b4ff6e1f1ac865bcf6e354d0f48924e" +"@vue/cli-plugin-babel@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-babel/-/cli-plugin-babel-3.0.1.tgz#a1691caf610d42800314ceb9e727a7668bfa3e7f" dependencies: "@babel/core" "7.0.0-beta.47" - "@vue/babel-preset-app" "^3.0.0-beta.15" + "@vue/babel-preset-app" "^3.0.1" babel-loader "^8.0.0-0" -"@vue/cli-plugin-e2e-nightwatch@3.0.0-beta.15": - version "3.0.0-beta.15" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-e2e-nightwatch/-/cli-plugin-e2e-nightwatch-3.0.0-beta.15.tgz#9c3b881b5952c7bb07826d20205b666798b3c8d0" +"@vue/cli-plugin-e2e-cypress@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-e2e-cypress/-/cli-plugin-e2e-cypress-3.0.4.tgz#63660a083dfea4da8281fa1d60d5843ee0dc2add" dependencies: - "@vue/cli-shared-utils" "^3.0.0-beta.15" - chromedriver "^2.38.3" - deepmerge "^2.1.0" - execa "^0.10.0" - nightwatch "^0.9.21" - selenium-server "^3.12.0" + "@cypress/webpack-preprocessor" "^3.0.0" + "@vue/cli-shared-utils" "^3.0.4" + cypress "^3.0.2" + eslint-plugin-cypress "^2.0.1" -"@vue/cli-plugin-eslint@3.0.0-beta.15": - version "3.0.0-beta.15" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.0.0-beta.15.tgz#857d2f0f539f9853484d78a5104ad06077ab4dc9" +"@vue/cli-plugin-eslint@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.0.1.tgz#9330cfe4843058f28b0ab2871a8862fa31f3a5c0" dependencies: - "@vue/cli-shared-utils" "^3.0.0-beta.15" - babel-eslint "^8.2.3" + "@vue/cli-shared-utils" "^3.0.1" + babel-eslint "^8.2.5" eslint "^4.19.1" eslint-loader "^2.0.0" eslint-plugin-vue "^4.5.0" -"@vue/cli-plugin-unit-jest@3.0.0-beta.15": - version "3.0.0-beta.15" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-unit-jest/-/cli-plugin-unit-jest-3.0.0-beta.15.tgz#acf342cfe119ea3d737a112fb3e8208c73e1e950" +"@vue/cli-plugin-unit-mocha@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-unit-mocha/-/cli-plugin-unit-mocha-3.0.1.tgz#cf27034db9a3d4452a2d87eb74f9f462fa4b6388" dependencies: - "@vue/cli-shared-utils" "^3.0.0-beta.15" - jest "^22.4.3" - jest-serializer-vue "^1.0.0" - jest-transform-stub "^1.0.0" - vue-jest "^2.6.0" + "@vue/cli-shared-utils" "^3.0.1" + jsdom "^11.11.0" + jsdom-global "^3.0.2" + mocha "^5.2.0" + mocha-webpack "^2.0.0-beta.0" -"@vue/cli-service@3.0.0-beta.15", "@vue/cli-service@^3.0.0-beta.6": - version "3.0.0-beta.15" - resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-3.0.0-beta.15.tgz#5779ab045414ac7b0ba6b88725bc65a483a7975d" +"@vue/cli-service@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-3.0.1.tgz#086c4b3b78bda7b0f4e1e7324237c62c89c5e6b3" dependencies: - "@vue/cli-overlay" "^3.0.0-beta.15" - "@vue/cli-shared-utils" "^3.0.0-beta.15" - "@vue/preload-webpack-plugin" "^1.0.0" + "@intervolga/optimize-cssnano-plugin" "^1.0.5" + "@vue/cli-overlay" "^3.0.0" + "@vue/cli-shared-utils" "^3.0.1" + "@vue/preload-webpack-plugin" "^1.1.0" "@vue/web-component-wrapper" "^1.2.0" - acorn "^5.5.3" + acorn "^5.7.1" address "^1.0.3" - autoprefixer "^8.4.1" + autoprefixer "^8.6.5" cache-loader "^1.2.2" case-sensitive-paths-webpack-plugin "^2.1.2" chalk "^2.4.1" clipboardy "^1.2.3" cliui "^4.1.0" - copy-webpack-plugin "^4.5.1" - css-loader "^0.28.11" + copy-webpack-plugin "^4.5.2" + css-loader "^1.0.0" + cssnano "^4.0.0" debug "^3.1.0" escape-string-regexp "^1.0.5" file-loader "^1.1.11" friendly-errors-webpack-plugin "^1.7.0" fs-extra "^6.0.1" - get-value "^3.0.1" globby "^8.0.1" hash-sum "^1.0.2" html-webpack-plugin "^3.2.0" @@ -1382,46 +1576,64 @@ lodash.defaultsdeep "^4.6.0" lodash.mapvalues "^4.6.0" lodash.transform "^4.6.0" - mini-css-extract-plugin "^0.4.0" + mini-css-extract-plugin "^0.4.1" minimist "^1.2.0" - optimize-css-assets-webpack-plugin "^4.0.1" ora "^2.1.0" portfinder "^1.0.13" - postcss-loader "^2.1.5" - read-pkg "^3.0.0" + postcss-loader "^2.1.6" + read-pkg "^4.0.1" semver "^5.5.0" slash "^2.0.0" source-map-url "^0.4.0" + ssri "^6.0.0" string.prototype.padend "^3.0.0" thread-loader "^1.1.5" - uglifyjs-webpack-plugin "^1.2.5" - url-loader "^1.0.1" - vue-loader "^15.2.0" - vue-template-compiler "^2.5.16" - webpack "^4.8.2" + uglifyjs-webpack-plugin "^1.2.7" + url-loader "^1.1.0" + vue-loader "^15.3.0" + webpack "^4.15.1" + webpack-bundle-analyzer "^2.13.1" webpack-chain "^4.8.0" webpack-dev-server "^3.1.4" - webpack-merge "^4.1.2" - yorkie "^1.0.3" + webpack-merge "^4.1.3" + yorkie "^2.0.0" -"@vue/cli-shared-utils@^3.0.0-beta.15": - version "3.0.0-beta.15" - resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-3.0.0-beta.15.tgz#13916eb464b140a018b52479f559d09723db667c" +"@vue/cli-shared-utils@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-3.0.1.tgz#1084f8e4c20a01b3bb17059992aedc6d4774e270" dependencies: - chalk "^2.3.0" - cmd-shim "^2.0.2" + chalk "^2.4.1" execa "^0.10.0" - joi "^12.0.0" + joi "^13.0.0" + launch-editor "^2.2.1" node-ipc "^9.1.1" - opn "^5.2.0" - ora "^1.3.0" - request "^2.83.0" + opn "^5.3.0" + ora "^2.1.0" + request "^2.87.0" request-promise-native "^1.0.5" + semver "^5.5.0" string.prototype.padstart "^3.0.0" -"@vue/component-compiler-utils@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-1.2.1.tgz#3d543baa75cfe5dab96e29415b78366450156ef6" +"@vue/cli-shared-utils@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-3.0.4.tgz#055a6eec7dd5d0392bec1547a0199ccc008ccc06" + dependencies: + chalk "^2.4.1" + execa "^0.10.0" + joi "^13.0.0" + launch-editor "^2.2.1" + lru-cache "^4.1.3" + node-ipc "^9.1.1" + opn "^5.3.0" + ora "^2.1.0" + request "^2.87.0" + request-promise-native "^1.0.5" + semver "^5.5.0" + string.prototype.padstart "^3.0.0" + +"@vue/component-compiler-utils@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-2.1.0.tgz#8331eadc8acdbc35aace5a61d2153e6f6434bfe2" dependencies: consolidate "^0.15.1" hash-sum "^1.0.2" @@ -1429,13 +1641,13 @@ merge-source-map "^1.1.0" postcss "^6.0.20" postcss-selector-parser "^3.1.1" - prettier "^1.11.1" + prettier "^1.13.7" source-map "^0.5.6" vue-template-es2015-compiler "^1.6.0" -"@vue/eslint-config-standard@3.0.0-beta.15": - version "3.0.0-beta.15" - resolved "https://registry.yarnpkg.com/@vue/eslint-config-standard/-/eslint-config-standard-3.0.0-beta.15.tgz#b93e39094e9bd117101e47fdb778d145e204a285" +"@vue/eslint-config-standard@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@vue/eslint-config-standard/-/eslint-config-standard-3.0.1.tgz#34f322c857ee525aa6d0edda83b2b1698278b682" dependencies: eslint-config-standard "^12.0.0-alpha.0" eslint-plugin-import "^2.11.0" @@ -1443,13 +1655,13 @@ eslint-plugin-promise "^3.7.0" eslint-plugin-standard "^3.1.0" -"@vue/preload-webpack-plugin@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.0.0.tgz#08f156532909824da2aad258e151742d1e8f822e" +"@vue/preload-webpack-plugin@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.0.tgz#d768dba004261c029b53a77c5ea2d5f9ee4f3cce" -"@vue/test-utils@1.0.0-beta.16": - version "1.0.0-beta.16" - resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.0.0-beta.16.tgz#dcf7a30304391422e382b5f97db6eb9508112906" +"@vue/test-utils@^1.0.0-beta.24": + version "1.0.0-beta.24" + resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.0.0-beta.24.tgz#da7c3165f49f57f23fdb98caccba0f511effb76f" dependencies: lodash "^4.17.4" @@ -1457,138 +1669,298 @@ version "1.2.0" resolved "https://registry.yarnpkg.com/@vue/web-component-wrapper/-/web-component-wrapper-1.2.0.tgz#bb0e46f1585a7e289b4ee6067dcc5a6ae62f1dd1" -"@webassemblyjs/ast@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.5.9.tgz#b2770182678691ab4949d593105c15d4074fedb6" +"@webassemblyjs/ast@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.5.13.tgz#81155a570bd5803a30ec31436bc2c9c0ede38f25" dependencies: - "@webassemblyjs/helper-module-context" "1.5.9" - "@webassemblyjs/helper-wasm-bytecode" "1.5.9" - "@webassemblyjs/wast-parser" "1.5.9" + "@webassemblyjs/helper-module-context" "1.5.13" + "@webassemblyjs/helper-wasm-bytecode" "1.5.13" + "@webassemblyjs/wast-parser" "1.5.13" debug "^3.1.0" mamacro "^0.0.3" -"@webassemblyjs/floating-point-hex-parser@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.5.9.tgz#ee56243f6ba30781ff6f92fe7f1c377255219a7c" +"@webassemblyjs/ast@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.7.6.tgz#3ef8c45b3e5e943a153a05281317474fef63e21e" + dependencies: + "@webassemblyjs/helper-module-context" "1.7.6" + "@webassemblyjs/helper-wasm-bytecode" "1.7.6" + "@webassemblyjs/wast-parser" "1.7.6" + mamacro "^0.0.3" + +"@webassemblyjs/floating-point-hex-parser@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.5.13.tgz#29ce0baa97411f70e8cce68ce9c0f9d819a4e298" + +"@webassemblyjs/floating-point-hex-parser@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.6.tgz#7cb37d51a05c3fe09b464ae7e711d1ab3837801f" -"@webassemblyjs/helper-api-error@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.5.9.tgz#c80e204afe1ae102c23b0357f1ec25aeb61022a2" +"@webassemblyjs/helper-api-error@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.5.13.tgz#e49b051d67ee19a56e29b9aa8bd949b5b4442a59" -"@webassemblyjs/helper-buffer@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.9.tgz#90d99afcb0fdc1ee11bc403894f3ae37cd926a81" +"@webassemblyjs/helper-api-error@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.6.tgz#99b7e30e66f550a2638299a109dda84a622070ef" + +"@webassemblyjs/helper-buffer@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.13.tgz#873bb0a1b46449231137c1262ddfd05695195a1e" dependencies: debug "^3.1.0" -"@webassemblyjs/helper-code-frame@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.9.tgz#b56ac06a39c3e1cfefcc421ade1ee471a738a570" +"@webassemblyjs/helper-buffer@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.6.tgz#ba0648be12bbe560c25c997e175c2018df39ca3e" + +"@webassemblyjs/helper-code-frame@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.13.tgz#1bd2181b6a0be14e004f0fe9f5a660d265362b58" + dependencies: + "@webassemblyjs/wast-printer" "1.5.13" + +"@webassemblyjs/helper-code-frame@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.6.tgz#5a94d21b0057b69a7403fca0c253c3aaca95b1a5" dependencies: - "@webassemblyjs/wast-printer" "1.5.9" + "@webassemblyjs/wast-printer" "1.7.6" -"@webassemblyjs/helper-fsm@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.5.9.tgz#8f996268eb07ee6728130a9e97fa3aac32772454" +"@webassemblyjs/helper-fsm@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.5.13.tgz#cdf3d9d33005d543a5c5e5adaabf679ffa8db924" -"@webassemblyjs/helper-module-context@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.5.9.tgz#69e2eea310f755a0b750b84f8af59f890f2046ac" +"@webassemblyjs/helper-fsm@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.6.tgz#ae1741c6f6121213c7a0b587fb964fac492d3e49" -"@webassemblyjs/helper-wasm-bytecode@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.5.9.tgz#467ba0f9e4d0e4a48bf1c5107b9f4abe3ca1171a" +"@webassemblyjs/helper-module-context@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.5.13.tgz#dc29ddfb51ed657655286f94a5d72d8a489147c5" + dependencies: + debug "^3.1.0" + mamacro "^0.0.3" + +"@webassemblyjs/helper-module-context@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.6.tgz#116d19a51a6cebc8900ad53ca34ff8269c668c23" + dependencies: + mamacro "^0.0.3" + +"@webassemblyjs/helper-wasm-bytecode@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.5.13.tgz#03245817f0a762382e61733146f5773def15a747" + +"@webassemblyjs/helper-wasm-bytecode@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.6.tgz#98e515eaee611aa6834eb5f6a7f8f5b29fefb6f1" -"@webassemblyjs/helper-wasm-section@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.9.tgz#aec9486ab5d56e3cb5252a7ed88777b6792ac624" +"@webassemblyjs/helper-wasm-section@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.13.tgz#efc76f44a10d3073b584b43c38a179df173d5c7d" dependencies: - "@webassemblyjs/ast" "1.5.9" - "@webassemblyjs/helper-buffer" "1.5.9" - "@webassemblyjs/helper-wasm-bytecode" "1.5.9" - "@webassemblyjs/wasm-gen" "1.5.9" + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-buffer" "1.5.13" + "@webassemblyjs/helper-wasm-bytecode" "1.5.13" + "@webassemblyjs/wasm-gen" "1.5.13" debug "^3.1.0" -"@webassemblyjs/ieee754@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.5.9.tgz#846856ece040c7debd5b5645b319c26523613bcf" +"@webassemblyjs/helper-wasm-section@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.6.tgz#783835867bdd686df7a95377ab64f51a275e8333" + dependencies: + "@webassemblyjs/ast" "1.7.6" + "@webassemblyjs/helper-buffer" "1.7.6" + "@webassemblyjs/helper-wasm-bytecode" "1.7.6" + "@webassemblyjs/wasm-gen" "1.7.6" + +"@webassemblyjs/ieee754@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.5.13.tgz#573e97c8c12e4eebb316ca5fde0203ddd90b0364" dependencies: ieee754 "^1.1.11" -"@webassemblyjs/leb128@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.5.9.tgz#7249443a0fd7574a7e3c1c39532535c735390bbc" +"@webassemblyjs/ieee754@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.7.6.tgz#c34fc058f2f831fae0632a8bb9803cf2d3462eb1" dependencies: - leb "^0.3.0" + "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/wasm-edit@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.9.tgz#9b8e054b2d305a7e0528088571c95904bd73df48" +"@webassemblyjs/leb128@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.5.13.tgz#ab52ebab9cec283c1c1897ac1da833a04a3f4cee" dependencies: - "@webassemblyjs/ast" "1.5.9" - "@webassemblyjs/helper-buffer" "1.5.9" - "@webassemblyjs/helper-wasm-bytecode" "1.5.9" - "@webassemblyjs/helper-wasm-section" "1.5.9" - "@webassemblyjs/wasm-gen" "1.5.9" - "@webassemblyjs/wasm-opt" "1.5.9" - "@webassemblyjs/wasm-parser" "1.5.9" - "@webassemblyjs/wast-printer" "1.5.9" - debug "^3.1.0" + long "4.0.0" -"@webassemblyjs/wasm-gen@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.9.tgz#85e07c047fab917e06b18dee4d16342a2fd3c59c" +"@webassemblyjs/leb128@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.7.6.tgz#197f75376a29f6ed6ace15898a310d871d92f03b" dependencies: - "@webassemblyjs/ast" "1.5.9" - "@webassemblyjs/helper-wasm-bytecode" "1.5.9" - "@webassemblyjs/ieee754" "1.5.9" - "@webassemblyjs/leb128" "1.5.9" + "@xtuc/long" "4.2.1" + +"@webassemblyjs/utf8@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.5.13.tgz#6b53d2cd861cf94fa99c1f12779dde692fbc2469" -"@webassemblyjs/wasm-opt@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.9.tgz#ccac17c41a044c167bc95d3e8645cf889a137ce5" +"@webassemblyjs/utf8@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.7.6.tgz#eb62c66f906af2be70de0302e29055d25188797d" + +"@webassemblyjs/wasm-edit@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.13.tgz#c9cef5664c245cf11b3b3a73110c9155831724a8" dependencies: - "@webassemblyjs/ast" "1.5.9" - "@webassemblyjs/helper-buffer" "1.5.9" - "@webassemblyjs/wasm-gen" "1.5.9" - "@webassemblyjs/wasm-parser" "1.5.9" + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-buffer" "1.5.13" + "@webassemblyjs/helper-wasm-bytecode" "1.5.13" + "@webassemblyjs/helper-wasm-section" "1.5.13" + "@webassemblyjs/wasm-gen" "1.5.13" + "@webassemblyjs/wasm-opt" "1.5.13" + "@webassemblyjs/wasm-parser" "1.5.13" + "@webassemblyjs/wast-printer" "1.5.13" + debug "^3.1.0" + +"@webassemblyjs/wasm-edit@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.6.tgz#fa41929160cd7d676d4c28ecef420eed5b3733c5" + dependencies: + "@webassemblyjs/ast" "1.7.6" + "@webassemblyjs/helper-buffer" "1.7.6" + "@webassemblyjs/helper-wasm-bytecode" "1.7.6" + "@webassemblyjs/helper-wasm-section" "1.7.6" + "@webassemblyjs/wasm-gen" "1.7.6" + "@webassemblyjs/wasm-opt" "1.7.6" + "@webassemblyjs/wasm-parser" "1.7.6" + "@webassemblyjs/wast-printer" "1.7.6" + +"@webassemblyjs/wasm-gen@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.13.tgz#8e6ea113c4b432fa66540189e79b16d7a140700e" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-wasm-bytecode" "1.5.13" + "@webassemblyjs/ieee754" "1.5.13" + "@webassemblyjs/leb128" "1.5.13" + "@webassemblyjs/utf8" "1.5.13" + +"@webassemblyjs/wasm-gen@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.6.tgz#695ac38861ab3d72bf763c8c75e5f087ffabc322" + dependencies: + "@webassemblyjs/ast" "1.7.6" + "@webassemblyjs/helper-wasm-bytecode" "1.7.6" + "@webassemblyjs/ieee754" "1.7.6" + "@webassemblyjs/leb128" "1.7.6" + "@webassemblyjs/utf8" "1.7.6" + +"@webassemblyjs/wasm-opt@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.13.tgz#147aad7717a7ee4211c36b21a5f4c30dddf33138" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-buffer" "1.5.13" + "@webassemblyjs/wasm-gen" "1.5.13" + "@webassemblyjs/wasm-parser" "1.5.13" debug "^3.1.0" -"@webassemblyjs/wasm-parser@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.9.tgz#ddab84da4957b64aafbc61e4ab706cc667082f32" - dependencies: - "@webassemblyjs/ast" "1.5.9" - "@webassemblyjs/helper-api-error" "1.5.9" - "@webassemblyjs/helper-wasm-bytecode" "1.5.9" - "@webassemblyjs/ieee754" "1.5.9" - "@webassemblyjs/leb128" "1.5.9" - "@webassemblyjs/wasm-parser" "1.5.9" - -"@webassemblyjs/wast-parser@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.5.9.tgz#193d24ccf4742a5f8f1915936680ab2314011df2" - dependencies: - "@webassemblyjs/ast" "1.5.9" - "@webassemblyjs/floating-point-hex-parser" "1.5.9" - "@webassemblyjs/helper-api-error" "1.5.9" - "@webassemblyjs/helper-code-frame" "1.5.9" - "@webassemblyjs/helper-fsm" "1.5.9" +"@webassemblyjs/wasm-opt@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.6.tgz#fbafa78e27e1a75ab759a4b658ff3d50b4636c21" + dependencies: + "@webassemblyjs/ast" "1.7.6" + "@webassemblyjs/helper-buffer" "1.7.6" + "@webassemblyjs/wasm-gen" "1.7.6" + "@webassemblyjs/wasm-parser" "1.7.6" + +"@webassemblyjs/wasm-parser@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.13.tgz#6f46516c5bb23904fbdf58009233c2dd8a54c72f" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-api-error" "1.5.13" + "@webassemblyjs/helper-wasm-bytecode" "1.5.13" + "@webassemblyjs/ieee754" "1.5.13" + "@webassemblyjs/leb128" "1.5.13" + "@webassemblyjs/utf8" "1.5.13" + +"@webassemblyjs/wasm-parser@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.6.tgz#84eafeeff405ad6f4c4b5777d6a28ae54eed51fe" + dependencies: + "@webassemblyjs/ast" "1.7.6" + "@webassemblyjs/helper-api-error" "1.7.6" + "@webassemblyjs/helper-wasm-bytecode" "1.7.6" + "@webassemblyjs/ieee754" "1.7.6" + "@webassemblyjs/leb128" "1.7.6" + "@webassemblyjs/utf8" "1.7.6" + +"@webassemblyjs/wast-parser@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.5.13.tgz#5727a705d397ae6a3ae99d7f5460acf2ec646eea" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/floating-point-hex-parser" "1.5.13" + "@webassemblyjs/helper-api-error" "1.5.13" + "@webassemblyjs/helper-code-frame" "1.5.13" + "@webassemblyjs/helper-fsm" "1.5.13" long "^3.2.0" mamacro "^0.0.3" -"@webassemblyjs/wast-printer@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.5.9.tgz#16605d90a481c01a130b7c4edeb2bce503787eb4" +"@webassemblyjs/wast-parser@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.7.6.tgz#ca4d20b1516e017c91981773bd7e819d6bd9c6a7" + dependencies: + "@webassemblyjs/ast" "1.7.6" + "@webassemblyjs/floating-point-hex-parser" "1.7.6" + "@webassemblyjs/helper-api-error" "1.7.6" + "@webassemblyjs/helper-code-frame" "1.7.6" + "@webassemblyjs/helper-fsm" "1.7.6" + "@xtuc/long" "4.2.1" + mamacro "^0.0.3" + +"@webassemblyjs/wast-printer@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.5.13.tgz#bb34d528c14b4f579e7ec11e793ec50ad7cd7c95" dependencies: - "@webassemblyjs/ast" "1.5.9" - "@webassemblyjs/wast-parser" "1.5.9" + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/wast-parser" "1.5.13" long "^3.2.0" +"@webassemblyjs/wast-printer@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.7.6.tgz#a6002c526ac5fa230fe2c6d2f1bdbf4aead43a5e" + dependencies: + "@webassemblyjs/ast" "1.7.6" + "@webassemblyjs/wast-parser" "1.7.6" + "@xtuc/long" "4.2.1" + +"@webpack-contrib/schema-utils@^1.0.0-beta.0": + version "1.0.0-beta.0" + resolved "https://registry.yarnpkg.com/@webpack-contrib/schema-utils/-/schema-utils-1.0.0-beta.0.tgz#bf9638c9464d177b48209e84209e23bee2eb4f65" + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + chalk "^2.3.2" + strip-ansi "^4.0.0" + text-table "^0.2.0" + webpack-log "^1.1.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + +"@xtuc/long@4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.1.tgz#5c85d662f76fa1d34575766c5dcd6615abcd30d8" + abab@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" +abab@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -1622,34 +1994,27 @@ acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" -acorn@^5.0.0, acorn@^5.3.0, acorn@^5.5.0: - version "5.5.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" - -acorn@^5.5.3: - version "5.6.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.6.1.tgz#c9e50c3e3717cf897f1b071ceadbb543bbc0a8d4" +acorn@^5.0.0, acorn@^5.3.0, acorn@^5.5.0, acorn@^5.5.3, acorn@^5.6.2, acorn@^5.7.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8" address@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9" -agent-base@2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.1.1.tgz#d6de10d5af6132d5bd692427d46fc538539094c7" - dependencies: - extend "~3.0.0" - semver "~5.0.1" +ajv-errors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.0.tgz#ecf021fa108fd17dfb5e6b383f2dd233e31ffc59" ajv-keywords@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" -ajv-keywords@^3.1.0, ajv-keywords@^3.2.0: +ajv-keywords@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" -ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: +ajv@^5.0.0, ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" dependencies: @@ -1658,13 +2023,13 @@ ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" -ajv@^6.1.0, ajv@^6.4.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.0.tgz#4c8affdf80887d8f132c9c52ab8a2dc4d0b7b24c" +ajv@^6.1.0: + version "6.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.2.tgz#678495f9b82f7cca6be248dd92f59bff5e1f4360" dependencies: fast-deep-equal "^2.0.1" fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" + json-schema-traverse "^0.4.1" uri-js "^4.2.1" align-text@^0.1.1, align-text@^0.1.3: @@ -1675,7 +2040,7 @@ align-text@^0.1.1, align-text@^0.1.3: longest "^1.0.1" repeat-string "^1.5.2" -alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: +alphanum-sort@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" @@ -1683,12 +2048,6 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" -ansi-align@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" - dependencies: - string-width "^2.0.0" - ansi-escapes@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" @@ -1719,14 +2078,6 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" - -any-observable@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.2.0.tgz#c67870058003579009083f54ac0abafb5c33d242" - any-observable@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" @@ -1738,39 +2089,27 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -app-builder-bin@1.9.11: - version "1.9.11" - resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.9.11.tgz#bf04d4cdfc0a8ed83acedc5f9ab16be73b5a3a57" - -app-builder-bin@1.9.5: - version "1.9.5" - resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.9.5.tgz#f4e2b26e26578c9a48cea85da44f0bc1a7582fc0" - -app-builder-bin@1.9.7: - version "1.9.7" - resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.9.7.tgz#9f01439fa8088a43471df9e5e071dd3880a8cff0" - -app-root-path@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" - -append-transform@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" +append-transform@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" dependencies: - default-require-extensions "^1.0.0" + default-require-extensions "^2.0.0" aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" arch@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.0.tgz#3613aa46149064b3c1f0607919bf1d4786e82889" + version "2.1.1" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.1.tgz#8f5c2731aa35a30929221bb0640eed65175ec84e" + +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" are-we-there-yet@~1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" dependencies: delegates "^1.0.0" readable-stream "^2.0.6" @@ -1799,10 +2138,6 @@ arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" -array-differ@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" - array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" @@ -1860,13 +2195,6 @@ arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" -ascli@~1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ascli/-/ascli-1.0.1.tgz#bcfa5974a62f18e81cabaeb49732ab4a88f906bc" - dependencies: - colour "~0.7.1" - optjs "~3.2.2" - asn1.js@^4.0.0: version "4.10.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" @@ -1876,55 +2204,45 @@ asn1.js@^4.0.0: minimalistic-assert "^1.0.0" asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + dependencies: + safer-buffer "~2.1.0" assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - assert@^1.1.1: version "1.4.1" resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" dependencies: util "0.10.3" -assertion-error@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.0.tgz#c7f85438fdd466bc7ca16ab90c81513797a5d23b" +assertion-error@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" -ast-types@0.10.1: - version "0.10.1" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.10.1.tgz#f52fca9715579a14f841d67d7f8d25432ab6a3dd" - -ast-types@0.11.5: - version "0.11.5" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.5.tgz#9890825d660c03c28339f315e9fa0a360e31ec28" - -ast-types@0.x.x: - version "0.11.3" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.3.tgz#c20757fe72ee71278ea0ff3d87e5c2ca30d9edf8" +ast-transform@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/ast-transform/-/ast-transform-0.0.0.tgz#74944058887d8283e189d954600947bc98fe0062" + dependencies: + escodegen "~1.2.0" + esprima "~1.0.4" + through "~2.3.4" -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" +ast-types@^0.7.0: + version "0.7.8" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.7.8.tgz#902d2e0d60d071bdcd46dc115e1809ed11c138a9" async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" -async-exit-hook@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz#8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3" - async-foreach@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" @@ -1934,22 +2252,22 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" async-validator@~1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/async-validator/-/async-validator-1.8.2.tgz#b77597226e96242f8d531c0d46ae295f62422ba4" + version "1.8.5" + resolved "https://registry.yarnpkg.com/async-validator/-/async-validator-1.8.5.tgz#dc3e08ec1fd0dddb67e60842f02c0cd1cec6d7f0" dependencies: babel-runtime "6.x" -async@^1.4.0, async@^1.5.0, async@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - -async@^2.1.4, async@^2.3.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" +async@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.4.0.tgz#4990200f18ea5b837c2cc4f8c031a6985c385611" dependencies: lodash "^4.14.0" -async@^2.6.0: +async@^1.4.0, async@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@^2.3.0: version "2.6.1" resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" dependencies: @@ -1963,39 +2281,31 @@ atob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.1.tgz#ae2d5a729477f289d60dd7f96a6314a22dd6c22a" -autoprefixer@^6.3.1: - version "6.7.7" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" - dependencies: - browserslist "^1.7.6" - caniuse-db "^1.0.30000634" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^5.2.16" - postcss-value-parser "^3.2.3" - -autoprefixer@^8.4.1: - version "8.5.0" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.5.0.tgz#89a39b1316fbe7bc2b4997a0c7dad0149d99511c" +autoprefixer@^8.6.5: + version "8.6.5" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.6.5.tgz#343f3d193ed568b3208e00117a1b96eb691d4ee9" dependencies: - browserslist "^3.2.7" - caniuse-lite "^1.0.30000839" + browserslist "^3.2.8" + caniuse-lite "^1.0.30000864" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^6.0.22" + postcss "^6.0.23" postcss-value-parser "^3.2.3" -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" -aws4@^1.2.1, aws4@^1.6.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289" +aws4@^1.6.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + +axios@^0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.0.tgz#32d53e4851efdc0a11993b6cd000789d70c05102" + dependencies: + follow-redirects "^1.3.0" + is-buffer "^1.1.5" babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" @@ -2005,7 +2315,7 @@ babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-core@^6.0.0, babel-core@^6.26.0: +babel-core@^6.26.0, babel-core@~6: version "6.26.3" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" dependencies: @@ -2033,15 +2343,15 @@ babel-core@^7.0.0-0: version "7.0.0-bridge.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" -babel-eslint@^8.2.3: - version "8.2.3" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.3.tgz#1a2e6681cc9bc4473c32899e59915e19cd6733cf" +babel-eslint@^8.2.5: + version "8.2.6" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.6.tgz#6270d0c73205628067c0f7ae1693a9e797acefd9" dependencies: "@babel/code-frame" "7.0.0-beta.44" "@babel/traverse" "7.0.0-beta.44" "@babel/types" "7.0.0-beta.44" babylon "7.0.0-beta.44" - eslint-scope "~3.7.1" + eslint-scope "3.7.1" eslint-visitor-keys "^1.0.0" babel-generator@^6.18.0, babel-generator@^6.26.0: @@ -2057,117 +2367,6 @@ babel-generator@^6.18.0, babel-generator@^6.26.0: source-map "^0.5.7" trim-right "^1.0.1" -babel-helper-bindify-decorators@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" - dependencies: - babel-helper-explode-assignable-expression "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-call-delegate@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-define-map@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-explode-assignable-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-explode-class@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" - dependencies: - babel-helper-bindify-decorators "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" - dependencies: - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-get-function-arity@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-hoist-variables@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-optimise-call-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-regex@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-remap-async-to-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-replace-supers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" - dependencies: - babel-helper-optimise-call-expression "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - babel-helper-vue-jsx-merge-props@^2.0.0, babel-helper-vue-jsx-merge-props@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz#22aebd3b33902328e513293a8e4992b384f9f1b6" @@ -2179,24 +2378,26 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-jest@^22.0.4, babel-jest@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.4.3.tgz#4b7a0b6041691bbd422ab49b3b73654a49a6627a" +babel-loader@8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.2.tgz#2079b8ec1628284a929241da3d90f5b3de2a5ae5" dependencies: - babel-plugin-istanbul "^4.1.5" - babel-preset-jest "^22.4.3" + find-cache-dir "^1.0.0" + loader-utils "^1.0.2" + mkdirp "^0.5.1" + util.promisify "^1.0.0" -babel-loader@^8.0.0-0: - version "8.0.0-beta.2" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.0-beta.2.tgz#4d5b67c964dc8c9cba866fd13d6b90df3acf8723" +babel-loader@^7.1.5: + version "7.1.5" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.5.tgz#e3ee0cd7394aa557e013b02d3e492bfd07aa6d68" dependencies: find-cache-dir "^1.0.0" loader-utils "^1.0.2" mkdirp "^0.5.1" -babel-loader@^8.0.0-beta.2: - version "8.0.0-beta.3" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.0-beta.3.tgz#49efeea6e8058d5af860a18a6de88b8c1450645b" +babel-loader@^8.0.0-0: + version "8.0.0-beta.4" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.0-beta.4.tgz#c3fab00696c385c70c04dbe486391f0eb996f345" dependencies: find-cache-dir "^1.0.0" loader-utils "^1.0.2" @@ -2209,429 +2410,51 @@ babel-messages@^6.23.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-check-es2015-constants@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" - dependencies: - babel-runtime "^6.22.0" - babel-plugin-component@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-component/-/babel-plugin-component-1.1.1.tgz#9b023a23ff5c9aae0fd56c5a18b9cab8c4d45eea" dependencies: "@babel/helper-module-imports" "7.0.0-beta.35" -babel-plugin-dynamic-import-node@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-1.2.0.tgz#f91631e703e0595e47d4beafbb088576c87fbeee" +babel-plugin-dynamic-import-node@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.0.0.tgz#d6fc3f6c5e3bdc34e49c15faca7ce069755c0a57" dependencies: babel-plugin-syntax-dynamic-import "^6.18.0" - -babel-plugin-istanbul@^4.1.5: - version "4.1.6" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" - dependencies: - babel-plugin-syntax-object-rest-spread "^6.13.0" - find-up "^2.1.0" - istanbul-lib-instrument "^1.10.1" - test-exclude "^4.2.1" - -babel-plugin-jest-hoist@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.3.tgz#7d8bcccadc2667f96a0dcc6afe1891875ee6c14a" - -babel-plugin-syntax-async-functions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" - -babel-plugin-syntax-async-generators@^6.5.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" - -babel-plugin-syntax-class-constructor-call@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" - -babel-plugin-syntax-class-properties@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" - -babel-plugin-syntax-decorators@^6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" + object.assign "^4.1.0" babel-plugin-syntax-dynamic-import@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" -babel-plugin-syntax-dynamic-import@^7.0.0-beta.3: - version "7.0.0-beta.3" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-7.0.0-beta.3.tgz#4f2e87a6ac12947422392b76a526cdc766a607ac" - -babel-plugin-syntax-exponentiation-operator@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" - -babel-plugin-syntax-export-extensions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" - -babel-plugin-syntax-flow@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" - -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" - -babel-plugin-syntax-trailing-function-commas@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" - -babel-plugin-transform-async-generator-functions@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" +babel-plugin-transform-vue-jsx@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-4.0.1.tgz#2c8bddce87a6ef09eaa59869ff1bfbeeafc5f88d" dependencies: - babel-helper-remap-async-to-generator "^6.24.1" - babel-plugin-syntax-async-generators "^6.5.0" - babel-runtime "^6.22.0" + esutils "^2.0.2" -babel-plugin-transform-async-to-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" dependencies: - babel-helper-remap-async-to-generator "^6.24.1" - babel-plugin-syntax-async-functions "^6.8.0" - babel-runtime "^6.22.0" + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" -babel-plugin-transform-class-constructor-call@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz#80dc285505ac067dcb8d6c65e2f6f11ab7765ef9" +babel-runtime@6.x, babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: - babel-plugin-syntax-class-constructor-call "^6.18.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" + core-js "^2.4.0" + regenerator-runtime "^0.11.0" -babel-plugin-transform-class-properties@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" - dependencies: - babel-helper-function-name "^6.24.1" - babel-plugin-syntax-class-properties "^6.8.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-decorators@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" - dependencies: - babel-helper-explode-class "^6.24.1" - babel-plugin-syntax-decorators "^6.13.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-arrow-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoping@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" - dependencies: - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-plugin-transform-es2015-classes@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" - dependencies: - babel-helper-define-map "^6.24.1" - babel-helper-function-name "^6.24.1" - babel-helper-optimise-call-expression "^6.24.1" - babel-helper-replace-supers "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-computed-properties@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-destructuring@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-duplicate-keys@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-for-of@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-modules-amd@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" - dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-commonjs@^6.24.1, babel-plugin-transform-es2015-modules-commonjs@^6.26.0: - version "6.26.2" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" - dependencies: - babel-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-types "^6.26.0" - -babel-plugin-transform-es2015-modules-systemjs@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-umd@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" - dependencies: - babel-plugin-transform-es2015-modules-amd "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-object-super@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" - dependencies: - babel-helper-replace-supers "^6.24.1" - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-parameters@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" - dependencies: - babel-helper-call-delegate "^6.24.1" - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-shorthand-properties@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-spread@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-sticky-regex@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-template-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-typeof-symbol@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-unicode-regex@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - regexpu-core "^2.0.0" - -babel-plugin-transform-exponentiation-operator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" - dependencies: - babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" - babel-plugin-syntax-exponentiation-operator "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-export-extensions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653" - dependencies: - babel-plugin-syntax-export-extensions "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-flow-strip-types@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" - dependencies: - babel-plugin-syntax-flow "^6.18.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-object-rest-spread@^6.22.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" - dependencies: - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.26.0" - -babel-plugin-transform-regenerator@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" - dependencies: - regenerator-transform "^0.10.0" - -babel-plugin-transform-strict-mode@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-vue-jsx@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-4.0.1.tgz#2c8bddce87a6ef09eaa59869ff1bfbeeafc5f88d" - dependencies: - esutils "^2.0.2" - -babel-preset-es2015@^6.9.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" - dependencies: - babel-plugin-check-es2015-constants "^6.22.0" - babel-plugin-transform-es2015-arrow-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoping "^6.24.1" - babel-plugin-transform-es2015-classes "^6.24.1" - babel-plugin-transform-es2015-computed-properties "^6.24.1" - babel-plugin-transform-es2015-destructuring "^6.22.0" - babel-plugin-transform-es2015-duplicate-keys "^6.24.1" - babel-plugin-transform-es2015-for-of "^6.22.0" - babel-plugin-transform-es2015-function-name "^6.24.1" - babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.24.1" - babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-plugin-transform-es2015-modules-systemjs "^6.24.1" - babel-plugin-transform-es2015-modules-umd "^6.24.1" - babel-plugin-transform-es2015-object-super "^6.24.1" - babel-plugin-transform-es2015-parameters "^6.24.1" - babel-plugin-transform-es2015-shorthand-properties "^6.24.1" - babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.24.1" - babel-plugin-transform-es2015-template-literals "^6.22.0" - babel-plugin-transform-es2015-typeof-symbol "^6.22.0" - babel-plugin-transform-es2015-unicode-regex "^6.24.1" - babel-plugin-transform-regenerator "^6.24.1" - -babel-preset-jest@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.3.tgz#e92eef9813b7026ab4ca675799f37419b5a44156" - dependencies: - babel-plugin-jest-hoist "^22.4.3" - babel-plugin-syntax-object-rest-spread "^6.13.0" - -babel-preset-stage-1@^6.5.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0" - dependencies: - babel-plugin-transform-class-constructor-call "^6.24.1" - babel-plugin-transform-export-extensions "^6.22.0" - babel-preset-stage-2 "^6.24.1" - -babel-preset-stage-2@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" - dependencies: - babel-plugin-syntax-dynamic-import "^6.18.0" - babel-plugin-transform-class-properties "^6.24.1" - babel-plugin-transform-decorators "^6.24.1" - babel-preset-stage-3 "^6.24.1" - -babel-preset-stage-3@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" - dependencies: - babel-plugin-syntax-trailing-function-commas "^6.22.0" - babel-plugin-transform-async-generator-functions "^6.24.1" - babel-plugin-transform-async-to-generator "^6.24.1" - babel-plugin-transform-exponentiation-operator "^6.24.1" - babel-plugin-transform-object-rest-spread "^6.22.0" - -babel-register@^6.26.0, babel-register@^6.9.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - dependencies: - babel-core "^6.26.0" - babel-runtime "^6.26.0" - core-js "^2.5.0" - home-or-tmp "^2.0.0" - lodash "^4.17.4" - mkdirp "^0.5.1" - source-map-support "^0.4.15" - -babel-runtime@6.x, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.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" +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: babel-runtime "^6.26.0" babel-traverse "^6.26.0" @@ -2639,7 +2462,7 @@ babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: babylon "^6.18.0" lodash "^4.17.4" -babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: +babel-traverse@^6.18.0, babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" dependencies: @@ -2653,7 +2476,7 @@ babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: invariant "^2.2.2" lodash "^4.17.4" -babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: +babel-types@^6.18.0, babel-types@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" dependencies: @@ -2666,27 +2489,23 @@ babylon@7.0.0-beta.44: version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d" -babylon@7.0.0-beta.47, babylon@^7.0.0-beta.47: +babylon@7.0.0-beta.47: version "7.0.0-beta.47" resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.47.tgz#6d1fa44f0abec41ab7c780481e62fd9aafbdea80" -babylon@^6.17.3, babylon@^6.18.0: +babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" -balanced-match@^0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" - balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" -base64-js@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" +base64-js@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" -base64-js@^1.0.2, base64-js@^1.2.3: +base64-js@^1.0.2, base64-js@^1.1.2: version "1.3.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" @@ -2707,36 +2526,42 @@ batch@0.6.1: resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" bcrypt-pbkdf@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" dependencies: tweetnacl "^0.14.3" +bfj-node4@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/bfj-node4/-/bfj-node4-5.3.1.tgz#e23d8b27057f1d0214fc561142ad9db998f26830" + dependencies: + bluebird "^3.5.1" + check-types "^7.3.0" + tryer "^1.0.0" + big.js@^3.1.3: version "3.2.0" resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" +bignumber.js@^4.0.4: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-4.1.0.tgz#db6f14067c140bd46624815a7916c92d9b6c24b1" + binary-extensions@^1.0.0: version "1.11.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" -binaryextensions@2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.1.1.tgz#3209a51ca4a4ad541a3b8d3d6a6d5b83a2485935" - block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" dependencies: inherits "~2.0.0" -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@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" -bluebird@^3.0.5, bluebird@^3.1.1, bluebird@^3.5.0, bluebird@^3.5.1: +bluebird@^3.1.1, bluebird@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" @@ -2774,37 +2599,7 @@ boolbase@^1.0.0, boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - dependencies: - hoek "2.x.x" - -boom@4.x.x: - version "4.3.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" - dependencies: - hoek "4.x.x" - -boom@5.x.x: - version "5.2.0" - resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" - dependencies: - hoek "4.x.x" - -boxen@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" - dependencies: - ansi-align "^2.0.0" - camelcase "^4.0.0" - chalk "^2.0.1" - cli-boxes "^1.0.0" - string-width "^2.0.0" - term-size "^1.2.0" - widest-line "^2.0.0" - -brace-expansion@^1.0.0, brace-expansion@^1.1.7: +brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" dependencies: @@ -2834,23 +2629,42 @@ braces@^2.3.0, braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" +brfs@^1.3.0, brfs@^1.4.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/brfs/-/brfs-1.6.1.tgz#b78ce2336d818e25eea04a0947cba6d4fb8849c3" + dependencies: + quote-stream "^1.0.1" + resolve "^1.1.5" + static-module "^2.2.0" + through2 "^2.0.0" + brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" +brotli@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/brotli/-/brotli-1.3.2.tgz#525a9cad4fcba96475d7d388f6aecb13eed52f46" + dependencies: + base64-js "^1.1.2" + +browser-headers@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/browser-headers/-/browser-headers-0.4.0.tgz#7b6b4d3cc0cecc9ddf503768147932105c421734" + browser-process-hrtime@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" -browser-resolve@^1.11.2: - version "1.11.2" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" +browser-resolve@^1.8.1: + version "1.11.3" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" dependencies: resolve "1.1.7" -browser-stdout@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" @@ -2872,12 +2686,21 @@ browserify-cipher@^1.0.0: evp_bytestokey "^1.0.0" browserify-des@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.1.tgz#3343124db6d7ad53e26a8826318712bdc8450f9c" + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" dependencies: cipher-base "^1.0.1" des.js "^1.0.0" inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-optional@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-optional/-/browserify-optional-1.0.1.tgz#1e13722cfde0d85f121676c2a72ced533a018869" + dependencies: + ast-transform "0.0.0" + ast-types "^0.7.0" + browser-resolve "^1.8.1" browserify-rsa@^4.0.0: version "4.0.1" @@ -2904,29 +2727,40 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: - version "1.7.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" +browserslist@^3.0.0, browserslist@^3.2.8: + version "3.2.8" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" dependencies: - caniuse-db "^1.0.30000639" - electron-to-chromium "^1.2.7" + caniuse-lite "^1.0.30000844" + electron-to-chromium "^1.3.47" -browserslist@^3.0.0, browserslist@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.7.tgz#aa488634d320b55e88bab0256184dbbcca1e6de9" +browserslist@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.0.1.tgz#61c05ce2a5843c7d96166408bc23d58b5416e818" dependencies: - caniuse-lite "^1.0.30000835" - electron-to-chromium "^1.3.45" + caniuse-lite "^1.0.30000865" + electron-to-chromium "^1.3.52" + node-releases "^1.0.0-alpha.10" -bser@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" +browserslist@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.1.0.tgz#81cbb8e52dfa09918f93c6e051d779cb7360785d" dependencies: - node-int64 "^0.4.0" + caniuse-lite "^1.0.30000878" + electron-to-chromium "^1.3.61" + node-releases "^1.0.0-alpha.11" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + +buffer-equal@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b" buffer-from@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531" + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" buffer-indexof@^1.0.0: version "1.1.1" @@ -2936,6 +2770,13 @@ buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" +buffer@5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.0.2.tgz#41d0407ff76782e9ec19f52f88e237ce6bb0de6d" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + buffer@^4.3.0: version "4.9.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" @@ -2944,71 +2785,12 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -builder-util-runtime@4.2.1, builder-util-runtime@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.2.1.tgz#0caa358f1331d70680010141ca591952b69b35bc" - dependencies: - bluebird-lst "^1.0.5" - debug "^3.1.0" - fs-extra-p "^4.6.0" - sax "^1.2.4" - -builder-util@5.11.1: - version "5.11.1" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.11.1.tgz#e1540935bc0efcb3948ae364a2f71e08d7bc82e0" +buffer@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.0.tgz#53cf98241100099e9eeae20ee6d51d21b16e541e" dependencies: - "7zip-bin" "~4.0.2" - app-builder-bin "1.9.5" - bluebird-lst "^1.0.5" - builder-util-runtime "^4.2.1" - chalk "^2.4.1" - debug "^3.1.0" - fs-extra-p "^4.6.0" - is-ci "^1.1.0" - js-yaml "^3.11.0" - lazy-val "^1.0.3" - semver "^5.5.0" - source-map-support "^0.5.6" - stat-mode "^0.2.2" - temp-file "^3.1.2" - -builder-util@5.11.2: - version "5.11.2" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.11.2.tgz#2d4829f0743ce1b654e94586fade63fd6cfefae5" - dependencies: - "7zip-bin" "~4.0.2" - app-builder-bin "1.9.7" - bluebird-lst "^1.0.5" - builder-util-runtime "^4.2.1" - chalk "^2.4.1" - debug "^3.1.0" - fs-extra-p "^4.6.0" - is-ci "^1.1.0" - js-yaml "^3.11.0" - lazy-val "^1.0.3" - semver "^5.5.0" - source-map-support "^0.5.6" - stat-mode "^0.2.2" - temp-file "^3.1.2" - -builder-util@^5.11.0, builder-util@^5.11.2: - version "5.11.4" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.11.4.tgz#24d72aa567ecfeacca72b0740b4ddbffaaef617c" - dependencies: - "7zip-bin" "~4.0.2" - app-builder-bin "1.9.11" - bluebird-lst "^1.0.5" - builder-util-runtime "^4.2.1" - chalk "^2.4.1" - debug "^3.1.0" - fs-extra-p "^4.6.0" - is-ci "^1.1.0" - js-yaml "^3.11.0" - lazy-val "^1.0.3" - semver "^5.5.0" - source-map-support "^0.5.6" - stat-mode "^0.2.2" - temp-file "^3.1.2" + base64-js "^1.0.2" + ieee754 "^1.1.4" builtin-modules@^1.0.0: version "1.1.1" @@ -3018,12 +2800,6 @@ builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" -bytebuffer@~5: - version "5.0.1" - resolved "https://registry.yarnpkg.com/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd" - dependencies: - long "~3" - bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -3069,17 +2845,20 @@ cache-loader@^1.2.2: neo-async "^2.5.0" schema-utils "^0.4.2" -cacheable-request@^2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" +cachedir@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-1.3.0.tgz#5e01928bf2d95b5edd94b0942188246740e0dbc4" dependencies: - clone-response "1.0.2" - get-stream "3.0.0" - http-cache-semantics "3.8.1" - keyv "3.0.0" - lowercase-keys "1.0.0" - normalize-url "2.0.1" - responselike "1.0.2" + os-homedir "^1.0.1" + +caching-transform@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-2.0.0.tgz#e1292bd92d35b6e8b1ed7075726724b3bd64eea0" + dependencies: + make-dir "^1.0.0" + md5-hex "^2.0.0" + package-hash "^2.0.0" + write-file-atomic "^2.0.0" call-me-maybe@^1.0.1: version "1.0.1" @@ -3095,10 +2874,6 @@ callsites@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - camel-case@3.0.x: version "3.0.0" resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" @@ -3117,7 +2892,7 @@ camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" -camelcase@^2.0.0, camelcase@^2.0.1: +camelcase@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" @@ -3125,45 +2900,31 @@ camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" -camelcase@^4.0.0, camelcase@^4.1.0: +camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" -caniuse-api@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" dependencies: - browserslist "^1.3.6" - caniuse-db "^1.0.30000529" + browserslist "^4.0.0" + caniuse-lite "^1.0.0" lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000842" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000842.tgz#8a82c377b8b3d6f2594478e8431ff4fd303e160c" +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000864, caniuse-lite@^1.0.30000865: + version "1.0.30000874" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000874.tgz#a641b1f1c420d58d9b132920ef6ba87bbdcd2223" -caniuse-lite@^1.0.30000835, caniuse-lite@^1.0.30000839: - version "1.0.30000842" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000842.tgz#7a198e3181a207f4b5749b8f5a1817685bf3d7df" - -capture-exit@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" - dependencies: - rsvp "^3.3.3" - -capture-stack-trace@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" +caniuse-lite@^1.0.30000878: + version "1.0.30000880" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000880.tgz#b7b6ceaf739e17d0dda0d89426cba4be16d07bb0" case-sensitive-paths-webpack-plugin@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.1.2.tgz#c899b52175763689224571dad778742e133f0192" -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" - caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -3175,24 +2936,22 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -chai-nightwatch@~0.1.x: - version "0.1.1" - resolved "https://registry.yarnpkg.com/chai-nightwatch/-/chai-nightwatch-0.1.1.tgz#1ca56de768d3c0868fe7fc2f4d32c2fe894e6be9" - dependencies: - assertion-error "1.0.0" - deep-eql "0.1.3" +chai-things@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/chai-things/-/chai-things-0.2.0.tgz#c55128378f9bb399e994f00052151984ed6ebe70" -chalk@^1.0.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" +chai@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.1.2.tgz#0f64584ba642f0f2ace2806279f4f06ca23ad73c" dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" + assertion-error "^1.0.1" + check-error "^1.0.1" + deep-eql "^3.0.0" + get-func-name "^2.0.0" + pathval "^1.0.0" + type-detect "^4.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1: +chalk@2.4.1, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.3.2, chalk@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" dependencies: @@ -3200,21 +2959,35 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4 escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" +chalk@^1.0.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: - ansi-styles "~1.0.0" - has-color "~0.1.0" - strip-ansi "~0.1.0" + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" chardet@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" +check-error@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + +check-more-types@2.24.0: + version "2.24.0" + resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" + +check-types@^7.3.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/check-types/-/check-types-7.4.0.tgz#0378ec1b9616ec71f774931a3c6516fad8c152f4" + chokidar@^2.0.0, chokidar@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.3.tgz#dcbd4f6cbb2a55b4799ba8a840ac527e5f4b1176" + version "2.0.4" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" dependencies: anymatch "^2.0.0" async-each "^1.0.0" @@ -3223,34 +2996,23 @@ chokidar@^2.0.0, chokidar@^2.0.2: inherits "^2.0.1" is-binary-path "^1.0.0" is-glob "^4.0.0" + lodash.debounce "^4.0.8" normalize-path "^2.1.1" path-is-absolute "^1.0.0" readdirp "^2.0.0" - upath "^1.0.0" + upath "^1.0.5" optionalDependencies: - fsevents "^1.1.2" + fsevents "^1.2.2" chownr@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" -chrome-trace-event@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-0.1.3.tgz#d395af2d31c87b90a716c831fe326f69768ec084" - -chromedriver@^2.38.3: - version "2.38.3" - resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-2.38.3.tgz#a432a254bc9ed1faa6edfa67cf5d1135aa2468d6" +chrome-trace-event@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48" dependencies: - del "^3.0.0" - extract-zip "^1.6.6" - kew "^0.7.0" - mkdirp "^0.5.1" - request "^2.85.0" - -chromium-pickle-js@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" + tslib "^1.9.0" ci-info@^1.0.0: version "1.1.3" @@ -3267,12 +3029,6 @@ circular-json@^0.3.1: version "0.3.3" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" -clap@^1.0.9: - version "1.2.3" - resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" - dependencies: - chalk "^1.1.3" - class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -3288,10 +3044,6 @@ clean-css@4.1.x: dependencies: source-map "0.5.x" -cli-boxes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" - cli-cursor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" @@ -3308,16 +3060,10 @@ cli-spinners@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" -cli-spinners@^1.0.1, cli-spinners@^1.1.0: +cli-spinners@^1.1.0: version "1.3.1" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a" -cli-table@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" - dependencies: - colors "1.0.3" - cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" @@ -3329,6 +3075,15 @@ cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" +clipboard@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.4.tgz#836dafd66cf0fea5d71ce5d5b0bf6e958009112d" + integrity sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ== + dependencies: + good-listener "^1.2.2" + select "^1.1.2" + tiny-emitter "^2.0.0" + clipboardy@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-1.2.3.tgz#0526361bf78724c1f20be248d428e365433c07ef" @@ -3344,7 +3099,7 @@ cliui@^2.1.0: right-align "^0.1.1" wordwrap "0.0.2" -cliui@^3.0.3, cliui@^3.2.0: +cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" dependencies: @@ -3360,10 +3115,6 @@ cliui@^4.0.0, cliui@^4.1.0: strip-ansi "^4.0.0" wrap-ansi "^2.0.0" -clone-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" - clone-deep@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713" @@ -3373,57 +3124,14 @@ clone-deep@^2.0.1: kind-of "^6.0.0" shallow-clone "^1.0.0" -clone-response@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - dependencies: - mimic-response "^1.0.0" - -clone-stats@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" - -clone-stats@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" - -clone@2.x, clone@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" - -clone@^1.0.0, clone@^1.0.2: +clone@^1.0.1, clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" -cloneable-readable@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.2.tgz#d591dee4a8f8bc15da43ce97dceeba13d43e2a65" - dependencies: - inherits "^2.0.1" - process-nextick-args "^2.0.0" - readable-stream "^2.3.5" - -cmd-shim@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-2.0.2.tgz#6fcbda99483a8fd15d7d30a196ca69d688a2efdb" - dependencies: - graceful-fs "^4.1.2" - mkdirp "~0.5.0" - co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" -co@~3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/co/-/co-3.0.6.tgz#1445f226c5eb956138e68c9ac30167ea7d2e6bda" - -coa@~1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" - dependencies: - q "^1.1.2" - coa@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.1.tgz#f3f8b0b15073e35d70263fb1042cb2c023db38af" @@ -3441,110 +3149,94 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" -color-convert@^1.3.0, color-convert@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" +color-convert@^1.9.0, color-convert@^1.9.1: + version "1.9.2" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.2.tgz#49881b8fba67df12a96bdf3f56c0aab9e7913147" dependencies: - color-name "^1.1.1" + color-name "1.1.1" -color-convert@~0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-0.5.3.tgz#bdb6c69ce660fadffe0b0007cc447e1b9f7282bd" +color-name@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" -color-name@^1.0.0, color-name@^1.1.1: +color-name@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" -color-string@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" +color-string@^1.5.2: + version "1.5.3" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" dependencies: color-name "^1.0.0" + simple-swizzle "^0.2.2" -color@^0.11.0: - version "0.11.4" - resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" - dependencies: - clone "^1.0.2" - color-convert "^1.3.0" - color-string "^0.3.0" - -colormin@^1.0.5: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" +color@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/color/-/color-3.0.0.tgz#d920b4328d534a3ac8295d68f7bd4ba6c427be9a" dependencies: - color "^0.11.0" - css-color-names "0.0.4" - has "^1.0.1" - -colors@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" - -colors@^1.1.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.0.tgz#5f20c9fef6945cb1134260aab33bfbdc8295e04e" + color-convert "^1.9.1" + color-string "^1.5.2" colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" -colour@~0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/colour/-/colour-0.7.1.tgz#9cb169917ec5d12c0736d3e8685746df1cadf778" - -combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: +combined-stream@1.0.6, combined-stream@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" dependencies: delayed-stream "~1.0.0" -commander@2.15.x, commander@^2.11.0, commander@^2.9.0, commander@~2.15.0: +commander@2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" + +commander@2.15.1: version "2.15.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" -commander@2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - dependencies: - graceful-readlink ">= 1.0.0" +commander@2.16.x, commander@~2.16.0: + version "2.16.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.16.0.tgz#f16390593996ceb4f3eeb020b31d78528f7f8a50" + +commander@^2.13.0, commander@^2.14.1, commander@^2.15.1, commander@^2.9.0: + version "2.17.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.0.tgz#9d07b25e2a6f198b76d8b756a0e8a9604a6a1a60" commander@~2.13.0: version "2.13.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" +common-tags@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.4.0.tgz#1187be4f3d4cf0c0427d43f74eef1f73501614c0" + dependencies: + babel-runtime "^6.18.0" + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" -compare-version@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080" - -compare-versions@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.2.1.tgz#a49eb7689d4caaf0b6db5220173fd279614000f7" - component-emitter@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" -compressible@~2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.13.tgz#0d1020ab924b2fdb4d6279875c7d6daba6baa7a9" +compressible@~2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.14.tgz#326c5f507fbb055f54116782b969a81b67a29da7" dependencies: - mime-db ">= 1.33.0 < 2" + mime-db ">= 1.34.0 < 2" compression@^1.5.2: - version "1.7.2" - resolved "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz#aaffbcd6aaf854b44ebb280353d5ad1651f59a69" + version "1.7.3" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz#27e0e176aaf260f7f2c2813c3e440adb9f1993db" dependencies: - accepts "~1.3.4" + accepts "~1.3.5" bytes "3.0.0" - compressible "~2.0.13" + compressible "~2.0.14" debug "2.6.9" on-headers "~1.0.1" - safe-buffer "5.1.1" + safe-buffer "5.1.2" vary "~1.1.2" concat-map@0.0.1: @@ -3559,7 +3251,7 @@ concat-stream@1.6.0: readable-stream "^2.2.2" typedarray "^0.0.6" -concat-stream@1.6.2, concat-stream@^1.5.0, concat-stream@^1.6.0: +concat-stream@^1.5.0, concat-stream@^1.6.0, concat-stream@~1.6.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" dependencies: @@ -3568,32 +3260,6 @@ concat-stream@1.6.2, concat-stream@^1.5.0, concat-stream@^1.6.0: readable-stream "^2.2.2" typedarray "^0.0.6" -condense-newlines@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/condense-newlines/-/condense-newlines-0.2.1.tgz#3de985553139475d32502c83b02f60684d24c55f" - dependencies: - extend-shallow "^2.0.1" - is-whitespace "^0.3.0" - kind-of "^3.0.2" - -config-chain@~1.1.5: - version "1.1.11" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.11.tgz#aba09747dfbe4c3e70e766a6e41586e1859fc6f2" - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -configstore@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" - dependencies: - dot-prop "^4.1.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" - connect-history-api-fallback@^1.3.0: version "1.5.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" @@ -3630,7 +3296,7 @@ content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" -convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.1: +convert-source-map@^1.1.0, convert-source-map@^1.5.0, convert-source-map@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" @@ -3657,9 +3323,9 @@ copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" -copy-webpack-plugin@^4.5.1: - version "4.5.1" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.5.1.tgz#fc4f68f4add837cc5e13d111b20715793225d29c" +copy-webpack-plugin@^4.5.2: + version "4.5.2" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.5.2.tgz#d53444a8fea2912d806e78937390ddd7e632ee5c" dependencies: cacache "^10.0.4" find-cache-dir "^1.0.0" @@ -3670,11 +3336,7 @@ copy-webpack-plugin@^4.5.1: p-limit "^1.0.0" serialize-javascript "^1.4.0" -core-js@^2.4.0, core-js@^2.5.0, core-js@^2.5.3: - version "2.5.6" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.6.tgz#0fe6d45bf3cac3ac364a9d72de7576f4eb221b9d" - -core-js@^2.4.1, core-js@^2.5.6: +core-js@^2.4.0, core-js@^2.5.0, core-js@^2.5.3, core-js@^2.5.7: version "2.5.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" @@ -3682,18 +3344,6 @@ core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" -cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892" - dependencies: - is-directory "^0.3.1" - js-yaml "^3.4.3" - minimist "^1.2.0" - object-assign "^4.1.0" - os-homedir "^1.0.1" - parse-json "^2.2.0" - require-from-string "^1.1.0" - cosmiconfig@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc" @@ -3703,6 +3353,14 @@ cosmiconfig@^4.0.0: parse-json "^4.0.0" require-from-string "^2.0.1" +cosmiconfig@^5.0.0, cosmiconfig@^5.0.2: + version "5.0.5" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.5.tgz#a809e3c2306891ce17ab70359dc8bdf661fe2cd0" + dependencies: + is-directory "^0.3.1" + js-yaml "^3.9.0" + parse-json "^4.0.0" + create-ecdh@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" @@ -3710,12 +3368,6 @@ create-ecdh@^4.0.0: bn.js "^4.1.0" elliptic "^6.0.0" -create-error-class@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" - dependencies: - capture-stack-trace "^1.0.0" - create-hash@^1.1.0, create-hash@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -3737,12 +3389,6 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -crocket@^0.9.11: - version "0.9.11" - resolved "https://registry.yarnpkg.com/crocket/-/crocket-0.9.11.tgz#288fca11ef0d3dd239b62c488265f30c8edfb0c5" - dependencies: - xpipe "*" - cross-spawn@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" @@ -3750,6 +3396,13 @@ cross-spawn@^3.0.0: lru-cache "^4.0.1" which "^1.2.9" +cross-spawn@^4: + version "4.0.2" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + cross-spawn@^5.0.1, cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -3758,7 +3411,7 @@ cross-spawn@^5.0.1, cross-spawn@^5.1.0: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^6.0.0, cross-spawn@^6.0.5: +cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" dependencies: @@ -3768,22 +3421,6 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-unzip@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/cross-unzip/-/cross-unzip-0.0.2.tgz#5183bc47a09559befcf98cc4657964999359372f" - -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - dependencies: - boom "2.x.x" - -cryptiles@3.x.x: - version "3.1.2" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" - dependencies: - boom "5.x.x" - crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -3800,34 +3437,31 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" +cryptocoins-icons@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/cryptocoins-icons/-/cryptocoins-icons-2.8.0.tgz#b718c06f32794f6ea6f03deed843f685854eca67" -css-color-names@0.0.4: +css-color-names@0.0.4, css-color-names@^0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" -css-hot-loader@^1.3.9: - version "1.3.9" - resolved "https://registry.yarnpkg.com/css-hot-loader/-/css-hot-loader-1.3.9.tgz#ed22b41126920134a4a2246d7d32113e2425c754" +css-declaration-sorter@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-3.0.1.tgz#d0e3056b0fd88dc1ea9dceff435adbe9c702a7f8" dependencies: - loader-utils "^1.1.0" - lodash "^4.17.5" - normalize-url "^1.9.1" + postcss "^6.0.0" + timsort "^0.3.0" -css-loader@^0.28.11: - version "0.28.11" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7" +css-loader@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-1.0.0.tgz#9f46aaa5ca41dbe31860e3b62b8e23c42916bf56" dependencies: babel-code-frame "^6.26.0" css-selector-tokenizer "^0.7.0" - cssnano "^3.10.0" icss-utils "^2.1.0" loader-utils "^1.0.2" lodash.camelcase "^4.3.0" - object-assign "^4.1.1" - postcss "^5.0.6" + postcss "^6.0.23" postcss-modules-extract-imports "^1.2.0" postcss-modules-local-by-default "^1.2.0" postcss-modules-scope "^1.1.0" @@ -3865,11 +3499,11 @@ css-selector-tokenizer@^0.7.0: fastparse "^1.1.1" regexpu-core "^1.0.0" -css-tree@1.0.0-alpha.27: - version "1.0.0-alpha.27" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.27.tgz#f211526909c7dc940843d83b9376ed98ddb8de47" +css-tree@1.0.0-alpha.29: + version "1.0.0-alpha.29" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39" dependencies: - mdn-data "^1.0.0" + mdn-data "~1.1.0" source-map "^0.5.3" css-tree@1.0.0-alpha25: @@ -3879,6 +3513,10 @@ css-tree@1.0.0-alpha25: mdn-data "^1.0.0" source-map "^0.5.3" +css-unit-converter@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996" + css-url-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/css-url-regex/-/css-url-regex-1.1.0.tgz#83834230cc9f74c457de59eebd1543feeb83b7ec" @@ -3887,79 +3525,92 @@ css-what@2.1: version "2.1.0" resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" -css@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/css/-/css-2.2.3.tgz#f861f4ba61e79bedc962aa548e5780fd95cbc6be" - dependencies: - inherits "^2.0.1" - source-map "^0.1.38" - source-map-resolve "^0.5.1" - urix "^0.1.0" - cssesc@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" -cssnano@^3.10.0, cssnano@^3.4.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" +cssnano-preset-default@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.0.tgz#c334287b4f7d49fb2d170a92f9214655788e3b6b" dependencies: - autoprefixer "^6.3.1" - decamelize "^1.1.2" - defined "^1.0.0" - has "^1.0.1" - object-assign "^4.0.1" - postcss "^5.0.14" - postcss-calc "^5.2.0" - postcss-colormin "^2.1.8" - postcss-convert-values "^2.3.4" - postcss-discard-comments "^2.0.4" - postcss-discard-duplicates "^2.0.1" - postcss-discard-empty "^2.0.1" - postcss-discard-overridden "^0.1.1" - postcss-discard-unused "^2.2.1" - postcss-filter-plugins "^2.0.0" - postcss-merge-idents "^2.1.5" - postcss-merge-longhand "^2.0.1" - postcss-merge-rules "^2.0.3" - postcss-minify-font-values "^1.0.2" - postcss-minify-gradients "^1.0.1" - postcss-minify-params "^1.0.4" - postcss-minify-selectors "^2.0.4" - postcss-normalize-charset "^1.1.0" - postcss-normalize-url "^3.0.7" - postcss-ordered-values "^2.1.0" - postcss-reduce-idents "^2.2.2" - postcss-reduce-initial "^1.0.0" - postcss-reduce-transforms "^1.0.3" - postcss-svgo "^2.1.1" - postcss-unique-selectors "^2.0.2" - postcss-value-parser "^3.2.3" - postcss-zindex "^2.0.1" + css-declaration-sorter "^3.0.0" + cssnano-util-raw-cache "^4.0.0" + postcss "^6.0.0" + postcss-calc "^6.0.0" + postcss-colormin "^4.0.0" + postcss-convert-values "^4.0.0" + postcss-discard-comments "^4.0.0" + postcss-discard-duplicates "^4.0.0" + postcss-discard-empty "^4.0.0" + postcss-discard-overridden "^4.0.0" + postcss-merge-longhand "^4.0.0" + postcss-merge-rules "^4.0.0" + postcss-minify-font-values "^4.0.0" + postcss-minify-gradients "^4.0.0" + postcss-minify-params "^4.0.0" + postcss-minify-selectors "^4.0.0" + postcss-normalize-charset "^4.0.0" + postcss-normalize-display-values "^4.0.0" + postcss-normalize-positions "^4.0.0" + postcss-normalize-repeat-style "^4.0.0" + postcss-normalize-string "^4.0.0" + postcss-normalize-timing-functions "^4.0.0" + postcss-normalize-unicode "^4.0.0" + postcss-normalize-url "^4.0.0" + postcss-normalize-whitespace "^4.0.0" + postcss-ordered-values "^4.0.0" + postcss-reduce-initial "^4.0.0" + postcss-reduce-transforms "^4.0.0" + postcss-svgo "^4.0.0" + postcss-unique-selectors "^4.0.0" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" -csso@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.0.tgz#acdbba5719e2c87bc801eadc032764b2e4b9d4e7" +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + +cssnano-util-raw-cache@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.0.tgz#be0a2856e25f185f5f7a2bcc0624e28b7f179a9f" dependencies: - css-tree "1.0.0-alpha.27" + postcss "^6.0.0" -csso@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" +cssnano-util-same-parent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.0.tgz#d2a3de1039aa98bc4ec25001fa050330c2a16dac" + +cssnano@^4.0.0: + version "4.0.5" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.0.5.tgz#8789b5fdbe7be05d8a0f7e45c4c789ebe712f5aa" dependencies: - clap "^1.0.9" - source-map "^0.5.3" + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.0" + is-resolvable "^1.0.0" + postcss "^6.0.0" + +csso@^3.5.0: + version "3.5.1" + resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b" + dependencies: + css-tree "1.0.0-alpha.29" cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": - version "0.3.2" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" + version "0.3.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797" -"cssstyle@>= 0.2.37 < 0.3.0": - version "0.2.37" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" +cssstyle@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.0.0.tgz#79b16d51ec5591faec60e688891f15d2a5705129" dependencies: cssom "0.3.x" +csv.js@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/csv.js/-/csv.js-1.0.6.tgz#7f9050f43368f7ed3bb3576d973884c730201481" + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -3970,26 +3621,63 @@ cyclist@~0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" +cypress@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-3.0.3.tgz#b8d64d36a8c642f5343f826b6ebac312eed5a51d" + dependencies: + "@cypress/listr-verbose-renderer" "0.4.1" + "@cypress/xvfb" "1.2.3" + "@types/blob-util" "1.3.3" + "@types/bluebird" "3.5.18" + "@types/chai" "4.0.8" + "@types/chai-jquery" "1.1.35" + "@types/jquery" "3.2.16" + "@types/lodash" "4.14.87" + "@types/minimatch" "3.0.3" + "@types/mocha" "2.2.44" + "@types/sinon" "4.0.0" + "@types/sinon-chai" "2.7.29" + bluebird "3.5.0" + cachedir "1.3.0" + chalk "2.4.1" + check-more-types "2.24.0" + commander "2.11.0" + common-tags "1.4.0" + debug "3.1.0" + execa "0.10.0" + executable "4.1.1" + extract-zip "1.6.6" + fs-extra "4.0.1" + getos "3.1.0" + glob "7.1.2" + is-ci "1.0.10" + is-installed-globally "0.1.0" + lazy-ass "1.6.0" + listr "0.12.0" + lodash "4.17.10" + log-symbols "2.2.0" + minimist "1.2.0" + progress "1.1.8" + ramda "0.24.1" + request "2.87.0" + request-progress "0.3.1" + supports-color "5.1.0" + tmp "0.0.31" + url "0.11.0" + yauzl "2.8.0" + d@1: version "1.0.0" resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" dependencies: es5-ext "^0.10.9" -dargs@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-5.1.0.tgz#ec7ea50c78564cd36c9d5ec18f66329fade27829" - dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" dependencies: assert-plus "^1.0.0" -data-uri-to-buffer@1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835" - data-urls@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.0.0.tgz#24802de4e81c298ea8a9388bb0d8e461c774684f" @@ -4006,27 +3694,21 @@ date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" -dateformat@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - de-indent@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" -debug@2, debug@2.6.9, debug@^2.1.2, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9: +debug-log@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" + +debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: ms "2.0.0" -debug@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" - dependencies: - ms "0.7.1" - -debug@^3.0.0, debug@^3.1.0: +debug@3.1.0, debug@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: @@ -4040,30 +3722,20 @@ decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" -decompress-response@^3.2.0, decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - dependencies: - mimic-response "^1.0.0" - dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" -deep-eql@0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" +deep-eql@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" dependencies: - type-detect "0.1.1" + type-detect "^4.0.0" -deep-equal@^1.0.1: +deep-equal@^1.0.0, deep-equal@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" -deep-extend@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.1.tgz#b894a9dd90d3023fbf1c55a394fb858eb2066f1f" - deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -4076,15 +3748,11 @@ deepmerge@^1.2.0, deepmerge@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" -deepmerge@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.1.0.tgz#511a54fff405fc346f0240bb270a3e9533a31102" - -default-require-extensions@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" +default-require-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" dependencies: - strip-bom "^2.0.0" + strip-bom "^3.0.0" defaults@^1.0.3: version "1.0.3" @@ -4118,18 +3786,6 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - -degenerator@~1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095" - dependencies: - ast-types "0.x.x" - escodegen "1.x.x" - esprima "3.x.x" - del@^2.0.2: version "2.2.2" resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" @@ -4157,6 +3813,11 @@ delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" +delegate@^3.1.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" + integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== + delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" @@ -4180,10 +3841,6 @@ destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" -detect-conflict@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/detect-conflict/-/detect-conflict-1.0.1.tgz#088657a66a961c05019db7c4230883b1c6b4176e" - detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" @@ -4194,19 +3851,23 @@ detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" -detect-newline@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" - detect-node@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" -diff@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" +dfa-lite@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/dfa-lite/-/dfa-lite-1.2.0.tgz#7dac25489e6bc45b7a9f32282deafac036c2f943" + dependencies: + babel-runtime "^6.11.6" + +dfa@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/dfa/-/dfa-1.1.0.tgz#d30218bd10d030fa421df3ebbc82285463a31781" + dependencies: + babel-runtime "^6.11.6" -diff@^3.2.0, diff@^3.3.1, diff@^3.5.0: +diff@3.5.0, diff@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -4225,19 +3886,6 @@ dir-glob@^2.0.0: arrify "^1.0.1" path-type "^3.0.0" -dmg-builder@4.10.1: - version "4.10.1" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-4.10.1.tgz#5603daa1f93e23b6b3572549f188a62e16eb1ffb" - dependencies: - bluebird-lst "^1.0.5" - builder-util "^5.11.0" - electron-builder-lib "~20.14.6" - fs-extra-p "^4.6.0" - iconv-lite "^0.4.23" - js-yaml "^3.11.0" - parse-color "^1.0.0" - sanitize-filename "^1.6.1" - dns-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" @@ -4285,7 +3933,7 @@ domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" -domelementtype@1, domelementtype@^1.3.0: +domelementtype@1: version "1.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" @@ -4293,7 +3941,7 @@ domelementtype@~1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" -domexception@^1.0.0: +domexception@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" dependencies: @@ -4305,12 +3953,6 @@ domhandler@2.1: dependencies: domelementtype "1" -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - dependencies: - domelementtype "1" - domutils@1.1: version "1.1.6" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" @@ -4324,30 +3966,21 @@ domutils@1.5.1: dom-serializer "0" domelementtype "1" -domutils@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - dependencies: - dom-serializer "0" - domelementtype "1" - -dot-prop@^4.1.0, dot-prop@^4.1.1: +dot-prop@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" dependencies: is-obj "^1.0.0" -dotenv-expand@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-4.2.0.tgz#def1f1ca5d6059d24a766e587942c21106ce1275" - -dotenv@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" - -duplexer3@^0.1.4: +duplexer2@~0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + dependencies: + readable-stream "^2.0.2" + +duplexer@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" duplexify@^3.4.2, duplexify@^3.6.0: version "3.6.0" @@ -4360,252 +3993,50 @@ duplexify@^3.4.2, duplexify@^3.6.0: easy-stack@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/easy-stack/-/easy-stack-1.0.0.tgz#12c91b3085a37f0baa336e9486eac4bf94e3e788" - -ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" - dependencies: - jsbn "~0.1.0" - -editions@^1.3.3: - version "1.3.4" - resolved "https://registry.yarnpkg.com/editions/-/editions-1.3.4.tgz#3662cb592347c3168eb8e498a0ff73271d67f50b" - -editorconfig@^0.13.2: - version "0.13.3" - resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.13.3.tgz#e5219e587951d60958fd94ea9a9a008cdeff1b34" - dependencies: - bluebird "^3.0.5" - commander "^2.9.0" - lru-cache "^3.2.0" - semver "^5.1.0" - sigmund "^1.0.1" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - -ejs@2.5.7: - version "2.5.7" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a" - -ejs@^2.5.9, ejs@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0" - -electron-builder-lib@20.15.1: - version "20.15.1" - resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.15.1.tgz#d2675e71918f62561cf5ecae633dfe5f4219d0e3" - dependencies: - "7zip-bin" "~4.0.2" - app-builder-bin "1.9.7" - async-exit-hook "^2.0.1" - bluebird-lst "^1.0.5" - builder-util "5.11.2" - builder-util-runtime "4.2.1" - chromium-pickle-js "^0.2.0" - debug "^3.1.0" - ejs "^2.6.1" - electron-osx-sign "0.4.10" - electron-publish "20.15.0" - fs-extra-p "^4.6.0" - hosted-git-info "^2.6.0" - is-ci "^1.1.0" - isbinaryfile "^3.0.2" - js-yaml "^3.11.0" - lazy-val "^1.0.3" - minimatch "^3.0.4" - normalize-package-data "^2.4.0" - plist "^3.0.1" - read-config-file "3.0.1" - sanitize-filename "^1.6.1" - semver "^5.5.0" - stream-json "^0.6.1" - temp-file "^3.1.2" - -electron-builder-lib@~20.14.6: - version "20.14.7" - resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.14.7.tgz#db91977dd13b0a288e1da5629183807a9847de21" - dependencies: - "7zip-bin" "~4.0.2" - app-builder-bin "1.9.5" - async-exit-hook "^2.0.1" - bluebird-lst "^1.0.5" - builder-util "5.11.1" - builder-util-runtime "4.2.1" - chromium-pickle-js "^0.2.0" - debug "^3.1.0" - ejs "^2.6.1" - electron-osx-sign "0.4.10" - electron-publish "20.14.6" - fs-extra-p "^4.6.0" - hosted-git-info "^2.6.0" - is-ci "^1.1.0" - isbinaryfile "^3.0.2" - js-yaml "^3.11.0" - lazy-val "^1.0.3" - minimatch "^3.0.4" - normalize-package-data "^2.4.0" - plist "^3.0.1" - read-config-file "3.0.1" - sanitize-filename "^1.6.1" - semver "^5.5.0" - stream-json "^0.6.1" - temp-file "^3.1.2" - -electron-builder@^20.14.7: - version "20.15.1" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.15.1.tgz#078cda29bdb7240244e9bccf30740b1ea42deb44" - dependencies: - bluebird-lst "^1.0.5" - builder-util "5.11.2" - builder-util-runtime "4.2.1" - chalk "^2.4.1" - dmg-builder "4.10.1" - electron-builder-lib "20.15.1" - electron-download-tf "4.3.4" - fs-extra-p "^4.6.0" - is-ci "^1.1.0" - lazy-val "^1.0.3" - read-config-file "3.0.1" - sanitize-filename "^1.6.1" - update-notifier "^2.5.0" - yargs "^11.0.0" - -electron-devtools-installer@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/electron-devtools-installer/-/electron-devtools-installer-2.2.4.tgz#261a50337e37121d338b966f07922eb4939a8763" - dependencies: - "7zip" "0.0.6" - cross-unzip "0.0.2" - rimraf "^2.5.2" - semver "^5.3.0" - -electron-download-tf@4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/electron-download-tf/-/electron-download-tf-4.3.4.tgz#b03740b2885aa2ad3f8784fae74df427f66d5165" - dependencies: - debug "^3.0.0" - env-paths "^1.0.0" - fs-extra "^4.0.1" - minimist "^1.2.0" - nugget "^2.0.1" - path-exists "^3.0.0" - rc "^1.2.1" - semver "^5.4.1" - sumchecker "^2.0.2" - -electron-download@^3.0.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/electron-download/-/electron-download-3.3.0.tgz#2cfd54d6966c019c4d49ad65fbe65cc9cdef68c8" - dependencies: - debug "^2.2.0" - fs-extra "^0.30.0" - home-path "^1.0.1" - minimist "^1.2.0" - nugget "^2.0.0" - path-exists "^2.1.0" - rc "^1.1.2" - semver "^5.3.0" - sumchecker "^1.2.0" + resolved "https://registry.yarnpkg.com/easy-stack/-/easy-stack-1.0.0.tgz#12c91b3085a37f0baa336e9486eac4bf94e3e788" -electron-osx-sign@0.4.10: - version "0.4.10" - resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.4.10.tgz#be4f3b89b2a75a1dc5f1e7249081ab2929ca3a26" +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" dependencies: - bluebird "^3.5.0" - compare-version "^0.1.2" - debug "^2.6.8" - isbinaryfile "^3.0.2" - minimist "^1.2.0" - plist "^2.1.0" + jsbn "~0.1.0" + safer-buffer "^2.1.0" -electron-publish@20.14.6: - version "20.14.6" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.14.6.tgz#ced15b0c08fdaef2fb25beba9f55f20d1c19e215" +echarts@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/echarts/-/echarts-4.1.0.tgz#d588c95f73c1a9928b9c73d5b769751c3185bcdc" dependencies: - bluebird-lst "^1.0.5" - builder-util "^5.11.0" - builder-util-runtime "^4.2.1" - chalk "^2.4.1" - fs-extra-p "^4.6.0" - lazy-val "^1.0.3" - mime "^2.3.1" + zrender "4.0.4" -electron-publish@20.15.0: - version "20.15.0" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.15.0.tgz#4dd96b2ce82b8856342a6d60dda571669a390d2d" +ed25519.js@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ed25519.js/-/ed25519.js-1.3.0.tgz#11ff48508c4964302179aee33d2f870371df4ad8" dependencies: - bluebird-lst "^1.0.5" - builder-util "^5.11.2" - builder-util-runtime "^4.2.1" - chalk "^2.4.1" - fs-extra-p "^4.6.0" - lazy-val "^1.0.3" - mime "^2.3.1" + buffer "5.0.2" -electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.45: - version "1.3.47" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.47.tgz#764e887ca9104d01a0ac8eabee7dfc0e2ce14104" +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" -electron-webpack-js@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/electron-webpack-js/-/electron-webpack-js-2.0.3.tgz#c0f48c08bf3b29c587ee8c0c711e33ab2278b55a" - dependencies: - "@babel/core" "^7.0.0-beta.47" - "@babel/preset-env" "^7.0.0-beta.47" - babel-loader "^8.0.0-beta.2" - babel-plugin-component "^1.1.1" - babel-plugin-syntax-dynamic-import "^7.0.0-beta.3" +ejs@^2.5.7: + version "2.6.1" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0" -electron-webpack@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/electron-webpack/-/electron-webpack-2.1.2.tgz#f895c020d504f441308a39f208a9c23417e481bc" - dependencies: - "@types/webpack-env" "^1.13.6" - async-exit-hook "^2.0.1" - bluebird-lst "^1.0.5" - chalk "^2.4.1" - crocket "^0.9.11" - css-hot-loader "^1.3.9" - css-loader "^0.28.11" - debug "^3.1.0" - electron-devtools-installer "^2.2.4" - electron-webpack-js "~2.0.3" - file-loader "^1.1.11" - fs-extra-p "^4.6.0" - html-loader "^1.0.0-alpha.0" - html-webpack-plugin "^3.2.0" - lazy-val "^1.0.3" - mini-css-extract-plugin "^0.4.0" - node-loader "^0.6.0" - read-config-file "^3.0.1" - semver "^5.5.0" - source-map-support "^0.5.6" - style-loader "^0.21.0" - uglifyjs-webpack-plugin "^1.2.5" - url-loader "^1.0.1" - webpack-cli "^2.1.3" - webpack-dev-server "^3.1.4" - webpack-merge "^4.1.2" - yargs "^11.1.0" +electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.52: + version "1.3.55" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.55.tgz#f150e10b20b77d9d41afcca312efe0c3b1a7fdce" -electron@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/electron/-/electron-2.0.2.tgz#b77e05f83419cc5ec921a2d21f35b55e4bfc3d68" - dependencies: - "@types/node" "^8.0.24" - electron-download "^3.0.1" - extract-zip "^1.0.3" +electron-to-chromium@^1.3.61: + version "1.3.61" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.61.tgz#a8ac295b28d0f03d85e37326fd16b6b6b17a1795" elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" -element-ui@^2.3.8: - version "2.3.8" - resolved "https://registry.yarnpkg.com/element-ui/-/element-ui-2.3.8.tgz#5d24ab1ea66363d7ffa651b7ec47b3f93cdffd7c" +element-ui@^2.4.6: + version "2.4.6" + resolved "https://registry.yarnpkg.com/element-ui/-/element-ui-2.4.6.tgz#524d3d4cac0b68745dda87311ef0d8fe541b5fc4" dependencies: async-validator "~1.8.1" babel-helper-vue-jsx-merge-props "^2.0.0" @@ -4640,26 +4071,18 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.0.0.tgz#e34a6eaa790f62fccd71d93959f56b2b432db10a" +enhanced-resolve@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" dependencies: graceful-fs "^4.1.2" memory-fs "^0.4.0" tapable "^1.0.0" -entities@^1.1.1, entities@~1.1.1: +entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" -env-paths@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0" - -envinfo@^5.7.0: - version "5.10.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-5.10.0.tgz#503a9774ae15b93ea68bdfae2ccd6306624ea6df" - errno@^0.1.3, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" @@ -4667,35 +4090,18 @@ errno@^0.1.3, errno@~0.1.7: prr "~1.0.1" error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" dependencies: is-arrayish "^0.2.1" error-stack-parser@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.1.tgz#a3202b8fb03114aa9b40a0e3669e48b2b65a010a" - dependencies: - stackframe "^1.0.3" - -error@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02" - dependencies: - string-template "~0.2.1" - xtend "~4.0.0" - -es-abstract@^1.4.3, es-abstract@^1.5.1, es-abstract@^1.7.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.11.0.tgz#cce87d518f0496893b1a30cd8461835535480681" + version "2.0.2" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.2.tgz#4ae8dbaa2bf90a8b450707b9149dcabca135520d" dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" - is-regex "^1.0.4" + stackframe "^1.0.4" -es-abstract@^1.6.1: +es-abstract@^1.4.3, es-abstract@^1.5.1, es-abstract@^1.6.1, es-abstract@^1.7.0: version "1.12.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" dependencies: @@ -4714,13 +4120,17 @@ es-to-primitive@^1.1.1: is-symbol "^1.0.1" es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.42" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.42.tgz#8c07dd33af04d5dcd1310b5cef13bea63a89ba8d" + version "0.10.45" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.45.tgz#0bfdf7b473da5919d5adf3bd25ceb754fccc3653" dependencies: es6-iterator "~2.0.3" es6-symbol "~3.1.1" next-tick "1" +es6-error@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + es6-iterator@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" @@ -4729,10 +4139,6 @@ es6-iterator@~2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" -es6-promise@^4.0.5: - version "4.2.4" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29" - es6-symbol@^3.1.1, es6-symbol@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" @@ -4748,7 +4154,28 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1 version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" -escodegen@1.x.x, escodegen@^1.9.0: +escodegen@^1.8.1, escodegen@^1.9.1: + version "1.11.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +escodegen@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.2.0.tgz#09de7967791cc958b7f89a2ddb6d23451af327e1" + dependencies: + esprima "~1.0.4" + estraverse "~1.5.0" + esutils "~1.0.0" + optionalDependencies: + source-map "~0.1.30" + +escodegen@~1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2" dependencies: @@ -4771,8 +4198,8 @@ eslint-import-resolver-node@^0.3.1: resolve "^1.5.0" eslint-loader@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.0.0.tgz#d136619b5c684e36531ffc28c60a56e404608f5d" + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.1.0.tgz#61334c548aeb0b8e20ec3a552fb7a88c47261c6a" dependencies: loader-fs-cache "^1.0.0" loader-utils "^1.0.2" @@ -4787,9 +4214,15 @@ eslint-module-utils@^2.2.0: debug "^2.6.8" pkg-dir "^1.0.0" +eslint-plugin-cypress@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-cypress/-/eslint-plugin-cypress-2.0.1.tgz#647e942cacbfd71b0f1a1ed6978472fbd475c60a" + dependencies: + globals "^11.0.1" + eslint-plugin-import@^2.11.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.12.0.tgz#dad31781292d6664b25317fd049d2e2b2f02205d" + version "2.13.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.13.0.tgz#df24f241175e312d91662dc91ca84064caec14ed" dependencies: contains-path "^0.1.0" debug "^2.6.8" @@ -4812,26 +4245,40 @@ eslint-plugin-node@^6.0.1: semver "^5.4.1" eslint-plugin-promise@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.7.0.tgz#f4bde5c2c77cdd69557a8f69a24d1ad3cfc9e67e" + version "3.8.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.8.0.tgz#65ebf27a845e3c1e9d6f6a5622ddd3801694b621" eslint-plugin-standard@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-3.1.0.tgz#2a9e21259ba4c47c02d53b2d0c9135d4b1022d47" eslint-plugin-vue@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-4.5.0.tgz#09d6597f4849e31a3846c2c395fccf17685b69c3" + version "4.7.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-4.7.1.tgz#c829b9fc62582c1897b5a0b94afd44ecca511e63" dependencies: vue-eslint-parser "^2.0.3" -eslint-scope@^3.7.1, eslint-scope@~3.7.1: +eslint-scope@3.7.1: version "3.7.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" +eslint-scope@^3.7.1: + version "3.7.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + eslint-visitor-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" @@ -4886,17 +4333,17 @@ espree@^3.5.2, espree@^3.5.4: acorn "^5.5.0" acorn-jsx "^3.0.0" -esprima@3.x.x, esprima@^3.1.3: +esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" -esprima@^2.6.0: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" -esprima@^4.0.0, esprima@~4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" +esprima@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.0.4.tgz#9f557e08fc3b4d26ece9dd34f8fbf476b62585ad" esquery@^1.0.0: version "1.0.1" @@ -4914,10 +4361,18 @@ estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" -esutils@^2.0.2: +estraverse@~1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.5.1.tgz#867a3e8e58a9f84618afb6c2ddbcd916b7cbaf71" + +esutils@^2.0.0, esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" +esutils@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.0.0.tgz#8151d358e20c8acc7fb745e7472c0025fe496570" + etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" @@ -4947,13 +4402,7 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -exec-sh@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.1.tgz#163b98a6e89e6b65b47c2a28d215bc1f63989c38" - dependencies: - merge "^1.1.3" - -execa@^0.10.0: +execa@0.10.0, execa@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" dependencies: @@ -4989,14 +4438,28 @@ execa@^0.8.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.9.0.tgz#adb7ce62cf985071f60580deb4a88b9e34712d01" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +executable@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" + dependencies: + pify "^2.2.0" + exit-hook@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" @@ -5021,23 +4484,6 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - dependencies: - homedir-polyfill "^1.0.1" - -expect@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/expect/-/expect-22.4.3.tgz#d5a29d0a0e1fb2153557caef2674d4547e914674" - dependencies: - ansi-styles "^3.2.0" - jest-diff "^22.4.3" - jest-get-type "^22.4.3" - jest-matcher-utils "^22.4.3" - jest-message-util "^22.4.3" - jest-regex-util "^22.4.3" - express@^4.16.2: version "4.16.3" resolved "https://registry.yarnpkg.com/express/-/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53" @@ -5086,11 +4532,11 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@3, extend@~3.0.0, extend@~3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" +extend@~3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" -external-editor@^2.0.4, external-editor@^2.1.0: +external-editor@^2.0.4: version "2.2.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" dependencies: @@ -5117,22 +4563,7 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extract-from-css@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/extract-from-css/-/extract-from-css-0.4.4.tgz#1ea7df2e7c7c6eb9922fa08e8adaea486f6f8f92" - dependencies: - css "^2.1.0" - -extract-zip@^1.0.3: - version "1.6.7" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" - dependencies: - concat-stream "1.6.2" - debug "2.6.9" - mkdirp "0.5.1" - yauzl "2.4.1" - -extract-zip@^1.6.6: +extract-zip@1.6.6: version "1.6.6" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.6.tgz#1290ede8d20d0872b429fd3f351ca128ec5ef85c" dependencies: @@ -5149,6 +4580,15 @@ extsprintf@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" +falafel@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/falafel/-/falafel-2.1.0.tgz#96bb17761daba94f46d001738b3cedf3a67fe06c" + dependencies: + acorn "^5.0.0" + foreach "^2.0.5" + isarray "0.0.1" + object-keys "^1.0.6" + fast-deep-equal@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" @@ -5192,18 +4632,16 @@ faye-websocket@~0.11.0: dependencies: websocket-driver ">=0.5.1" -fb-watchman@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" - dependencies: - bser "^2.0.0" - fd-slicer@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" dependencies: pend "~1.2.0" +figgy-pudding@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" + figures@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" @@ -5231,20 +4669,17 @@ file-loader@^1.1.11: loader-utils "^1.0.2" schema-utils "^0.4.5" -file-uri-to-path@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" +file-saver@^1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-1.3.8.tgz#e68a30c7cb044e2fb362b428469feb291c2e09d8" filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" -fileset@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" - dependencies: - glob "^7.0.3" - minimatch "^3.0.3" +filesize@^3.5.11: + version "3.6.1" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" fill-range@^2.1.0: version "2.2.4" @@ -5277,13 +4712,6 @@ finalhandler@1.1.1: statuses "~1.4.0" unpipe "~1.0.0" -find-babel-config@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.1.0.tgz#acc01043a6749fec34429be6b64f542ebb5d6355" - dependencies: - json5 "^0.5.1" - path-exists "^3.0.0" - find-cache-dir@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" @@ -5300,6 +4728,14 @@ find-cache-dir@^1.0.0: make-dir "^1.0.0" pkg-dir "^2.0.0" +find-cache-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.0.0.tgz#4c1faed59f45184530fb9d7fa123a4d04a98472d" + dependencies: + commondir "^1.0.1" + make-dir "^1.0.0" + pkg-dir "^3.0.0" + find-parent-dir@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" @@ -5317,11 +4753,11 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" -first-chunk-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz#1bdecdb8e083c0664b91945581577a43a9f31d70" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" dependencies: - readable-stream "^2.0.2" + locate-path "^3.0.0" flat-cache@^1.2.1: version "1.3.0" @@ -5336,10 +4772,6 @@ flatten@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" -flow-parser@^0.*: - version "0.73.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.73.0.tgz#525ac0776f743e16b6dca1a3dd6c602260b15773" - flush-write-stream@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" @@ -5347,12 +4779,44 @@ flush-write-stream@^1.0.0: inherits "^2.0.1" readable-stream "^2.0.4" -follow-redirects@^1.0.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.4.1.tgz#d8120f4518190f55aac65bb6fc7b85fcd666d6aa" +follow-redirects@^1.0.0, follow-redirects@^1.3.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.2.tgz#5a9d80e0165957e5ef0c1210678fc5c4acb9fb03" dependencies: debug "^3.1.0" +fontkit-lite@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/fontkit-lite/-/fontkit-lite-1.8.1.tgz#af1217283d40440fafe4aaebf8669d7f80c850ff" + dependencies: + babel-runtime "^6.11.6" + brfs "^1.4.0" + brotli "^1.2.0" + browserify-optional "^1.0.0" + clone "^1.0.1" + deep-equal "^1.0.0" + dfa-lite "^1.2.0" + restructure "^0.5.3" + tiny-inflate "^1.0.2" + unicode-properties "^1.0.0" + unicode-trie "^0.3.0" + +fontkit@^1.0.0: + version "1.7.7" + resolved "https://registry.yarnpkg.com/fontkit/-/fontkit-1.7.7.tgz#ebaf2d8f3fedf302ae3c64b4beeaddc247fcdbb1" + dependencies: + babel-runtime "^6.11.6" + brfs "^1.4.0" + brotli "^1.2.0" + browserify-optional "^1.0.0" + clone "^1.0.1" + deep-equal "^1.0.0" + dfa "^1.0.0" + restructure "^0.5.3" + tiny-inflate "^1.0.2" + unicode-properties "^1.0.0" + unicode-trie "^0.3.0" + for-in@^0.1.3: version "0.1.8" resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" @@ -5377,18 +4841,17 @@ foreach@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" +foreground-child@^1.5.6: + version "1.5.6" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-1.5.6.tgz#4fd71ad2dfde96789b980a5c0a295937cb2f5ce9" + dependencies: + cross-spawn "^4" + signal-exit "^3.0.0" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" -form-data@~2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" - form-data@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" @@ -5419,39 +4882,22 @@ friendly-errors-webpack-plugin@^1.7.0: error-stack-parser "^2.0.0" string-width "^2.0.0" -from2@^2.1.0, from2@^2.1.1: +from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" dependencies: inherits "^2.0.1" readable-stream "^2.0.0" -fs-extra-p@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/fs-extra-p/-/fs-extra-p-4.6.0.tgz#c7b7117f0dcf8a99c9b2ed589067c960abcf3ef9" - dependencies: - bluebird-lst "^1.0.5" - fs-extra "^6.0.0" - -fs-extra@^0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - -fs-extra@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" +fs-extra@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.1.tgz#7fc0c6c8957f983f57f306a24e5b9ddd8d0dd880" dependencies: graceful-fs "^4.1.2" - jsonfile "^4.0.0" + jsonfile "^3.0.0" universalify "^0.1.0" -fs-extra@^6.0.0, fs-extra@^6.0.1: +fs-extra@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-6.0.1.tgz#8abc128f7946e310135ddc93b98bddb410e7a34b" dependencies: @@ -5478,7 +4924,7 @@ fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" -fsevents@^1.1.2, fsevents@^1.2.3: +fsevents@^1.2.2: version "1.2.4" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" dependencies: @@ -5494,13 +4940,6 @@ fstream@^1.0.0, fstream@^1.0.2: mkdirp ">=0.5 0" rimraf "2" -ftp@~0.3.10: - version "0.3.10" - resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" - dependencies: - readable-stream "1.1.x" - xregexp "2.0.0" - function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -5523,24 +4962,18 @@ gauge@~2.7.3: wide-align "^1.1.0" gaze@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105" + version "1.1.3" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" dependencies: globule "^1.0.0" -generate-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" - get-caller-file@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" get-own-enumerable-property-symbols@^2.0.1: version "2.0.1" @@ -5550,30 +4983,19 @@ get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" -get-stream@3.0.0, get-stream@^3.0.0: +get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" -get-uri@2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.2.tgz#5c795e71326f6ca1286f2fc82575cd2bab2af578" - dependencies: - data-uri-to-buffer "1" - debug "2" - extend "3" - file-uri-to-path "1" - ftp "~0.3.10" - readable-stream "2" - get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" -get-value@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-3.0.1.tgz#5efd2a157f1d6a516d7524e124ac52d0a39ef5a8" +getos@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/getos/-/getos-3.1.0.tgz#db3aa4df15a3295557ce5e81aa9e3e5cdfaa6567" dependencies: - isobject "^3.0.1" + async "2.4.0" getpass@^0.1.1: version "0.1.7" @@ -5581,26 +5003,6 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -gh-got@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/gh-got/-/gh-got-6.0.0.tgz#d74353004c6ec466647520a10bd46f7299d268d0" - dependencies: - got "^7.0.0" - is-plain-obj "^1.1.0" - -github-username@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/github-username/-/github-username-4.1.0.tgz#cbe280041883206da4212ae9e4b5f169c30bf417" - dependencies: - gh-got "^6.0.0" - -glob-all@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-all/-/glob-all-3.1.0.tgz#8913ddfb5ee1ac7812656241b03d5217c64b02ab" - dependencies: - glob "^7.0.5" - yargs "~1.2.6" - glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" @@ -5625,14 +5027,14 @@ glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" -glob@7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95" +glob@7.1.2, glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2, glob@~7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.2" + minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" @@ -5646,44 +5048,15 @@ glob@^6.0.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - global-dirs@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" dependencies: ini "^1.3.4" -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - globals@^11.0.1, globals@^11.1.0: - version "11.5.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.5.0.tgz#6bc840de6771173b191f13d3a9c94d441ee92642" + version "11.7.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673" globals@^9.18.0: version "9.18.0" @@ -5721,7 +5094,7 @@ globby@^7.1.1: pify "^3.0.0" slash "^1.0.0" -globby@^8.0.0, globby@^8.0.1: +globby@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" dependencies: @@ -5734,110 +5107,50 @@ globby@^8.0.0, globby@^8.0.1: slash "^1.0.0" globule@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.0.tgz#1dc49c6822dd9e8a2fa00ba2a295006e8664bd09" + version "1.2.1" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d" dependencies: glob "~7.1.1" - lodash "~4.17.4" + lodash "~4.17.10" minimatch "~3.0.2" -google-protobuf@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.5.0.tgz#b8cc63c74d83457bd8a9a904503c8efb26bca339" - -got@^6.7.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" +good-listener@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" + integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= dependencies: - create-error-class "^3.0.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-redirect "^1.0.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - lowercase-keys "^1.0.0" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - unzip-response "^2.0.1" - url-parse-lax "^1.0.0" + delegate "^3.1.2" -got@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" - dependencies: - decompress-response "^3.2.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-plain-obj "^1.1.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - isurl "^1.0.0-alpha5" - lowercase-keys "^1.0.0" - p-cancelable "^0.3.0" - p-timeout "^1.1.1" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - url-parse-lax "^1.0.0" - url-to-options "^1.0.1" - -got@^8.3.1: - version "8.3.1" - resolved "https://registry.yarnpkg.com/got/-/got-8.3.1.tgz#093324403d4d955f5a16a7a8d39955d055ae10ed" - dependencies: - "@sindresorhus/is" "^0.7.0" - cacheable-request "^2.1.1" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - into-stream "^3.1.0" - is-retry-allowed "^1.1.0" - isurl "^1.0.0-alpha5" - lowercase-keys "^1.0.0" - mimic-response "^1.0.0" - p-cancelable "^0.4.0" - p-timeout "^2.0.1" - pify "^3.0.0" - safe-buffer "^5.1.1" - timed-out "^4.0.1" - url-parse-lax "^3.0.0" - url-to-options "^1.0.1" +google-protobuf@^3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.6.1.tgz#7ef58e2bea137a93cdaf5cfd5afa5f6abdd92025" -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" +growl@1.10.5: + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" -grouped-queue@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/grouped-queue/-/grouped-queue-0.3.3.tgz#c167d2a5319c5a0e0964ef6a25b7c2df8996c85c" +grpc-web-client@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/grpc-web-client/-/grpc-web-client-0.6.3.tgz#b3f527db570978cba51a30004d922bad9138962d" dependencies: - lodash "^4.17.2" - -growl@1.9.2: - version "1.9.2" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" + browser-headers "^0.4.0" -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - -grpc@^1.12.2: - version "1.12.2" - resolved "https://registry.yarnpkg.com/grpc/-/grpc-1.12.2.tgz#b9f853540825c6c716c30d06794d7d52d081d968" +gzip-size@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-4.1.0.tgz#8ae096257eabe7d69c45be2b67c448124ffb517c" dependencies: - lodash "^4.17.5" - nan "^2.0.0" - node-pre-gyp "^0.10.0" - protobufjs "^5.0.3" + duplexer "^0.1.1" + pify "^3.0.0" handle-thing@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" -handlebars@^4.0.3: +handlebars@^4.0.11: version "4.0.11" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" dependencies: @@ -5851,15 +5164,6 @@ har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" -har-validator@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" - dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" - pinkie-promise "^2.0.0" - har-validator@~5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" @@ -5873,32 +5177,18 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -has-color@~0.1.0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" - -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" -has-symbol-support-x@^1.4.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" - has-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" -has-to-string-tag-x@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" - dependencies: - has-symbol-support-x "^1.4.1" - has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -5930,11 +5220,11 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" +has@^1.0.0, has@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" dependencies: - function-bind "^1.0.2" + function-bind "^1.1.1" hash-base@^3.0.0: version "3.0.4" @@ -5948,34 +5238,20 @@ hash-sum@^1.0.2: resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + version "1.1.5" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.5.tgz#e38ab4b85dfb1e0c40fe9265c0e9b54854c23812" dependencies: inherits "^2.0.3" - minimalistic-assert "^1.0.0" + minimalistic-assert "^1.0.1" -hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" - -hawk@~6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" - dependencies: - boom "4.x.x" - cryptiles "3.x.x" - hoek "4.x.x" - sntp "2.x.x" - -he@1.1.x, he@^1.1.0: +he@1.1.1, he@1.1.x, he@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -5984,13 +5260,9 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - -hoek@4.x.x: - version "4.2.1" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" +hoek@5.x.x: + version "5.0.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-5.0.3.tgz#b71d40d943d0a95da01956b547f83c4a5b4a34ac" home-or-tmp@^2.0.0: version "2.0.0" @@ -5999,19 +5271,13 @@ home-or-tmp@^2.0.0: os-homedir "^1.0.0" os-tmpdir "^1.0.1" -home-path@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/home-path/-/home-path-1.0.6.tgz#d549dc2465388a7f8667242c5b31588d29af29fc" - -homedir-polyfill@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" - dependencies: - parse-passwd "^1.0.0" +home-or-tmp@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-3.0.0.tgz#57a8fe24cf33cdd524860a15821ddc25c86671fb" -hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222" +hosted-git-info@^2.1.4: + version "2.7.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" hpack.js@^2.1.6: version "2.1.6" @@ -6022,6 +5288,14 @@ hpack.js@^2.1.6: readable-stream "^2.0.1" wbuf "^1.1.0" +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + html-comment-regex@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" @@ -6036,27 +5310,17 @@ html-entities@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" -html-loader@^1.0.0-alpha.0: - version "1.0.0-alpha.0" - resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-1.0.0-alpha.0.tgz#3f4ae7b490a587619be6d1eaa8ce16683580c642" - dependencies: - "@posthtml/esm" "^1.0.0" - htmlnano "^0.1.6" - loader-utils "^1.1.0" - posthtml "^0.11.2" - schema-utils "^0.4.3" - html-minifier@^3.2.3: - version "3.5.15" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.15.tgz#f869848d4543cbfd84f26d5514a2a87cbf9a05e0" + version "3.5.19" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.19.tgz#ed53c4b7326fe507bc3a1adbcc3bbb56660a2ebd" dependencies: camel-case "3.0.x" clean-css "4.1.x" - commander "2.15.x" + commander "2.16.x" he "1.1.x" param-case "2.1.x" relateurl "0.2.x" - uglify-js "3.3.x" + uglify-js "3.4.x" html-webpack-plugin@^3.2.0: version "3.2.0" @@ -6070,28 +5334,6 @@ html-webpack-plugin@^3.2.0: toposort "^1.0.0" util.promisify "1.0.0" -htmlnano@^0.1.6: - version "0.1.9" - resolved "https://registry.yarnpkg.com/htmlnano/-/htmlnano-0.1.9.tgz#e6137aea84d20311a3875c42eb2799a1ff352627" - dependencies: - cssnano "^3.4.0" - object-assign "^4.0.1" - posthtml "^0.11.3" - posthtml-render "^1.1.3" - svgo "^1.0.5" - uglify-es "^3.3.9" - -htmlparser2@^3.9.2: - version "3.9.2" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" - dependencies: - domelementtype "^1.3.0" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^2.0.2" - htmlparser2@~3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" @@ -6101,10 +5343,6 @@ htmlparser2@~3.3.0: domutils "1.1" readable-stream "1.0" -http-cache-semantics@3.8.1: - version "3.8.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" - http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -6118,7 +5356,7 @@ http-errors@1.6.2: setprototypeof "1.0.3" statuses ">= 1.3.1 < 2" -http-errors@1.6.3, http-errors@~1.6.2: +http-errors@~1.6.2: version "1.6.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" dependencies: @@ -6128,16 +5366,8 @@ http-errors@1.6.3, http-errors@~1.6.2: statuses ">= 1.4.0 < 2" http-parser-js@>=0.4.0: - version "0.4.12" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.12.tgz#b9cfbf4a2cf26f0fc34b10ca1489a27771e3474f" - -http-proxy-agent@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-1.0.0.tgz#cc1ce38e453bf984a0f7702d2dd59c73d081284a" - dependencies: - agent-base "2" - debug "2" - extend "3" + version "0.4.13" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.13.tgz#3bd6d6fde6e3172c9334c3b33b6c193d80fe1137" http-proxy-middleware@~0.18.0: version "0.18.0" @@ -6156,14 +5386,6 @@ http-proxy@^1.16.2: follow-redirects "^1.0.0" requires-port "^1.0.0" -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -6176,19 +5398,11 @@ https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" -https-proxy-agent@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6" - dependencies: - agent-base "2" - debug "2" - extend "3" - iconv-lite@0.4.19: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" -iconv-lite@0.4.23, iconv-lite@^0.4.17, iconv-lite@^0.4.23, iconv-lite@^0.4.4: +iconv-lite@^0.4.17, iconv-lite@^0.4.19, iconv-lite@^0.4.4: version "0.4.23" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" dependencies: @@ -6205,8 +5419,8 @@ icss-utils@^2.1.0: postcss "^6.0.1" ieee754@^1.1.11, ieee754@^1.1.4: - version "1.1.11" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.11.tgz#c16384ffe00f5b7835824e67b6f2bd44a5229455" + version "1.1.12" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" iferr@^0.1.5: version "0.1.5" @@ -6219,12 +5433,20 @@ ignore-walk@^3.0.1: minimatch "^3.0.4" ignore@^3.3.3, ignore@^3.3.5, ignore@^3.3.6: - version "3.3.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.8.tgz#3f8e9c35d38708a3a7e0e9abb6c73e7ee7707b2b" + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + dependencies: + import-from "^2.1.0" -import-lazy@^2.1.0: +import-from@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + dependencies: + resolve-from "^3.0.0" import-local@^1.0.0: version "1.0.0" @@ -6278,6 +5500,12 @@ ini@^1.3.4, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" +inject-loader@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/inject-loader/-/inject-loader-4.0.1.tgz#079c7c1c28950cf28b8d97714dfae6212938e52a" + dependencies: + babel-core "~6" + inquirer@^3.0.6: version "3.3.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" @@ -6297,41 +5525,16 @@ inquirer@^3.0.6: strip-ansi "^4.0.0" through "^2.3.6" -inquirer@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-5.2.0.tgz#db350c2b73daca77ff1243962e9f22f099685726" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^2.1.0" - figures "^2.0.0" - lodash "^4.3.0" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^5.5.2" - string-width "^2.1.0" - strip-ansi "^4.0.0" - through "^2.3.6" - internal-ip@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c" dependencies: meow "^3.3.0" -interpret@^1.0.0, interpret@^1.1.0: +interpret@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" -into-stream@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" - dependencies: - from2 "^2.1.1" - p-is-promise "^1.1.0" - invariant@^2.2.0, invariant@^2.2.2: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -6342,24 +5545,26 @@ invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" -ip@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.0.1.tgz#c7e356cdea225ae71b36d70f2e71a92ba4e42590" - -ip@^1.1.0, ip@^1.1.4, ip@^1.1.5: +ip@^1.1.0, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" -ipaddr.js@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b" +ipaddr.js@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" -iroha-lib@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/iroha-lib/-/iroha-lib-0.1.4.tgz#f15522d675becf88b131da03d889c0bee9feead9" +iroha-helpers@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/iroha-helpers/-/iroha-helpers-0.3.0.tgz#ab60f9fa23bee5c260274a864252945cf7f245ca" + integrity sha512-71HWDXby8Wl+1+qV0DthtOFDyeWCl5D7XuPPjSuqUxgdKlAB5V3q+gzW3ov9Zak1DjH/waCSurKQRbjiwrn6ag== dependencies: - google-protobuf "^3.5.0" - grpc "^1.12.2" + buffer "^5.2.0" + ed25519.js "^1.3.0" + google-protobuf "^3.6.1" + grpc-web-client "^0.6.3" + js-sha3 "^0.8.0" + lodash.clonedeep "^4.5.0" + lodash.foreach "^4.5.0" is-absolute-url@^2.0.0: version "2.1.0" @@ -6381,6 +5586,10 @@ is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" @@ -6398,15 +5607,32 @@ is-builtin-module@^1.0.0: builtin-modules "^1.0.0" is-callable@^1.1.1, is-callable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + +is-ci@1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" + dependencies: + ci-info "^1.0.0" -is-ci@^1.0.10, is-ci@^1.1.0: +is-ci@^1.0.10: version "1.1.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" dependencies: ci-info "^1.0.0" +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + dependencies: + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -6487,10 +5713,6 @@ is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" -is-generator-fn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" - is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" @@ -6509,31 +5731,13 @@ is-glob@^4.0.0: dependencies: is-extglob "^2.1.1" -is-installed-globally@^0.1.0: +is-installed-globally@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" dependencies: global-dirs "^0.1.0" is-path-inside "^1.0.0" -is-my-ip-valid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" - -is-my-json-valid@^2.12.4: - version "2.17.2" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz#6b2103a288e94ef3de5cf15d29dd85fc4b78d65c" - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - is-my-ip-valid "^1.0.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" - -is-npm@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" - is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" @@ -6554,28 +5758,12 @@ is-obj@^1.0.0, is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" -is-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" - -is-observable@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-0.2.0.tgz#b361311d83c6e5d726cabf5e250b0237106f5ae2" - dependencies: - symbol-observable "^0.2.2" - is-observable@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" dependencies: symbol-observable "^1.1.0" -is-odd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24" - dependencies: - is-number "^4.0.0" - is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" @@ -6592,10 +5780,6 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -6614,14 +5798,6 @@ is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" -is-property@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - -is-redirect@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" - is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" @@ -6636,481 +5812,171 @@ is-resolvable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" -is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" - -is-scoped@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-scoped/-/is-scoped-1.0.0.tgz#449ca98299e713038256289ecb2b540dc437cb30" - dependencies: - scoped-regex "^1.0.0" - -is-stream@^1.0.0, is-stream@^1.1.0: +is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" -is-svg@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" - dependencies: - html-comment-regex "^1.1.0" - -is-symbol@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - -is-whitespace@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/is-whitespace/-/is-whitespace-0.3.0.tgz#1639ecb1be036aec69a54cbb401cfbed7114ab7f" - -is-windows@^1.0.1, is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - -isbinaryfile@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621" - -isemail@3.x.x: - version "3.1.2" - resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.1.2.tgz#937cf919002077999a73ea8b1951d590e84e01dd" - dependencies: - punycode "2.x.x" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - -isobject@^2.0.0, isobject@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - -istanbul-api@^1.1.14: - version "1.3.1" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.1.tgz#4c3b05d18c0016d1022e079b98dc82c40f488954" - dependencies: - async "^2.1.4" - compare-versions "^3.1.0" - fileset "^2.0.2" - istanbul-lib-coverage "^1.2.0" - istanbul-lib-hook "^1.2.0" - istanbul-lib-instrument "^1.10.1" - istanbul-lib-report "^1.1.4" - istanbul-lib-source-maps "^1.2.4" - istanbul-reports "^1.3.0" - js-yaml "^3.7.0" - mkdirp "^0.5.1" - once "^1.4.0" - -istanbul-lib-coverage@^1.1.1, istanbul-lib-coverage@^1.1.2, istanbul-lib-coverage@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz#f7d8f2e42b97e37fe796114cb0f9d68b5e3a4341" - -istanbul-lib-hook@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.0.tgz#ae556fd5a41a6e8efa0b1002b1e416dfeaf9816c" - dependencies: - append-transform "^0.4.0" - -istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.8.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz#724b4b6caceba8692d3f1f9d0727e279c401af7b" - 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.2.0" - semver "^5.3.0" - -istanbul-lib-report@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz#e886cdf505c4ebbd8e099e4396a90d0a28e2acb5" - dependencies: - istanbul-lib-coverage "^1.2.0" - mkdirp "^0.5.1" - path-parse "^1.0.5" - supports-color "^3.1.2" - -istanbul-lib-source-maps@^1.2.1: - version "1.2.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz#20fb54b14e14b3fb6edb6aca3571fd2143db44e6" - dependencies: - debug "^3.1.0" - istanbul-lib-coverage "^1.1.2" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" - -istanbul-lib-source-maps@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.4.tgz#cc7ccad61629f4efff8e2f78adb8c522c9976ec7" - dependencies: - debug "^3.1.0" - istanbul-lib-coverage "^1.2.0" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" - -istanbul-reports@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.3.0.tgz#2f322e81e1d9520767597dca3c20a0cce89a3554" - dependencies: - handlebars "^4.0.3" - -istextorbinary@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/istextorbinary/-/istextorbinary-2.2.1.tgz#a5231a08ef6dd22b268d0895084cf8d58b5bec53" - dependencies: - binaryextensions "2" - editions "^1.3.3" - textextensions "2" - -isurl@^1.0.0-alpha5: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" - dependencies: - has-to-string-tag-x "^1.2.0" - is-object "^1.0.1" - -javascript-stringify@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3" - -jest-changed-files@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.4.3.tgz#8882181e022c38bd46a2e4d18d44d19d90a90fb2" - dependencies: - throat "^4.0.0" - -jest-cli@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.4.3.tgz#bf16c4a5fb7edc3fa5b9bb7819e34139e88a72c7" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.1" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.1.11" - import-local "^1.0.0" - is-ci "^1.0.10" - istanbul-api "^1.1.14" - istanbul-lib-coverage "^1.1.1" - istanbul-lib-instrument "^1.8.0" - istanbul-lib-source-maps "^1.2.1" - jest-changed-files "^22.4.3" - jest-config "^22.4.3" - jest-environment-jsdom "^22.4.3" - jest-get-type "^22.4.3" - jest-haste-map "^22.4.3" - jest-message-util "^22.4.3" - jest-regex-util "^22.4.3" - jest-resolve-dependencies "^22.4.3" - jest-runner "^22.4.3" - jest-runtime "^22.4.3" - jest-snapshot "^22.4.3" - jest-util "^22.4.3" - jest-validate "^22.4.3" - jest-worker "^22.4.3" - micromatch "^2.3.11" - node-notifier "^5.2.1" - realpath-native "^1.0.0" - rimraf "^2.5.4" - slash "^1.0.0" - string-length "^2.0.0" - strip-ansi "^4.0.0" - which "^1.2.12" - yargs "^10.0.3" - -jest-config@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.3.tgz#0e9d57db267839ea31309119b41dc2fa31b76403" - dependencies: - chalk "^2.0.1" - glob "^7.1.1" - jest-environment-jsdom "^22.4.3" - jest-environment-node "^22.4.3" - jest-get-type "^22.4.3" - jest-jasmine2 "^22.4.3" - jest-regex-util "^22.4.3" - jest-resolve "^22.4.3" - jest-util "^22.4.3" - jest-validate "^22.4.3" - pretty-format "^22.4.3" - -jest-diff@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.4.3.tgz#e18cc3feff0aeef159d02310f2686d4065378030" +is-svg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" dependencies: - chalk "^2.0.1" - diff "^3.2.0" - jest-get-type "^22.4.3" - pretty-format "^22.4.3" + html-comment-regex "^1.1.0" -jest-docblock@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.4.3.tgz#50886f132b42b280c903c592373bb6e93bb68b19" - dependencies: - detect-newline "^2.1.0" +is-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" -jest-environment-jsdom@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz#d67daa4155e33516aecdd35afd82d4abf0fa8a1e" - dependencies: - jest-mock "^22.4.3" - jest-util "^22.4.3" - jsdom "^11.5.1" +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" -jest-environment-node@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.4.3.tgz#54c4eaa374c83dd52a9da8759be14ebe1d0b9129" - dependencies: - jest-mock "^22.4.3" - jest-util "^22.4.3" +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" -jest-get-type@^21.2.0: - version "21.2.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.2.0.tgz#f6376ab9db4b60d81e39f30749c6c466f40d4a23" +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" -jest-get-type@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" -jest-haste-map@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.4.3.tgz#25842fa2ba350200767ac27f658d58b9d5c2e20b" - dependencies: - fb-watchman "^2.0.0" - graceful-fs "^4.1.11" - jest-docblock "^22.4.3" - jest-serializer "^22.4.3" - jest-worker "^22.4.3" - micromatch "^2.3.11" - sane "^2.0.0" +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" -jest-jasmine2@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.3.tgz#4daf64cd14c793da9db34a7c7b8dcfe52a745965" - dependencies: - chalk "^2.0.1" - co "^4.6.0" - expect "^22.4.3" - graceful-fs "^4.1.11" - is-generator-fn "^1.0.0" - jest-diff "^22.4.3" - jest-matcher-utils "^22.4.3" - jest-message-util "^22.4.3" - jest-snapshot "^22.4.3" - jest-util "^22.4.3" - source-map-support "^0.5.0" +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" -jest-leak-detector@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.4.3.tgz#2b7b263103afae8c52b6b91241a2de40117e5b35" +isemail@3.x.x: + version "3.1.3" + resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.1.3.tgz#64f37fc113579ea12523165c3ebe3a71a56ce571" dependencies: - pretty-format "^22.4.3" + punycode "2.x.x" -jest-matcher-utils@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz#4632fe428ebc73ebc194d3c7b65d37b161f710ff" - dependencies: - chalk "^2.0.1" - jest-get-type "^22.4.3" - pretty-format "^22.4.3" +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" -jest-message-util@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.4.3.tgz#cf3d38aafe4befddbfc455e57d65d5239e399eb7" +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" dependencies: - "@babel/code-frame" "^7.0.0-beta.35" - chalk "^2.0.1" - micromatch "^2.3.11" - slash "^1.0.0" - stack-utils "^1.0.1" + isarray "1.0.0" -jest-mock@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.4.3.tgz#f63ba2f07a1511772cdc7979733397df770aabc7" +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" -jest-regex-util@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.4.3.tgz#a826eb191cdf22502198c5401a1fc04de9cef5af" +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -jest-resolve-dependencies@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.4.3.tgz#e2256a5a846732dc3969cb72f3c9ad7725a8195e" +istanbul-instrumenter-loader@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.1.tgz#9957bd59252b373fae5c52b7b5188e6fde2a0949" dependencies: - jest-regex-util "^22.4.3" + convert-source-map "^1.5.0" + istanbul-lib-instrument "^1.7.3" + loader-utils "^1.1.0" + schema-utils "^0.3.0" -jest-resolve@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.4.3.tgz#0ce9d438c8438229aa9b916968ec6b05c1abb4ea" - dependencies: - browser-resolve "^1.11.2" - chalk "^2.0.1" +istanbul-lib-coverage@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz#f7d8f2e42b97e37fe796114cb0f9d68b5e3a4341" -jest-runner@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.4.3.tgz#298ddd6a22b992c64401b4667702b325e50610c3" - dependencies: - exit "^0.1.2" - jest-config "^22.4.3" - jest-docblock "^22.4.3" - jest-haste-map "^22.4.3" - jest-jasmine2 "^22.4.3" - jest-leak-detector "^22.4.3" - jest-message-util "^22.4.3" - jest-runtime "^22.4.3" - jest-util "^22.4.3" - jest-worker "^22.4.3" - throat "^4.0.0" - -jest-runtime@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.4.3.tgz#b69926c34b851b920f666c93e86ba2912087e3d0" - dependencies: - babel-core "^6.0.0" - babel-jest "^22.4.3" - babel-plugin-istanbul "^4.1.5" - chalk "^2.0.1" - convert-source-map "^1.4.0" - exit "^0.1.2" - graceful-fs "^4.1.11" - jest-config "^22.4.3" - jest-haste-map "^22.4.3" - jest-regex-util "^22.4.3" - jest-resolve "^22.4.3" - jest-util "^22.4.3" - jest-validate "^22.4.3" - json-stable-stringify "^1.0.1" - micromatch "^2.3.11" - realpath-native "^1.0.0" - slash "^1.0.0" - strip-bom "3.0.0" - write-file-atomic "^2.1.0" - yargs "^10.0.3" +istanbul-lib-coverage@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#2aee0e073ad8c5f6a0b00e0dfbf52b4667472eda" -jest-serializer-vue@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/jest-serializer-vue/-/jest-serializer-vue-1.0.0.tgz#82514e9b3d94a17fe618df3ede84046090f94815" +istanbul-lib-hook@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-2.0.1.tgz#918a57b75a0f951d552a08487ca1fa5336433d72" dependencies: - pretty "2.0.0" + append-transform "^1.0.0" -jest-serializer@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-22.4.3.tgz#a679b81a7f111e4766235f4f0c46d230ee0f7436" - -jest-snapshot@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.4.3.tgz#b5c9b42846ffb9faccb76b841315ba67887362d2" +istanbul-lib-instrument@^1.7.3: + version "1.10.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz#724b4b6caceba8692d3f1f9d0727e279c401af7b" dependencies: - chalk "^2.0.1" - jest-diff "^22.4.3" - jest-matcher-utils "^22.4.3" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - pretty-format "^22.4.3" + 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.2.0" + semver "^5.3.0" -jest-transform-stub@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/jest-transform-stub/-/jest-transform-stub-1.0.0.tgz#e4e941454f31a8bbc4db96b31f46a08b294372b1" +istanbul-lib-instrument@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-2.3.2.tgz#b287cbae2b5f65f3567b05e2e29b275eaf92d25e" + dependencies: + "@babel/generator" "7.0.0-beta.51" + "@babel/parser" "7.0.0-beta.51" + "@babel/template" "7.0.0-beta.51" + "@babel/traverse" "7.0.0-beta.51" + "@babel/types" "7.0.0-beta.51" + istanbul-lib-coverage "^2.0.1" + semver "^5.5.0" -jest-util@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.4.3.tgz#c70fec8eec487c37b10b0809dc064a7ecf6aafac" +istanbul-lib-report@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.1.tgz#64a0a08f42676b9c801b841b9dc3311017c6ae09" dependencies: - callsites "^2.0.0" - chalk "^2.0.1" - graceful-fs "^4.1.11" - is-ci "^1.0.10" - jest-message-util "^22.4.3" - mkdirp "^0.5.1" - source-map "^0.6.0" + istanbul-lib-coverage "^2.0.1" + make-dir "^1.3.0" + supports-color "^5.4.0" -jest-validate@^21.1.0: - version "21.2.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-21.2.1.tgz#cc0cbca653cd54937ba4f2a111796774530dd3c7" +istanbul-lib-source-maps@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-2.0.1.tgz#ce8b45131d8293fdeaa732f4faf1852d13d0a97e" dependencies: - chalk "^2.0.1" - jest-get-type "^21.2.0" - leven "^2.1.0" - pretty-format "^21.2.1" + debug "^3.1.0" + istanbul-lib-coverage "^2.0.1" + make-dir "^1.3.0" + rimraf "^2.6.2" + source-map "^0.6.1" -jest-validate@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.3.tgz#0780954a5a7daaeec8d3c10834b9280865976b30" +istanbul-reports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.0.0.tgz#eb12eddf55724ebc557b32cd77c34d11ed7980c1" dependencies: - chalk "^2.0.1" - jest-config "^22.4.3" - jest-get-type "^22.4.3" - leven "^2.1.0" - pretty-format "^22.4.3" + handlebars "^4.0.11" -jest-worker@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.4.3.tgz#5c421417cba1c0abf64bf56bd5fb7968d79dd40b" - dependencies: - merge-stream "^1.0.1" +javascript-stringify@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3" -jest@^22.4.3: +jest-get-type@^22.1.0: version "22.4.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-22.4.3.tgz#2261f4b117dc46d9a4a1a673d2150958dee92f16" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" + +jest-validate@^23.5.0: + version "23.5.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.5.0.tgz#f5df8f761cf43155e1b2e21d6e9de8a2852d0231" dependencies: - import-local "^1.0.0" - jest-cli "^22.4.3" + chalk "^2.0.1" + jest-get-type "^22.1.0" + leven "^2.1.0" + pretty-format "^23.5.0" -joi@^12.0.0: - version "12.0.0" - resolved "https://registry.yarnpkg.com/joi/-/joi-12.0.0.tgz#46f55e68f4d9628f01bbb695902c8b307ad8d33a" +joi@^13.0.0: + version "13.5.2" + resolved "https://registry.yarnpkg.com/joi/-/joi-13.5.2.tgz#32207c85fa76d889f1e971c7eaaf69b232259a91" dependencies: - hoek "4.x.x" + hoek "5.x.x" isemail "3.x.x" - topo "2.x.x" + topo "3.x.x" -js-base64@^2.1.8, js-base64@^2.1.9: - version "2.4.5" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.5.tgz#e293cd3c7c82f070d700fc7a1ca0a2e69f101f92" +js-base64@^2.1.8: + version "2.4.8" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.8.tgz#57a9b130888f956834aa40c5b165ba59c758f033" -js-beautify@^1.6.12, js-beautify@^1.6.14: - version "1.7.5" - resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.7.5.tgz#69d9651ef60dbb649f65527b53674950138a7919" - dependencies: - config-chain "~1.1.5" - editorconfig "^0.13.2" - mkdirp "~0.5.0" - nopt "~3.0.1" +js-levenshtein@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.3.tgz#3ef627df48ec8cf24bacf05c0f184ff30ef413c5" js-message@1.0.5: version "1.0.5" @@ -7122,24 +5988,25 @@ js-queue@2.0.0: dependencies: easy-stack "^1.0.0" +js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@^3.11.0: +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + +js-yaml@^3.9.0, js-yaml@^3.9.1: version "3.12.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" dependencies: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^3.4.3, js-yaml@^3.7.0, js-yaml@^3.9.0, js-yaml@^3.9.1: - version "3.11.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - js-yaml@~3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" @@ -7147,86 +6014,43 @@ js-yaml@~3.10.0: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@~3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" - dependencies: - argparse "^1.0.7" - esprima "^2.6.0" - jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" -jscodeshift@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.4.1.tgz#da91a1c2eccfa03a3387a21d39948e251ced444a" - dependencies: - async "^1.5.0" - babel-plugin-transform-flow-strip-types "^6.8.0" - babel-preset-es2015 "^6.9.0" - babel-preset-stage-1 "^6.5.0" - babel-register "^6.9.0" - babylon "^6.17.3" - colors "^1.1.2" - flow-parser "^0.*" - lodash "^4.13.1" - micromatch "^2.3.7" - node-dir "0.1.8" - nomnom "^1.8.1" - recast "^0.12.5" - temp "^0.8.1" - write-file-atomic "^1.2.0" - -jscodeshift@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.5.1.tgz#4af6a721648be8638ae1464a190342da52960c33" - dependencies: - babel-plugin-transform-flow-strip-types "^6.8.0" - babel-preset-es2015 "^6.9.0" - babel-preset-stage-1 "^6.5.0" - babel-register "^6.9.0" - babylon "^7.0.0-beta.47" - colors "^1.1.2" - flow-parser "^0.*" - lodash "^4.13.1" - micromatch "^2.3.7" - neo-async "^2.5.0" - node-dir "0.1.8" - nomnom "^1.8.1" - recast "^0.15.0" - temp "^0.8.1" - write-file-atomic "^1.2.0" +jsdom-global@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/jsdom-global/-/jsdom-global-3.0.2.tgz#6bd299c13b0c4626b2da2c0393cd4385d606acb9" -jsdom@^11.5.1: - version "11.10.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.10.0.tgz#a42cd54e88895dc765f03f15b807a474962ac3b5" +jsdom@^11.11.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" dependencies: - abab "^1.0.4" - acorn "^5.3.0" + abab "^2.0.0" + acorn "^5.5.3" acorn-globals "^4.1.0" array-equal "^1.0.0" cssom ">= 0.3.2 < 0.4.0" - cssstyle ">= 0.2.37 < 0.3.0" + cssstyle "^1.0.0" data-urls "^1.0.0" - domexception "^1.0.0" - escodegen "^1.9.0" + domexception "^1.0.1" + escodegen "^1.9.1" html-encoding-sniffer "^1.0.2" - left-pad "^1.2.0" - nwmatcher "^1.4.3" + left-pad "^1.3.0" + nwsapi "^2.0.7" parse5 "4.0.0" pn "^1.1.0" - request "^2.83.0" + request "^2.87.0" request-promise-native "^1.0.5" sax "^1.2.4" symbol-tree "^3.2.2" - tough-cookie "^2.3.3" + tough-cookie "^2.3.4" w3c-hr-time "^1.0.1" webidl-conversions "^4.0.2" whatwg-encoding "^1.0.3" whatwg-mimetype "^2.1.0" - whatwg-url "^6.4.0" - ws "^4.0.0" + whatwg-url "^6.4.1" + ws "^5.2.0" xml-name-validator "^3.0.0" jsesc@^1.3.0: @@ -7241,10 +6065,6 @@ jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -7253,6 +6073,10 @@ json-schema-traverse@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -7261,17 +6085,21 @@ json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - dependencies: - jsonify "~0.0.0" - json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" -json3@3.3.2, json3@^3.3.2: +json2csv@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/json2csv/-/json2csv-4.2.1.tgz#303fa3fa1988ca64a4b0c3bb546a0b34565aa9d0" + dependencies: + commander "^2.15.1" + jsonparse "^1.3.1" + lodash.clonedeep "^4.5.0" + lodash.get "^4.4.2" + lodash.set "^4.3.2" + +json3@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" @@ -7279,15 +6107,9 @@ json5@^0.5.0, json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - dependencies: - minimist "^1.2.0" - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" +jsonfile@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" optionalDependencies: graceful-fs "^4.1.6" @@ -7301,9 +6123,9 @@ jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" -jsonpointer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" +jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" jsprim@^1.2.2: version "1.4.1" @@ -7314,15 +6136,9 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -kew@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b" - -keyv@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" - dependencies: - json-buffer "3.0.0" +just-extend@^1.1.27: + version "1.1.27" + resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-1.1.27.tgz#ec6e79410ff914e472652abfa0e603c03d60e905" killable@^1.0.0: version "1.0.0" @@ -7348,25 +6164,6 @@ kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - optionalDependencies: - graceful-fs "^4.1.9" - -last-call-webpack-plugin@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" - dependencies: - lodash "^4.17.5" - webpack-sources "^1.1.0" - -latest-version@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" - dependencies: - package-json "^4.0.0" - launch-editor-middleware@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz#e14b07e6c7154b0a4b86a0fd345784e45804c157" @@ -7380,25 +6177,21 @@ launch-editor@^2.2.1: chalk "^2.3.0" shell-quote "^1.6.1" +lazy-ass@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" + lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" -lazy-val@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.3.tgz#bb97b200ef00801d94c317e29dc6ed39e31c5edc" - lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" dependencies: invert-kv "^1.0.0" -leb@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/leb/-/leb-0.3.0.tgz#32bee9fad168328d6aea8522d833f4180eed1da3" - -left-pad@^1.2.0: +left-pad@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" @@ -7413,35 +6206,58 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -lint-staged@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-6.1.1.tgz#cd08c4d9b8ccc2d37198d1c47ce77d22be6cf324" +linebreak@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/linebreak/-/linebreak-0.3.0.tgz#0526480a62c05bd679f3e9d99830e09c6a7d0ed6" dependencies: - app-root-path "^2.0.0" - chalk "^2.1.0" - commander "^2.11.0" - cosmiconfig "^4.0.0" + base64-js "0.0.8" + brfs "^1.3.0" + unicode-trie "^0.3.0" + +lint-staged@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-7.2.2.tgz#0983d55d497f19f36d11ff2c8242b2f56cc2dd05" + dependencies: + chalk "^2.3.1" + commander "^2.14.1" + cosmiconfig "^5.0.2" debug "^3.1.0" dedent "^0.7.0" - execa "^0.8.0" + execa "^0.9.0" find-parent-dir "^0.3.0" is-glob "^4.0.0" - jest-validate "^21.1.0" - listr "^0.13.0" - lodash "^4.17.4" - log-symbols "^2.0.0" - minimatch "^3.0.0" + is-windows "^1.0.2" + jest-validate "^23.5.0" + listr "^0.14.1" + lodash "^4.17.5" + log-symbols "^2.2.0" + micromatch "^3.1.8" npm-which "^3.0.1" p-map "^1.1.1" path-is-inside "^1.0.2" pify "^3.0.0" - staged-git-files "1.0.0" - stringify-object "^3.2.0" + please-upgrade-node "^3.0.2" + staged-git-files "1.1.1" + string-argv "^0.0.2" + stringify-object "^3.2.2" listr-silent-renderer@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" +listr-update-renderer@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz#ca80e1779b4e70266807e8eed1ad6abe398550f9" + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + elegant-spinner "^1.0.1" + figures "^1.7.0" + indent-string "^3.0.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + strip-ansi "^3.0.1" + listr-update-renderer@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz#344d980da2ca2e8b145ba305908f32ae3f4cc8a7" @@ -7464,26 +6280,25 @@ listr-verbose-renderer@^0.4.0: date-fns "^1.27.2" figures "^1.7.0" -listr@^0.13.0: - version "0.13.0" - resolved "https://registry.yarnpkg.com/listr/-/listr-0.13.0.tgz#20bb0ba30bae660ee84cc0503df4be3d5623887d" +listr@0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/listr/-/listr-0.12.0.tgz#6bce2c0f5603fa49580ea17cd6a00cc0e5fa451a" dependencies: chalk "^1.1.3" cli-truncate "^0.2.1" figures "^1.7.0" indent-string "^2.1.0" - is-observable "^0.2.0" is-promise "^2.1.0" is-stream "^1.1.0" listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.4.0" + listr-update-renderer "^0.2.0" listr-verbose-renderer "^0.4.0" log-symbols "^1.0.2" log-update "^1.0.2" ora "^0.2.3" p-map "^1.1.1" - rxjs "^5.4.2" - stream-to-observable "^0.2.0" + rxjs "^5.0.0-beta.11" + stream-to-observable "^0.1.0" strip-ansi "^3.0.1" listr@^0.14.1: @@ -7559,74 +6374,23 @@ loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -lodash._arraycopy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" - -lodash._arrayeach@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e" - -lodash._baseassign@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" - dependencies: - lodash._basecopy "^3.0.0" - lodash.keys "^3.0.0" - -lodash._baseclone@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz#303519bf6393fe7e42f34d8b630ef7794e3542b7" - dependencies: - lodash._arraycopy "^3.0.0" - lodash._arrayeach "^3.0.0" - lodash._baseassign "^3.0.0" - lodash._basefor "^3.0.0" - lodash.isarray "^3.0.0" - lodash.keys "^3.0.0" - -lodash._baseclone@^4.0.0: - version "4.5.7" - resolved "https://registry.yarnpkg.com/lodash._baseclone/-/lodash._baseclone-4.5.7.tgz#ce42ade08384ef5d62fa77c30f61a46e686f8434" - -lodash._basecopy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" - -lodash._basecreate@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" - -lodash._basefor@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" - -lodash._bindcallback@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" -lodash._isiterateecall@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" -lodash._stack@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/lodash._stack/-/lodash._stack-4.1.3.tgz#751aa76c1b964b047e76d14fc72a093fcb5e2dd0" +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" lodash.assign@^4.2.0: version "4.2.0" @@ -7636,64 +6400,29 @@ lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" -lodash.clone@3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-3.0.3.tgz#84688c73d32b5a90ca25616963f189252a997043" - dependencies: - lodash._baseclone "^3.0.0" - lodash._bindcallback "^3.0.0" - lodash._isiterateecall "^3.0.0" - -lodash.clonedeep@^4.3.2: +lodash.clonedeep@4.5.0, lodash.clonedeep@^4.3.2, lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" -lodash.create@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" - dependencies: - lodash._baseassign "^3.0.0" - lodash._basecreate "^3.0.0" - lodash._isiterateecall "^3.0.0" - -lodash.defaultsdeep@4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.3.2.tgz#6c1a586e6c5647b0e64e2d798141b8836158be8a" - dependencies: - lodash._baseclone "^4.0.0" - lodash._stack "^4.0.0" - lodash.isplainobject "^4.0.0" - lodash.keysin "^4.0.0" - lodash.mergewith "^4.0.0" - lodash.rest "^4.0.0" +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" lodash.defaultsdeep@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.0.tgz#bec1024f85b1bd96cbea405b23c14ad6443a6f81" -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - -lodash.isplainobject@^4.0.0: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" +lodash.flattendeep@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" -lodash.keys@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" - dependencies: - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" +lodash.foreach@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" -lodash.keysin@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.keysin/-/lodash.keysin-4.2.0.tgz#8cc3fb35c2d94acc443a1863e02fa40799ea6f28" +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" lodash.mapvalues@^4.6.0: version "4.6.0" @@ -7703,13 +6432,17 @@ lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" -lodash.mergewith@^4.0.0, lodash.mergewith@^4.6.0: +lodash.mergewith@^4.6.0: version "4.6.1" resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927" -lodash.rest@^4.0.0: - version "4.0.5" - resolved "https://registry.yarnpkg.com/lodash.rest/-/lodash.rest-4.0.5.tgz#954ef75049262038c96d1fc98b28fdaf9f0772aa" +lodash.once@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + +lodash.set@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" lodash.sortby@^4.7.0: version "4.7.0" @@ -7727,22 +6460,22 @@ lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash@4.x, lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.10, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.3.0, lodash@~4.17.4: +lodash@4.17.10, lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.10, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.3.0, lodash@~4.17.10: version "4.17.10" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" +log-symbols@2.2.0, log-symbols@^2.1.0, log-symbols@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + dependencies: + chalk "^2.0.1" + log-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" dependencies: chalk "^1.0.0" -log-symbols@^2.0.0, log-symbols@^2.1.0, log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - dependencies: - chalk "^2.0.1" - log-update@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" @@ -7761,7 +6494,15 @@ loglevelnext@^1.0.1: es6-symbol "^3.1.1" object.assign "^4.1.0" -long@^3.2.0, long@~3: +lolex@^2.3.2, lolex@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-2.7.1.tgz#e40a8c4d1f14b536aa03e42a537c7adbaf0c20be" + +long@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + +long@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" @@ -7770,10 +6511,10 @@ longest@^1.0.1: resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" loose-envify@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" dependencies: - js-tokens "^3.0.0" + js-tokens "^3.0.0 || ^4.0.0" loud-rejection@^1.0.0, loud-rejection@^1.6.0: version "1.6.0" @@ -7786,47 +6527,25 @@ lower-case@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" -lowercase-keys@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" - -lowercase-keys@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - -lru-cache@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-3.2.0.tgz#71789b3b7f5399bec8565dda38aa30d2a097efee" - dependencies: - pseudomap "^1.0.1" - -lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.2: +lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.2, lru-cache@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" dependencies: pseudomap "^1.0.2" yallist "^2.1.2" -lru-cache@~2.6.5: - version "2.6.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.6.5.tgz#e56d6354148ede8d7707b58d143220fd08df0fd5" - -macaddress@^0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" +magic-string@^0.22.4: + version "0.22.5" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" + dependencies: + vlq "^0.2.2" -make-dir@^1.0.0, make-dir@^1.1.0: +make-dir@^1.0.0, make-dir@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" dependencies: pify "^3.0.0" -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - dependencies: - tmpl "1.0.x" - mamacro@^0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" @@ -7845,14 +6564,20 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -math-expression-evaluator@^1.2.14: - version "1.2.17" - resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" - math-random@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" +md5-hex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-2.0.0.tgz#d0588e9f1c74954492ecd24ac0ac6ce997d92e33" + dependencies: + md5-o-matic "^0.1.1" + +md5-o-matic@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/md5-o-matic/-/md5-o-matic-0.1.1.tgz#822bccd65e117c514fab176b25945d54100a03c3" + md5.js@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" @@ -7860,52 +6585,28 @@ md5.js@^1.3.4: hash-base "^3.0.0" inherits "^2.0.1" -mdn-data@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.3.tgz#d0929cdf73db32b0afd6d3ab8ef3da2b29b6f76b" +mdn-data@^1.0.0, mdn-data@~1.1.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01" media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" -mem-fs-editor@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/mem-fs-editor/-/mem-fs-editor-4.0.2.tgz#55a79b1e824da631254c4c95ba6366602c77af90" - dependencies: - commondir "^1.0.1" - deep-extend "^0.5.1" - ejs "^2.5.9" - glob "^7.0.3" - globby "^8.0.0" - isbinaryfile "^3.0.2" - mkdirp "^0.5.0" - multimatch "^2.0.0" - rimraf "^2.2.8" - through2 "^2.0.0" - vinyl "^2.0.1" - -mem-fs@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/mem-fs/-/mem-fs-1.1.3.tgz#b8ae8d2e3fcb6f5d3f9165c12d4551a065d989cc" - dependencies: - through2 "^2.0.0" - vinyl "^1.1.0" - vinyl-file "^2.0.0" - mem@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" dependencies: mimic-fn "^1.0.0" -memory-fs@^0.4.0, memory-fs@~0.4.1: +memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" dependencies: errno "^0.1.3" readable-stream "^2.0.1" -meow@^3.1.0, meow@^3.3.0, meow@^3.7.0: +meow@^3.3.0, meow@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" dependencies: @@ -7924,31 +6625,27 @@ merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" +merge-source-map@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.0.4.tgz#a5de46538dae84d4114cc5ea02b4772a6346701f" + dependencies: + source-map "^0.5.6" + merge-source-map@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" dependencies: source-map "^0.6.1" -merge-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" - dependencies: - readable-stream "^2.0.1" - merge2@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.2.tgz#03212e3da8d86c4d8523cebd6318193414f94e34" -merge@^1.1.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" - methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" -micromatch@^2.3.11, micromatch@^2.3.7: +micromatch@^2.3.11: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" dependencies: @@ -7991,21 +6688,21 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -"mime-db@>= 1.33.0 < 2", mime-db@~1.33.0: - version "1.33.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" +"mime-db@>= 1.34.0 < 2", mime-db@~1.35.0: + version "1.35.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.35.0.tgz#0569d657466491283709663ad379a99b90d9ab47" -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7: - version "2.1.18" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18: + version "2.1.19" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.19.tgz#71e464537a7ef81c15f2db9d97e913fc0ff606f0" dependencies: - mime-db "~1.33.0" + mime-db "~1.35.0" mime@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" -mime@^2.0.3, mime@^2.1.0, mime@^2.3.1: +mime@^2.0.3, mime@^2.1.0: version "2.3.1" resolved "https://registry.yarnpkg.com/mime/-/mime-2.3.1.tgz#b1621c54d63b97c47d3cfe7f7215f7d64517c369" @@ -8013,18 +6710,15 @@ mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" -mimic-response@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.0.tgz#df3d3652a73fded6b9b0b24146e6fd052353458e" - -mini-css-extract-plugin@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.0.tgz#ff3bf08bee96e618e177c16ca6131bfecef707f9" +mini-css-extract-plugin@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.1.tgz#d2bcf77bb2596b8e4bd9257e43d3f9164c2e86cb" dependencies: + "@webpack-contrib/schema-utils" "^1.0.0-beta.0" loader-utils "^1.1.0" webpack-sources "^1.1.0" -minimalistic-assert@^1.0.0: +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -8032,27 +6726,17 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2: +"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: brace-expansion "^1.1.7" -minimatch@3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" - dependencies: - brace-expansion "^1.0.0" - minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -minimist@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.1.0.tgz#99df657a52574c21c9057497df742790b2b4c0de" - -minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: +minimist@1.2.0, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" @@ -8060,11 +6744,11 @@ minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" -minipass@^2.2.1, minipass@^2.2.4: - version "2.3.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.0.tgz#2e11b1c46df7fe7f1afbe9a490280add21ffe384" +minipass@^2.2.1, minipass@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.3.tgz#a7dcc8b7b833f5d368759cce544dccb55f50f233" dependencies: - safe-buffer "^5.1.1" + safe-buffer "^5.1.2" yallist "^3.0.0" minizlib@^1.1.0: @@ -8114,25 +6798,43 @@ mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdi dependencies: minimist "0.0.8" -mkpath@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mkpath/-/mkpath-1.0.0.tgz#ebb3a977e7af1c683ae6fda12b545a6ba6c5853d" +mocha-webpack@^2.0.0-beta.0: + version "2.0.0-beta.0" + resolved "https://registry.yarnpkg.com/mocha-webpack/-/mocha-webpack-2.0.0-beta.0.tgz#d85fc9a70f82a4ad595b7702a1181605dfa59549" + dependencies: + babel-runtime "^6.18.0" + chalk "^2.3.0" + chokidar "^2.0.2" + glob-parent "^3.1.0" + globby "^7.1.1" + interpret "^1.0.1" + is-glob "^4.0.0" + loader-utils "^1.1.0" + lodash "^4.3.0" + memory-fs "^0.4.1" + nodent-runtime "^3.0.3" + normalize-path "^2.0.1" + progress "^2.0.0" + source-map-support "^0.5.0" + strip-ansi "^4.0.0" + toposort "^1.0.0" + yargs "^11.0.0" -mocha-nightwatch@3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/mocha-nightwatch/-/mocha-nightwatch-3.2.2.tgz#91bcb9b3bde057dd7677c78125e491e58d66647c" +mocha@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6" dependencies: - browser-stdout "1.3.0" - commander "2.9.0" - debug "2.2.0" - diff "1.4.0" + browser-stdout "1.3.1" + commander "2.15.1" + debug "3.1.0" + diff "3.5.0" escape-string-regexp "1.0.5" - glob "7.0.5" - growl "1.9.2" - json3 "3.3.2" - lodash.create "3.1.1" + glob "7.1.2" + growl "1.10.5" + he "1.1.1" + minimatch "3.0.4" mkdirp "0.5.1" - supports-color "3.1.2" + supports-color "5.4.0" move-concurrently@^1.0.1: version "1.0.1" @@ -8145,10 +6847,6 @@ move-concurrently@^1.0.1: rimraf "^2.5.4" run-queue "^1.0.3" -ms@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -8164,33 +6862,23 @@ multicast-dns@^6.0.1: dns-packet "^1.3.1" thunky "^1.0.2" -multimatch@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" - dependencies: - array-differ "^1.0.0" - array-union "^1.0.1" - arrify "^1.0.0" - minimatch "^3.0.0" - mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" -nan@^2.0.0, nan@^2.10.0, nan@^2.9.2: +nan@^2.10.0, nan@^2.9.2: version "2.10.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" nanomatch@^1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" define-property "^2.0.2" extend-shallow "^3.0.2" fragment-cache "^0.2.1" - is-odd "^2.0.0" is-windows "^1.0.2" kind-of "^6.0.2" object.pick "^1.3.0" @@ -8202,7 +6890,7 @@ natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" -needle@^2.2.0: +needle@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d" dependencies: @@ -8218,10 +6906,6 @@ neo-async@^2.5.0: version "2.5.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.1.tgz#acb909e327b1e87ec9ef15f41b8a269512ad41ee" -netmask@~1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35" - next-tick@1: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" @@ -8230,20 +6914,15 @@ nice-try@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" -nightwatch@^0.9.21: - version "0.9.21" - resolved "https://registry.yarnpkg.com/nightwatch/-/nightwatch-0.9.21.tgz#9e794a7514b4fd5f46602d368e50515232ab9e90" - dependencies: - chai-nightwatch "~0.1.x" - ejs "2.5.7" - lodash.clone "3.0.3" - lodash.defaultsdeep "4.3.2" - minimatch "3.0.3" - mkpath "1.0.0" - mocha-nightwatch "3.2.2" - optimist "0.6.1" - proxy-agent "2.0.0" - q "1.4.1" +nise@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/nise/-/nise-1.4.2.tgz#a9a3800e3994994af9e452333d549d60f72b8e8c" + dependencies: + "@sinonjs/formatio" "^2.0.0" + just-extend "^1.1.27" + lolex "^2.3.2" + path-to-regexp "^1.7.0" + text-encoding "^0.6.4" no-case@^2.2.0: version "2.3.2" @@ -8251,43 +6930,27 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" -node-cache@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/node-cache/-/node-cache-4.2.0.tgz#48ac796a874e762582692004a376d26dfa875811" - dependencies: - clone "2.x" - lodash "4.x" - -node-dir@0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.8.tgz#55fb8deb699070707fb67f91a460f0448294c77d" - node-forge@0.7.5: version "0.7.5" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" -node-gyp@^3.3.1: - version "3.6.2" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60" +node-gyp@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" dependencies: fstream "^1.0.0" glob "^7.0.3" graceful-fs "^4.1.2" - minimatch "^3.0.2" mkdirp "^0.5.0" nopt "2 || 3" npmlog "0 || 1 || 2 || 3 || 4" osenv "0" - request "2" + request "^2.87.0" rimraf "2" semver "~5.3.0" tar "^2.0.0" which "1" -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - node-ipc@^9.1.1: version "9.1.1" resolved "https://registry.yarnpkg.com/node-ipc/-/node-ipc-9.1.1.tgz#4e245ed6938e65100e595ebc5dc34b16e8dd5d69" @@ -8324,37 +6987,40 @@ node-libs-browser@^2.0.0: util "^0.10.3" vm-browserify "0.0.4" -node-loader@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/node-loader/-/node-loader-0.6.0.tgz#c797ef51095ed5859902b157f6384f6361e05ae8" - -node-notifier@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" - dependencies: - growly "^1.3.0" - semver "^5.4.1" - shellwords "^0.1.1" - which "^1.3.0" +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" node-pre-gyp@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.0.tgz#6e4ef5bb5c5203c6552448828c852c40111aac46" + version "0.10.3" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" dependencies: detect-libc "^1.0.2" mkdirp "^0.5.1" - needle "^2.2.0" + needle "^2.2.1" nopt "^4.0.1" npm-packlist "^1.1.6" npmlog "^4.0.2" - rc "^1.1.7" + rc "^1.2.7" rimraf "^2.6.1" semver "^5.3.0" tar "^4" -node-sass@^4.7.2: - version "4.9.0" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.9.0.tgz#d1b8aa855d98ed684d6848db929a20771cc2ae52" +node-releases@^1.0.0-alpha.10: + version "1.0.0-alpha.10" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.0.0-alpha.10.tgz#61c8d5f9b5b2e05d84eba941d05b6f5202f68a2a" + dependencies: + semver "^5.3.0" + +node-releases@^1.0.0-alpha.11: + version "1.0.0-alpha.11" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.0.0-alpha.11.tgz#73c810acc2e5b741a17ddfbb39dfca9ab9359d8a" + dependencies: + semver "^5.3.0" + +node-sass@^4.9.3: + version "4.9.3" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.9.3.tgz#f407cf3d66f78308bb1e346b24fa428703196224" dependencies: async-foreach "^0.1.3" chalk "^1.1.1" @@ -8369,21 +7035,18 @@ node-sass@^4.7.2: meow "^3.7.0" mkdirp "^0.5.1" nan "^2.10.0" - node-gyp "^3.3.1" + node-gyp "^3.8.0" npmlog "^4.0.0" - request "~2.79.0" + request "2.87.0" sass-graph "^2.2.4" stdout-stream "^1.4.0" "true-case-path" "^1.0.2" -nomnom@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.8.1.tgz#2151f722472ba79e50a76fc125bb8c8f2e4dc2a7" - dependencies: - chalk "~0.4.0" - underscore "~1.6.0" +nodent-runtime@^3.0.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/nodent-runtime/-/nodent-runtime-3.2.1.tgz#9e2755d85e39f764288f0d4752ebcfe3e541e00e" -"nopt@2 || 3", nopt@~3.0.1: +"nopt@2 || 3": version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" dependencies: @@ -8396,7 +7059,7 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.4.0: +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: version "2.4.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" dependencies: @@ -8419,38 +7082,21 @@ normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" -normalize-url@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" - dependencies: - prepend-http "^2.0.0" - query-string "^5.0.1" - sort-keys "^2.0.0" - -normalize-url@^1.4.0, normalize-url@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" +normalize-url@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.2.0.tgz#98d0948afc82829f374320f405fe9ca55a5f8567" normalize-wheel@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/normalize-wheel/-/normalize-wheel-1.0.1.tgz#aec886affdb045070d856447df62ecf86146ec45" -normalize.css@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.0.tgz#14ac5e461612538a4ce9be90a7da23f86e718493" - npm-bundled@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.3.tgz#7e71703d973af3370a9591bafe3a63aca0be2308" npm-packlist@^1.1.6: - version "1.1.10" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.10.tgz#1039db9e985727e464df066f4cf0ab6ef85c398a" + version "1.1.11" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.11.tgz#84e8c683cbe7867d34b1d357d893ce29e28a02de" dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" @@ -8490,18 +7136,6 @@ nth-check@^1.0.1, nth-check@~1.0.1: dependencies: boolbase "~1.0.0" -nugget@^2.0.0, nugget@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/nugget/-/nugget-2.0.1.tgz#201095a487e1ad36081b3432fa3cada4f8d071b0" - dependencies: - debug "^2.1.3" - minimist "^1.1.0" - pretty-bytes "^1.0.2" - progress-stream "^1.1.0" - request "^2.45.0" - single-line-log "^1.1.2" - throttleit "0.0.2" - num2fraction@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" @@ -8510,15 +7144,51 @@ number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" -nwmatcher@^1.4.3: - version "1.4.4" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e" +numbro@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/numbro/-/numbro-2.1.0.tgz#618ac6e4b2f32f2e623190ce4b05f4c8b09c3207" + dependencies: + bignumber.js "^4.0.4" + +nwsapi@^2.0.7: + version "2.0.8" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.8.tgz#e3603579b7e162b3dbedae4fb24e46f771d8fa24" + +nyc@^13.0.1: + version "13.0.1" + resolved "https://registry.yarnpkg.com/nyc/-/nyc-13.0.1.tgz#b61857ed633c803353fc41eeca775d0e1f62034b" + dependencies: + archy "^1.0.0" + arrify "^1.0.1" + caching-transform "^2.0.0" + convert-source-map "^1.5.1" + debug-log "^1.0.1" + find-cache-dir "^2.0.0" + find-up "^3.0.0" + foreground-child "^1.5.6" + glob "^7.1.2" + istanbul-lib-coverage "^2.0.1" + istanbul-lib-hook "^2.0.1" + istanbul-lib-instrument "^2.3.2" + istanbul-lib-report "^2.0.1" + istanbul-lib-source-maps "^2.0.1" + istanbul-reports "^2.0.0" + make-dir "^1.3.0" + merge-source-map "^1.1.0" + resolve-from "^4.0.0" + rimraf "^2.6.2" + signal-exit "^3.0.2" + spawn-wrap "^1.4.2" + test-exclude "^5.0.0" + uuid "^3.3.2" + yargs "11.1.0" + yargs-parser "^9.0.2" -oauth-sign@~0.8.1, oauth-sign@~0.8.2: +oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -8534,13 +7204,13 @@ object-hash@^1.1.4: version "1.3.0" resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.0.tgz#76d9ba6ff113cf8efc0d996102851fe6723963e2" -object-keys@^1.0.11, object-keys@^1.0.8: - version "1.0.11" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" +object-inspect@~1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.4.1.tgz#37ffb10e71adaf3748d05f713b4c9452f402cbc4" -object-keys@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" +object-keys@^1.0.11, object-keys@^1.0.6, object-keys@^1.0.8: + version "1.0.12" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" object-visit@^1.0.0: version "1.0.1" @@ -8616,26 +7286,23 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" -opn@^5.1.0, opn@^5.2.0: +opener@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8" + +opn@^5.1.0, opn@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz#64871565c863875f052cfdf53d3e3cb5adb53b1c" dependencies: is-wsl "^1.1.0" -optimist@0.6.1, optimist@^0.6.1: +optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" dependencies: minimist "~0.0.1" wordwrap "~0.0.2" -optimize-css-assets-webpack-plugin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-4.0.1.tgz#48f016766752c7648b92cc1e795b999732bd87a2" - dependencies: - cssnano "^3.4.0" - last-call-webpack-plugin "^3.0.0" - optionator@^0.8.1, optionator@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" @@ -8647,10 +7314,6 @@ optionator@^0.8.1, optionator@^0.8.2: type-check "~0.3.2" wordwrap "~1.0.0" -optjs@~3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/optjs/-/optjs-3.2.2.tgz#69a6ce89c442a44403141ad2f9b370bd5bb6f4ee" - ora@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" @@ -8660,15 +7323,6 @@ ora@^0.2.3: cli-spinners "^0.1.2" object-assign "^4.0.1" -ora@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-1.4.0.tgz#884458215b3a5d4097592285f93321bb7a79e2e5" - dependencies: - chalk "^2.1.0" - cli-cursor "^2.1.0" - cli-spinners "^1.0.1" - log-symbols "^2.1.0" - ora@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ora/-/ora-2.1.0.tgz#6caf2830eb924941861ec53a173799e008b51e5b" @@ -8681,10 +7335,10 @@ ora@^2.1.0: wcwidth "^1.0.1" original@>=0.0.5: - version "1.0.1" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.1.tgz#b0a53ff42ba997a8c9cd1fb5daaeb42b9d693190" + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" dependencies: - url-parse "~1.4.0" + url-parse "^1.4.3" os-browserify@^0.3.0: version "0.3.0" @@ -8708,7 +7362,7 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -8719,100 +7373,58 @@ osenv@0, osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -p-cancelable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" - -p-cancelable@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" - -p-each-series@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" - dependencies: - p-reduce "^1.0.0" - p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" -p-is-promise@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" - -p-lazy@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-lazy/-/p-lazy-1.0.0.tgz#ec53c802f2ee3ac28f166cc82d0b2b02de27a835" - p-limit@^1.0.0, p-limit@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" dependencies: p-try "^1.0.0" +p-limit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" + dependencies: + p-try "^2.0.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" dependencies: p-limit "^1.1.0" +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + dependencies: + p-limit "^2.0.0" + p-map@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" -p-reduce@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" - -p-timeout@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" - dependencies: - p-finally "^1.0.0" - -p-timeout@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" - dependencies: - p-finally "^1.0.0" - p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" -pac-proxy-agent@1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-1.1.0.tgz#34a385dfdf61d2f0ecace08858c745d3e791fd4d" - dependencies: - agent-base "2" - debug "2" - extend "3" - get-uri "2" - http-proxy-agent "1" - https-proxy-agent "1" - pac-resolver "~2.0.0" - raw-body "2" - socks-proxy-agent "2" - -pac-resolver@~2.0.0: +p-try@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-2.0.0.tgz#99b88d2f193fbdeefc1c9a529c1f3260ab5277cd" - dependencies: - co "~3.0.6" - degenerator "~1.0.2" - ip "1.0.1" - netmask "~1.0.4" - thunkify "~2.1.1" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" -package-json@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" +package-hash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-2.0.0.tgz#78ae326c89e05a4d813b68601977af05c00d2a0d" dependencies: - got "^6.7.1" - registry-auth-token "^3.0.1" - registry-url "^3.0.3" - semver "^5.1.0" + graceful-fs "^4.1.11" + lodash.flattendeep "^4.4.0" + md5-hex "^2.0.0" + release-zalgo "^1.0.0" + +pako@^0.2.5: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" pako@~1.0.5: version "1.0.6" @@ -8842,12 +7454,6 @@ parse-asn1@^5.0.0: evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" -parse-color@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-color/-/parse-color-1.0.0.tgz#7b748b95a83f03f16a94f535e52d7f3d94658619" - dependencies: - color-convert "~0.5.0" - parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -8870,18 +7476,10 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - parse5@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" -parser-toolkit@>=0.0.3: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parser-toolkit/-/parser-toolkit-0.0.5.tgz#ec4b61729c86318b56ea971bfba6b3c672d62c01" - parseurl@~1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" @@ -8898,7 +7496,7 @@ path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" -path-exists@^2.0.0, path-exists@^2.1.0: +path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" dependencies: @@ -8921,13 +7519,19 @@ path-key@^2.0.0, path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" +path-to-regexp@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" + dependencies: + isarray "0.0.1" + path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" @@ -8948,6 +7552,10 @@ path-type@^3.0.0: dependencies: pify "^3.0.0" +pathval@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" + pbkdf2@^3.0.3: version "3.0.16" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.16.tgz#7404208ec6b01b62d85bf83853a8064f8d9c2a5c" @@ -8958,6 +7566,23 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +pdfkit@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/pdfkit/-/pdfkit-0.8.3.tgz#ec99a57fc55ca309726f856456da14418f5330e3" + dependencies: + fontkit "^1.0.0" + linebreak "^0.3.0" + png-js ">=0.1.0" + +pdfmake-lite@^0.1.36: + version "0.1.36" + resolved "https://registry.yarnpkg.com/pdfmake-lite/-/pdfmake-lite-0.1.36.tgz#de1da10639d64aa77a0c609acaaf437f7b1e12ec" + dependencies: + fontkit-lite "^1.8.1" + iconv-lite "^0.4.19" + linebreak "^0.3.0" + pdfkit "^0.8.3" + pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" @@ -8966,7 +7591,7 @@ performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" -pify@^2.0.0, pify@^2.3.0: +pify@^2.0.0, pify@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -8984,6 +7609,12 @@ pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" +pirates@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.0.tgz#850b18781b4ac6ec58a43c9ed9ec5fe6796addbd" + dependencies: + node-modules-regexp "^1.0.0" + pkg-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" @@ -8996,21 +7627,17 @@ pkg-dir@^2.0.0: dependencies: find-up "^2.1.0" -plist@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/plist/-/plist-2.1.0.tgz#57ccdb7a0821df21831217a3cad54e3e146a1025" +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" dependencies: - base64-js "1.2.0" - xmlbuilder "8.2.2" - xmldom "0.1.x" + find-up "^3.0.0" -plist@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c" +please-upgrade-node@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" dependencies: - base64-js "^1.2.3" - xmlbuilder "^9.0.7" - xmldom "0.1.x" + semver-compare "^1.0.0" pluralize@^7.0.0: version "7.0.0" @@ -9020,9 +7647,13 @@ pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" +png-js@>=0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/png-js/-/png-js-0.1.1.tgz#1cc7c212303acabe74263ec3ac78009580242d93" + portfinder@^1.0.13, portfinder@^1.0.9: - version "1.0.13" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9" + version "1.0.15" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.15.tgz#28990f8a1d2794a5709010b25d9f6d90fcc2fa14" dependencies: async "^1.5.2" debug "^2.2.0" @@ -9032,159 +7663,126 @@ posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" -postcss-calc@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" - dependencies: - postcss "^5.0.2" - postcss-message-helpers "^2.0.0" - reduce-css-calc "^1.2.6" - -postcss-colormin@^2.1.8: - version "2.2.2" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" - dependencies: - colormin "^1.0.5" - postcss "^5.0.13" - postcss-value-parser "^3.2.3" - -postcss-convert-values@^2.3.4: - version "2.6.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" - dependencies: - postcss "^5.0.11" - postcss-value-parser "^3.1.2" - -postcss-discard-comments@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" - dependencies: - postcss "^5.0.14" - -postcss-discard-duplicates@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" +postcss-calc@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-6.0.1.tgz#3d24171bbf6e7629d422a436ebfe6dd9511f4330" dependencies: - postcss "^5.0.4" + css-unit-converter "^1.1.1" + postcss "^6.0.0" + postcss-selector-parser "^2.2.2" + reduce-css-calc "^2.0.0" -postcss-discard-empty@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" +postcss-colormin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.1.tgz#6f1c18a0155bc69613f2ff13843e2e4ae8ff0bbe" dependencies: - postcss "^5.0.14" + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^6.0.0" + postcss-value-parser "^3.0.0" -postcss-discard-overridden@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" +postcss-convert-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.0.tgz#77d77d9aed1dc4e6956e651cc349d53305876f62" dependencies: - postcss "^5.0.16" + postcss "^6.0.0" + postcss-value-parser "^3.0.0" -postcss-discard-unused@^2.2.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" +postcss-discard-comments@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.0.tgz#9684a299e76b3e93263ef8fd2adbf1a1c08fd88d" dependencies: - postcss "^5.0.14" - uniqs "^2.0.0" + postcss "^6.0.0" -postcss-filter-plugins@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c" +postcss-discard-duplicates@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.0.tgz#42f3c267f85fa909e042c35767ecfd65cb2bd72c" dependencies: - postcss "^5.0.4" - uniqid "^4.0.0" + postcss "^6.0.0" -postcss-load-config@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a" +postcss-discard-empty@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.0.tgz#55e18a59c74128e38c7d2804bcfa4056611fb97f" dependencies: - cosmiconfig "^2.1.0" - object-assign "^4.1.0" - postcss-load-options "^1.2.0" - postcss-load-plugins "^2.3.0" + postcss "^6.0.0" -postcss-load-options@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c" +postcss-discard-overridden@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.0.tgz#4a0bf85978784cf1f81ed2c1c1fd9d964a1da1fa" dependencies: - cosmiconfig "^2.1.0" - object-assign "^4.1.0" + postcss "^6.0.0" -postcss-load-plugins@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92" +postcss-load-config@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.0.0.tgz#f1312ddbf5912cd747177083c5ef7a19d62ee484" dependencies: - cosmiconfig "^2.1.1" - object-assign "^4.1.0" + cosmiconfig "^4.0.0" + import-cwd "^2.0.0" -postcss-loader@^2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.1.5.tgz#3c6336ee641c8f95138172533ae461a83595e788" +postcss-loader@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.1.6.tgz#1d7dd7b17c6ba234b9bed5af13e0bea40a42d740" dependencies: loader-utils "^1.1.0" postcss "^6.0.0" - postcss-load-config "^1.2.0" + postcss-load-config "^2.0.0" schema-utils "^0.4.0" -postcss-merge-idents@^2.1.5: - version "2.1.7" - resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" - dependencies: - has "^1.0.1" - postcss "^5.0.10" - postcss-value-parser "^3.1.1" - -postcss-merge-longhand@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" +postcss-merge-longhand@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.4.tgz#bffc7c6ffa146591c993a0bb8373d65f9a06d4d0" dependencies: - postcss "^5.0.4" + css-color-names "0.0.4" + postcss "^6.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" -postcss-merge-rules@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" +postcss-merge-rules@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.1.tgz#430fd59b3f2ed2e8afcd0b31278eda39854abb10" dependencies: - browserslist "^1.5.2" - caniuse-api "^1.5.2" - postcss "^5.0.4" - postcss-selector-parser "^2.2.2" + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^6.0.0" + postcss-selector-parser "^3.0.0" vendors "^1.0.0" -postcss-message-helpers@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" - -postcss-minify-font-values@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" +postcss-minify-font-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.0.tgz#4cc33d283d6a81759036e757ef981d92cbd85bed" dependencies: - object-assign "^4.0.1" - postcss "^5.0.4" - postcss-value-parser "^3.0.2" + postcss "^6.0.0" + postcss-value-parser "^3.0.0" -postcss-minify-gradients@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" +postcss-minify-gradients@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.0.tgz#3fc3916439d27a9bb8066db7cdad801650eb090e" dependencies: - postcss "^5.0.12" - postcss-value-parser "^3.3.0" + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^6.0.0" + postcss-value-parser "^3.0.0" -postcss-minify-params@^1.0.4: - version "1.2.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" +postcss-minify-params@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.0.tgz#05e9166ee48c05af651989ce84d39c1b4d790674" dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.2" - postcss-value-parser "^3.0.2" + alphanum-sort "^1.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^6.0.0" + postcss-value-parser "^3.0.0" uniqs "^2.0.0" -postcss-minify-selectors@^2.0.4: - version "2.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" +postcss-minify-selectors@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.0.tgz#b1e9f6c463416d3fcdcb26e7b785d95f61578aad" dependencies: - alphanum-sort "^1.0.2" - has "^1.0.1" - postcss "^5.0.14" - postcss-selector-parser "^2.0.0" + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^6.0.0" + postcss-selector-parser "^3.0.0" postcss-modules-extract-imports@^1.2.0: version "1.2.0" @@ -9213,50 +7811,104 @@ postcss-modules-values@^1.3.0: icss-replace-symbols "^1.1.0" postcss "^6.0.1" -postcss-normalize-charset@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" +postcss-normalize-charset@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.0.tgz#24527292702d5e8129eafa3d1de49ed51a6ab730" + dependencies: + postcss "^6.0.0" + +postcss-normalize-display-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz#950e0c7be3445770a160fffd6b6644c3c0cd8f89" + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^6.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.0.tgz#ee9343ab981b822c63ab72615ecccd08564445a3" + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^6.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.0.tgz#b711c592cf16faf9ff575e42fa100b6799083eff" + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^6.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.0.tgz#718cb6d30a6fac6ac6a830e32c06c07dbc66fe5d" + dependencies: + has "^1.0.0" + postcss "^6.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.0.tgz#0351f29886aa981d43d91b2c2bd1aea6d0af6d23" + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^6.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.0.tgz#5acd5d47baea5d17674b2ccc4ae5166fa88cdf97" dependencies: - postcss "^5.0.5" + postcss "^6.0.0" + postcss-value-parser "^3.0.0" -postcss-normalize-url@^3.0.7: - version "3.0.8" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" +postcss-normalize-url@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.0.tgz#b7a9c8ad26cf26694c146eb2d68bd0cf49956f0d" dependencies: is-absolute-url "^2.0.0" - normalize-url "^1.4.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" + normalize-url "^3.0.0" + postcss "^6.0.0" + postcss-value-parser "^3.0.0" -postcss-ordered-values@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" +postcss-normalize-whitespace@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.0.tgz#1da7e76b10ae63c11827fa04fc3bb4a1efe99cc0" dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.1" + postcss "^6.0.0" + postcss-value-parser "^3.0.0" -postcss-reduce-idents@^2.2.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" +postcss-ordered-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.0.0.tgz#58b40c74f72e022eb34152c12e4b0f9354482fc2" dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.2" + cssnano-util-get-arguments "^4.0.0" + postcss "^6.0.0" + postcss-value-parser "^3.0.0" -postcss-reduce-initial@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" +postcss-reduce-initial@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.1.tgz#f2d58f50cea2b0c5dc1278d6ea5ed0ff5829c293" dependencies: - postcss "^5.0.4" + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^6.0.0" -postcss-reduce-transforms@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" +postcss-reduce-transforms@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.0.tgz#f645fc7440c35274f40de8104e14ad7163edf188" dependencies: - has "^1.0.1" - postcss "^5.0.8" - postcss-value-parser "^3.0.1" + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^6.0.0" + postcss-value-parser "^3.0.0" -postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: +postcss-selector-parser@^2.2.2: version "2.2.3" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" dependencies: @@ -9264,7 +7916,7 @@ postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-selector-parser@^3.1.1: +postcss-selector-parser@^3.0.0, postcss-selector-parser@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" dependencies: @@ -9272,106 +7924,54 @@ postcss-selector-parser@^3.1.1: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-svgo@^2.1.1: - version "2.1.6" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" +postcss-svgo@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.0.tgz#c0bbad02520fc636c9d78b0e8403e2e515c32285" dependencies: - is-svg "^2.0.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - svgo "^0.7.0" + is-svg "^3.0.0" + postcss "^6.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" -postcss-unique-selectors@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" +postcss-unique-selectors@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.0.tgz#04c1e9764c75874261303402c41f0e9769fc5501" dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.4" + alphanum-sort "^1.0.0" + postcss "^6.0.0" uniqs "^2.0.0" -postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: +postcss-value-parser@^3.0.0, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" -postcss-zindex@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" - dependencies: - has "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: - version "5.2.18" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" - dependencies: - chalk "^1.1.3" - js-base64 "^2.1.9" - source-map "^0.5.6" - supports-color "^3.2.3" - -postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.20, postcss@^6.0.22: - version "6.0.22" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.22.tgz#e23b78314905c3b90cbd61702121e7a78848f2a3" +postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.20, postcss@^6.0.23: + version "6.0.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" dependencies: chalk "^2.4.1" source-map "^0.6.1" supports-color "^5.4.0" -posthtml-parser@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/posthtml-parser/-/posthtml-parser-0.3.3.tgz#3fe986fca9f00c0f109d731ba590b192f26e776d" - dependencies: - htmlparser2 "^3.9.2" - isobject "^2.1.0" - object-assign "^4.1.1" - -posthtml-render@^1.1.0, posthtml-render@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/posthtml-render/-/posthtml-render-1.1.4.tgz#95dac09892f4f183fad5ac823f08f42c0256551e" - -posthtml@^0.11.2, posthtml@^0.11.3: - version "0.11.3" - resolved "https://registry.yarnpkg.com/posthtml/-/posthtml-0.11.3.tgz#17ea2921b0555b7455f33c977bd16d8b8cb74f27" +postcss@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.2.tgz#7b5a109de356804e27f95a960bef0e4d5bc9bb18" dependencies: - object-assign "^4.1.1" - posthtml-parser "^0.3.3" - posthtml-render "^1.1.0" + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" -prepend-http@^1.0.0, prepend-http@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" -prettier@^1.11.1: - version "1.12.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.12.1.tgz#c1ad20e803e7749faf905a409d2367e06bbe7325" - -prettier@^1.12.1: - version "1.13.4" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.13.4.tgz#31bbae6990f13b1093187c731766a14036fa72e6" - -pretty-bytes@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-1.0.4.tgz#0a22e8210609ad35542f8c8d5d2159aff0751c84" - dependencies: - get-stdin "^4.0.1" - meow "^3.1.0" - -pretty-bytes@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" +prettier@^1.13.7: + version "1.14.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.14.0.tgz#847c235522035fd988100f1f43cf20a7d24f9372" pretty-error@^2.0.2: version "2.1.1" @@ -9380,33 +7980,18 @@ pretty-error@^2.0.2: renderkid "^2.0.1" utila "~0.4" -pretty-format@^21.2.1: - version "21.2.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-21.2.1.tgz#ae5407f3cf21066cd011aa1ba5fce7b6a2eddb36" - dependencies: - ansi-regex "^3.0.0" - ansi-styles "^3.2.0" - -pretty-format@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.4.3.tgz#f873d780839a9c02e9664c8a082e9ee79eaac16f" +pretty-format@^23.5.0: + version "23.5.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.5.0.tgz#0f9601ad9da70fe690a269cd3efca732c210687c" dependencies: ansi-regex "^3.0.0" ansi-styles "^3.2.0" -pretty@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pretty/-/pretty-2.0.0.tgz#adbc7960b7bbfe289a557dc5f737619a220d06a5" - dependencies: - condense-newlines "^0.2.1" - extend-shallow "^2.0.1" - js-beautify "^1.6.12" - -private@^0.1.6, private@^0.1.8, private@~0.1.5: +private@^0.1.6, private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" -process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: +process-nextick-args@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" @@ -9414,12 +7999,9 @@ process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" -progress-stream@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/progress-stream/-/progress-stream-1.2.0.tgz#2cd3cfea33ba3a89c9c121ec3347abe9ab125f77" - dependencies: - speedometer "~0.1.2" - through2 "~0.2.3" +progress@1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" progress@^2.0.0: version "2.0.0" @@ -9429,47 +8011,25 @@ promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - -protobufjs@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-5.0.3.tgz#e4dfe9fb67c90b2630d15868249bcc4961467a17" - dependencies: - ascli "~1" - bytebuffer "~5" - glob "^7.0.5" - yargs "^3.10.0" - proxy-addr@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" + version "2.0.4" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" dependencies: forwarded "~0.1.2" - ipaddr.js "1.6.0" - -proxy-agent@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-2.0.0.tgz#57eb5347aa805d74ec681cb25649dba39c933499" - dependencies: - agent-base "2" - debug "2" - extend "3" - http-proxy-agent "1" - https-proxy-agent "1" - lru-cache "~2.6.5" - pac-proxy-agent "1" - socks-proxy-agent "2" + ipaddr.js "1.8.0" prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" -pseudomap@^1.0.1, pseudomap@^1.0.2: +pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" +psl@^1.1.24: + version "1.1.29" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67" + public-encrypt@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.2.tgz#46eb9107206bf73489f8b85b69d91334c6610994" @@ -9500,48 +8060,29 @@ punycode@1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" punycode@2.x.x, punycode@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 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.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" - q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" +qrcode.vue@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/qrcode.vue/-/qrcode.vue-1.6.0.tgz#5a19b58dbe1f2f7ffe13086a81392f3ca2e3acff" + qs@6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" -qs@~6.3.0: - version "6.3.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" - qs@~6.5.1: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" -query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -query-string@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" - 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" @@ -9554,6 +8095,18 @@ querystringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.0.0.tgz#fa3ed6e68eb15159457c89b37bc6472833195755" +quote-stream@^1.0.1, quote-stream@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/quote-stream/-/quote-stream-1.0.2.tgz#84963f8c9c26b942e153feeb53aae74652b7e0b2" + dependencies: + buffer-equal "0.0.1" + minimist "^1.1.3" + through2 "^2.0.0" + +ramda@0.24.1: + version "0.24.1" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.24.1.tgz#c3b7755197f35b8dc3502228262c4c91ddb6b857" + randomatic@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.0.0.tgz#d35490030eb4f7578de292ce6dfb04a91a128923" @@ -9579,15 +8132,6 @@ range-parser@^1.0.3, range-parser@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" -raw-body@2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" - dependencies: - bytes "3.0.0" - http-errors "1.6.3" - iconv-lite "0.4.23" - unpipe "1.0.0" - raw-body@2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" @@ -9597,7 +8141,7 @@ raw-body@2.3.2: iconv-lite "0.4.19" unpipe "1.0.0" -rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.2.1: +rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" dependencies: @@ -9606,36 +8150,6 @@ rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.2.1: minimist "^1.2.0" strip-json-comments "~2.0.1" -rc@^1.1.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.7.tgz#8a10ca30d588d00464360372b890d06dacd02297" - dependencies: - deep-extend "^0.5.1" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -read-chunk@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-2.1.0.tgz#6a04c0928005ed9d42e1a6ac5600e19cbc7ff655" - dependencies: - pify "^3.0.0" - safe-buffer "^5.1.1" - -read-config-file@3.0.1, read-config-file@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-3.0.1.tgz#307ed2e162fa54306d0ae6d41e9cdc829720d2a9" - dependencies: - ajv "^6.4.0" - ajv-keywords "^3.2.0" - bluebird-lst "^1.0.5" - dotenv "^5.0.1" - dotenv-expand "^4.2.0" - fs-extra-p "^4.6.0" - js-yaml "^3.11.0" - json5 "^1.0.1" - lazy-val "^1.0.3" - read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -9650,11 +8164,11 @@ read-pkg-up@^2.0.0: find-up "^2.0.0" read-pkg "^2.0.0" -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" +read-pkg-up@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" dependencies: - find-up "^2.0.0" + find-up "^3.0.0" read-pkg "^3.0.0" read-pkg@^1.0.0: @@ -9681,7 +8195,15 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -"readable-stream@1 || 2", readable-stream@2, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6: +read-pkg@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" + dependencies: + normalize-package-data "^2.3.2" + parse-json "^4.0.0" + pify "^3.0.0" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.3: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" dependencies: @@ -9702,15 +8224,6 @@ readable-stream@1.0: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@1.1.x, readable-stream@~1.1.9: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - readdirp@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" @@ -9720,37 +8233,6 @@ readdirp@^2.0.0: readable-stream "^2.0.2" set-immediate-shim "^1.0.1" -realpath-native@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.0.tgz#7885721a83b43bd5327609f0ddecb2482305fdf0" - dependencies: - util.promisify "^1.0.0" - -recast@^0.12.5: - version "0.12.9" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.12.9.tgz#e8e52bdb9691af462ccbd7c15d5a5113647a15f1" - dependencies: - ast-types "0.10.1" - core-js "^2.4.1" - esprima "~4.0.0" - private "~0.1.5" - source-map "~0.6.1" - -recast@^0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.15.0.tgz#b8c8bfdda245e1580c0a4d9fc25d4e820bf57208" - dependencies: - ast-types "0.11.5" - esprima "~4.0.0" - private "~0.1.5" - source-map "~0.6.1" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - dependencies: - resolve "^1.1.6" - redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -9758,27 +8240,20 @@ redent@^1.0.0: indent-string "^2.1.0" strip-indent "^1.0.1" -reduce-css-calc@^1.2.6: - version "1.3.0" - resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" - dependencies: - balanced-match "^0.4.2" - math-expression-evaluator "^1.2.14" - reduce-function-call "^1.0.1" - -reduce-function-call@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" +reduce-css-calc@^2.0.0: + version "2.1.4" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-2.1.4.tgz#c20e9cda8445ad73d4ff4bea960c6f8353791708" dependencies: - balanced-match "^0.4.2" + css-unit-converter "^1.1.1" + postcss-value-parser "^3.3.0" -regenerate-unicode-properties@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-6.0.0.tgz#0fc26f9d5142289df4e177dec58f303d2d097c16" +regenerate-unicode-properties@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" dependencies: - regenerate "^1.3.3" + regenerate "^1.4.0" -regenerate@^1.2.1, regenerate@^1.3.3, regenerate@^1.4.0: +regenerate@^1.2.1, regenerate@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" @@ -9786,17 +8261,15 @@ regenerator-runtime@^0.11.0, regenerator-runtime@^0.11.1: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" -regenerator-transform@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" +regenerator-transform@^0.12.3: + version "0.12.4" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.12.4.tgz#aa9b6c59f4b97be080e972506c560b3bccbfcff0" dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" private "^0.1.6" -regenerator-transform@^0.12.3: - version "0.12.3" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.12.3.tgz#459adfb64f6a27164ab991b7873f45ab969eca8b" +regenerator-transform@^0.13.3: + version "0.13.3" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.3.tgz#264bd9ff38a8ce24b06e0636496b2c856b57bcbb" dependencies: private "^0.1.6" @@ -9825,37 +8298,16 @@ regexpu-core@^1.0.0: regjsgen "^0.2.0" regjsparser "^0.1.4" -regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regexpu-core@^4.1.3, regexpu-core@^4.1.4: - version "4.1.5" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.1.5.tgz#57fdfe1148f8a7a069086228515130cf1820ddd0" +regexpu-core@^4.1.3, regexpu-core@^4.1.4, regexpu-core@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.2.0.tgz#a3744fa03806cffe146dea4421a3e73bdcc47b1d" dependencies: regenerate "^1.4.0" - regenerate-unicode-properties "^6.0.0" + regenerate-unicode-properties "^7.0.0" regjsgen "^0.4.0" regjsparser "^0.3.0" - unicode-match-property-ecmascript "^1.0.3" - unicode-match-property-value-ecmascript "^1.0.1" - -registry-auth-token@^3.0.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" - dependencies: - rc "^1.1.6" - safe-buffer "^5.0.1" - -registry-url@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" - dependencies: - rc "^1.0.1" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.0.2" regjsgen@^0.2.0: version "0.2.0" @@ -9881,6 +8333,12 @@ relateurl@0.2.x: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" +release-zalgo@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" + dependencies: + es6-error "^4.0.1" + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -9909,13 +8367,11 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -replace-ext@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" - -replace-ext@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" +request-progress@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-0.3.1.tgz#0721c105d8a96ac6b2ce8b2c89ae2d5ecfcf6b3a" + dependencies: + throttleit "~0.0.2" request-promise-core@1.1.1: version "1.1.1" @@ -9931,33 +8387,7 @@ request-promise-native@^1.0.5: stealthy-require "^1.1.0" tough-cookie ">=2.3.3" -request@2, request@^2.83.0, request@^2.85.0: - version "2.86.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.86.0.tgz#2b9497f449b0a32654c081a5cf426bbfb5bf5b69" - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.6.0" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" - forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" - hawk "~6.0.2" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" - performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - tough-cookie "~2.3.3" - tunnel-agent "^0.6.0" - uuid "^3.1.0" - -request@^2.45.0: +request@2.87.0, request@^2.87.0: version "2.87.0" resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e" dependencies: @@ -9982,39 +8412,10 @@ request@^2.45.0: tunnel-agent "^0.6.0" uuid "^3.1.0" -request@~2.79.0: - version "2.79.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - qs "~6.3.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - uuid "^3.0.0" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" -require-from-string@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" - require-from-string@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" @@ -10034,6 +8435,10 @@ requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" +resize-detector@^0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/resize-detector/-/resize-detector-0.1.7.tgz#48375f9d462afbcd9077d59580985020a84443f8" + resize-observer-polyfill@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.0.tgz#660ff1d9712a2382baa2cad450a4716209f9ca69" @@ -10044,13 +8449,6 @@ resolve-cwd@^2.0.0: dependencies: resolve-from "^3.0.0" -resolve-dir@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" @@ -10059,6 +8457,10 @@ resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" @@ -10067,18 +8469,12 @@ resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.1.6, resolve@^1.3.2, resolve@^1.3.3, resolve@^1.5.0, resolve@^1.6.0: - version "1.7.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3" +resolve@^1.1.5, resolve@^1.3.2, resolve@^1.3.3, resolve@^1.5.0, resolve@^1.6.0: + version "1.8.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" dependencies: path-parse "^1.0.5" -responselike@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - dependencies: - lowercase-keys "^1.0.0" - restore-cursor@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" @@ -10093,26 +8489,36 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +restructure@^0.5.3: + version "0.5.4" + resolved "https://registry.yarnpkg.com/restructure/-/restructure-0.5.4.tgz#f54e7dd563590fb34fd6bf55876109aeccb28de8" + dependencies: + browserify-optional "^1.0.0" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: glob "^7.0.5" -rimraf@~2.2.6: - version "2.2.8" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" - ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -10120,11 +8526,7 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rsvp@^3.3.3: - version "3.6.2" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" - -run-async@^2.0.0, run-async@^2.2.0: +run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" dependencies: @@ -10146,21 +8548,15 @@ rx-lite@*, rx-lite@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" -rxjs@^5.4.2: - version "5.5.10" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.10.tgz#fde02d7a614f6c8683d0d1957827f492e09db045" - dependencies: - symbol-observable "1.0.1" - -rxjs@^5.5.2: +rxjs@^5.0.0-beta.11: version "5.5.11" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.11.tgz#f733027ca43e3bec6b994473be4ab98ad43ced87" dependencies: symbol-observable "1.0.1" rxjs@^6.1.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.2.0.tgz#e024d0e180b72756a83c2aaea8f25423751ba978" + version "6.2.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.2.2.tgz#eb75fa3c186ff5289907d06483a77884586e1cf9" dependencies: tslib "^1.9.0" @@ -10168,7 +8564,7 @@ safe-buffer@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -10178,30 +8574,13 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3": +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" -sane@^2.0.0: - version "2.5.2" - resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa" - dependencies: - anymatch "^2.0.0" - capture-exit "^1.2.0" - exec-sh "^0.2.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - watch "~0.18.0" - optionalDependencies: - fsevents "^1.2.3" - -sanitize-filename@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.1.tgz#612da1c96473fa02dccda92dcd5b4ab164a6772a" - dependencies: - truncate-utf8-bytes "^1.0.0" +samsam@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.3.0.tgz#8d1d9350e25622da30de3e44ba692b5221ab7c50" sass-graph@^2.2.4: version "2.2.4" @@ -10212,30 +8591,41 @@ sass-graph@^2.2.4: scss-tokenizer "^0.2.3" yargs "^7.0.0" -sass-loader@^6.0.6: - version "6.0.7" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-6.0.7.tgz#dd2fdb3e7eeff4a53f35ba6ac408715488353d00" +sass-loader@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-7.1.0.tgz#16fd5138cb8b424bf8a759528a1972d72aad069d" dependencies: clone-deep "^2.0.1" loader-utils "^1.0.1" lodash.tail "^4.1.1" neo-async "^2.5.0" pify "^3.0.0" + semver "^5.5.0" -sax@^1.2.4, sax@~1.2.1, sax@~1.2.4: +sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" -schema-utils@^0.4.0, schema-utils@^0.4.2, schema-utils@^0.4.3, schema-utils@^0.4.4, schema-utils@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e" +schema-utils@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" + dependencies: + ajv "^5.0.0" + +schema-utils@^0.4.0, schema-utils@^0.4.2, schema-utils@^0.4.4, schema-utils@^0.4.5: + version "0.4.6" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.6.tgz#dab4516a656310a964ca772bd3771819ba2b5cec" dependencies: ajv "^6.1.0" ajv-keywords "^3.1.0" -scoped-regex@^1.0.0: +schema-utils@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/scoped-regex/-/scoped-regex-1.0.0.tgz#a346bb1acd4207ae70bd7c0c7ca9e566b6baddb8" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" scss-tokenizer@^0.2.3: version "0.2.3" @@ -10248,9 +8638,10 @@ select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" -selenium-server@^3.12.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/selenium-server/-/selenium-server-3.12.0.tgz#3ab2ef979afa058590850a1da34ffee140620f42" +select@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" + integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= selfsigned@^1.9.1: version "1.10.3" @@ -10258,20 +8649,14 @@ selfsigned@^1.9.1: dependencies: node-forge "0.7.5" -semver-diff@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" - dependencies: - semver "^5.0.3" +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" -semver@~5.0.1: - version "5.0.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a" - semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -10372,6 +8757,10 @@ shallow-clone@^1.0.0: kind-of "^5.0.0" mixin-object "^2.0.1" +shallow-copy@~0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/shallow-copy/-/shallow-copy-0.0.1.tgz#415f42702d73d810330292cc5ee86eae1a11a170" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -10391,31 +8780,29 @@ shell-quote@^1.6.1: array-reduce "~0.0.0" jsonify "~0.0.0" -shelljs@^0.8.0: - version "0.8.2" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.2.tgz#345b7df7763f4c2340d584abb532c5f752ca9e35" - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - -sigmund@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" - signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" -single-line-log@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/single-line-log/-/single-line-log-1.1.2.tgz#c2f83f273a3e1a16edb0995661da0ed5ef033364" +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" dependencies: - string-width "^1.0.1" + is-arrayish "^0.3.1" + +sinon@^6.1.5: + version "6.1.5" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-6.1.5.tgz#41451502d43cd5ffb9d051fbf507952400e81d09" + dependencies: + "@sinonjs/commons" "^1.0.1" + "@sinonjs/formatio" "^2.0.0" + "@sinonjs/samsam" "^2.0.0" + diff "^3.5.0" + lodash.get "^4.4.2" + lolex "^2.7.1" + nise "^1.4.2" + supports-color "^5.4.0" + type-detect "^4.0.8" slash@^1.0.0: version "1.0.0" @@ -10435,14 +8822,6 @@ slice-ansi@1.0.0: dependencies: is-fullwidth-code-point "^2.0.0" -slide@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" - -smart-buffer@^1.0.13: - version "1.1.15" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16" - snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -10470,21 +8849,9 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - dependencies: - hoek "2.x.x" - -sntp@2.x.x: - version "2.1.0" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" - dependencies: - hoek "4.x.x" - -sockjs-client@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" +sockjs-client@1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.5.tgz#1bb7c0f7222c40f42adf14f4442cbd1269771a83" dependencies: debug "^2.6.6" eventsource "0.1.6" @@ -10500,38 +8867,11 @@ sockjs@0.3.19: faye-websocket "^0.10.0" uuid "^3.0.1" -socks-proxy-agent@2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-2.1.1.tgz#86ebb07193258637870e13b7bd99f26c663df3d3" - dependencies: - agent-base "2" - extend "3" - socks "~1.1.5" - -socks@~1.1.5: - version "1.1.10" - resolved "https://registry.yarnpkg.com/socks/-/socks-1.1.10.tgz#5b8b7fc7c8f341c53ed056e929b7bf4de8ba7b5a" - dependencies: - ip "^1.1.4" - smart-buffer "^1.0.13" - -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - dependencies: - is-plain-obj "^1.0.0" - -sort-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" - dependencies: - is-plain-obj "^1.0.0" - source-list-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" -source-map-resolve@^0.5.0, source-map-resolve@^0.5.1: +source-map-resolve@^0.5.0: version "0.5.2" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" dependencies: @@ -10547,13 +8887,20 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" -source-map-support@^0.5.0, source-map-support@^0.5.4, source-map-support@^0.5.6: +source-map-support@^0.5.0: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.6.tgz#4435cee46b1aab62b8e8610ce60f788091c51c13" dependencies: buffer-from "^1.0.0" source-map "^0.6.0" +source-map-support@^0.5.9: + version "0.5.9" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" @@ -10562,12 +8909,6 @@ source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, sourc version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" -source-map@^0.1.38: - version "0.1.43" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" - dependencies: - amdefine ">=0.0.4" - source-map@^0.4.2, source-map@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" @@ -10578,6 +8919,23 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" +source-map@~0.1.30: + version "0.1.43" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + dependencies: + amdefine ">=0.0.4" + +spawn-wrap@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.4.2.tgz#cff58e73a8224617b6561abdc32586ea0c82248c" + dependencies: + foreground-child "^1.5.6" + mkdirp "^0.5.0" + os-homedir "^1.0.1" + rimraf "^2.6.2" + signal-exit "^3.0.2" + which "^1.3.0" + spdx-correct@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" @@ -10623,10 +8981,6 @@ spdy@^3.4.1: select-hose "^2.0.0" spdy-transport "^2.0.18" -speedometer@~0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-0.1.4.tgz#9876dbd2a169d3115402d48e6ea6329c8816a50d" - split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -10638,13 +8992,14 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" sshpk@^1.7.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb" + version "1.14.2" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98" dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" dashdash "^1.12.0" getpass "^0.1.1" + safer-buffer "^2.0.2" optionalDependencies: bcrypt-pbkdf "^1.0.0" ecc-jsbn "~0.1.1" @@ -10657,25 +9012,29 @@ ssri@^5.2.4: dependencies: safe-buffer "^5.1.1" +ssri@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + dependencies: + figgy-pudding "^3.5.1" + stable@~0.1.6: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" -stack-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" - -stackframe@^1.0.3: +stackframe@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.0.4.tgz#357b24a992f9427cba6b545d96a14ed2cbca187b" -staged-git-files@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.0.0.tgz#cdb847837c1fcc52c08a872d4883cc0877668a80" +staged-git-files@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.1.tgz#37c2218ef0d6d26178b1310719309a16a59f8f7b" -stat-mode@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-0.2.2.tgz#e6c80b623123d7d80cf132ce538f346289072502" +static-eval@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/static-eval/-/static-eval-2.0.0.tgz#0e821f8926847def7b4b50cda5d55c04a9b13864" + dependencies: + escodegen "^1.8.1" static-extend@^0.1.1: version "0.1.2" @@ -10684,6 +9043,25 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" +static-module@^2.2.0: + version "2.2.5" + resolved "https://registry.yarnpkg.com/static-module/-/static-module-2.2.5.tgz#bd40abceae33da6b7afb84a0e4329ff8852bfbbf" + dependencies: + concat-stream "~1.6.0" + convert-source-map "^1.5.1" + duplexer2 "~0.1.4" + escodegen "~1.9.0" + falafel "^2.1.0" + has "^1.0.1" + magic-string "^0.22.4" + merge-source-map "1.0.4" + object-inspect "~1.4.0" + quote-stream "~1.0.2" + readable-stream "~2.3.3" + shallow-copy "~0.0.1" + static-eval "^2.0.0" + through2 "~2.0.3" + "statuses@>= 1.3.1 < 2", "statuses@>= 1.4.0 < 2": version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" @@ -10710,15 +9088,15 @@ stream-browserify@^2.0.1: readable-stream "^2.0.2" stream-each@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.2.tgz#8e8c463f91da8991778765873fe4d960d8f616bd" + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" dependencies: end-of-stream "^1.1.0" stream-shift "^1.0.0" stream-http@^2.7.2: - version "2.8.2" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.2.tgz#4126e8c6b107004465918aa2fc35549e77402c87" + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" @@ -10726,36 +9104,17 @@ stream-http@^2.7.2: to-arraybuffer "^1.0.0" xtend "^4.0.0" -stream-json@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/stream-json/-/stream-json-0.6.1.tgz#c9413e7f42ba8eac4883be712220455f64dcea67" - dependencies: - parser-toolkit ">=0.0.3" - stream-shift@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" -stream-to-observable@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.2.0.tgz#59d6ea393d87c2c0ddac10aa0d561bc6ba6f0e10" - dependencies: - any-observable "^0.2.0" - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - -string-length@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" - dependencies: - astral-regex "^1.0.0" - strip-ansi "^4.0.0" +stream-to-observable@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe" -string-template@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" +string-argv@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" @@ -10765,7 +9124,7 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: @@ -10798,7 +9157,7 @@ string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" -stringify-object@^3.2.0: +stringify-object@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.2.2.tgz#9853052e5a88fb605a44cd27445aa257ad7ffbcd" dependencies: @@ -10806,10 +9165,6 @@ stringify-object@^3.2.0: is-obj "^1.0.1" is-regexp "^1.0.0" -stringstream@~0.0.4: - version "0.0.6" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" - strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -10822,27 +9177,16 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" - -strip-bom-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz#f87db5ef2613f6968aa545abfe1ec728b6a829ca" - dependencies: - first-chunk-stream "^2.0.0" - strip-bom "^2.0.0" - -strip-bom@3.0.0, strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" dependencies: is-utf8 "^0.2.0" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -10857,65 +9201,35 @@ strip-indent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" -strip-json-comments@^2.0.0, strip-json-comments@~2.0.1: +strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" -style-loader@^0.21.0: - version "0.21.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.21.0.tgz#68c52e5eb2afc9ca92b6274be277ee59aea3a852" - dependencies: - loader-utils "^1.1.0" - schema-utils "^0.4.5" - -sumchecker@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-1.3.1.tgz#79bb3b4456dd04f18ebdbc0d703a1d1daec5105d" - dependencies: - debug "^2.2.0" - es6-promise "^4.0.5" - -sumchecker@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-2.0.2.tgz#0f42c10e5d05da5d42eea3e56c3399a37d6c5b3e" - dependencies: - debug "^2.2.0" - -supports-color@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" +stylehacks@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.0.tgz#64b323951c4a24e5fc7b2ec06c137bf32d155e8a" dependencies: - has-flag "^1.0.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + browserslist "^4.0.0" + postcss "^6.0.0" + postcss-selector-parser "^3.0.0" -supports-color@^3.1.2, supports-color@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" +supports-color@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.1.0.tgz#058a021d1b619f7ddf3980d712ea3590ce7de3d5" dependencies: - has-flag "^1.0.0" + has-flag "^2.0.0" -supports-color@^5.1.0, supports-color@^5.3.0, supports-color@^5.4.0: +supports-color@5.4.0, supports-color@^5.1.0, supports-color@^5.3.0, supports-color@^5.4.0: version "5.4.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" dependencies: has-flag "^3.0.0" -svgo@^0.7.0: - version "0.7.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" - dependencies: - coa "~1.0.1" - colors "~1.1.2" - csso "~2.3.1" - js-yaml "~3.7.0" - mkdirp "~0.5.1" - sax "~1.2.1" - whet.extend "~0.9.9" +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" -svgo@^1.0.5: +svgo@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.0.5.tgz#7040364c062a0538abacff4401cea6a26a7a389a" dependencies: @@ -10938,10 +9252,6 @@ symbol-observable@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" -symbol-observable@^0.2.2: - version "0.2.4" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" - symbol-observable@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" @@ -10965,6 +9275,10 @@ tapable@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.0.0.tgz#cbb639d9002eed9c6b5975eb20598d7936f1f9f2" +tapable@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.0.tgz#0d076a172e3d9ba088fd2272b2668fb8d194b78c" + tar@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" @@ -10974,123 +9288,100 @@ tar@^2.0.0: inherits "2" tar@^4: - version "4.4.2" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.2.tgz#60685211ba46b38847b1ae7ee1a24d744a2cd462" + version "4.4.6" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b" dependencies: chownr "^1.0.1" fs-minipass "^1.2.5" - minipass "^2.2.4" + minipass "^2.3.3" minizlib "^1.1.0" mkdirp "^0.5.0" safe-buffer "^5.1.2" yallist "^3.0.2" -temp-file@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.1.2.tgz#54ba4084097558e8ff2ad1e4bd84841ef2804043" - dependencies: - async-exit-hook "^2.0.1" - bluebird-lst "^1.0.5" - fs-extra-p "^4.6.0" - lazy-val "^1.0.3" - -temp@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" - dependencies: - os-tmpdir "^1.0.0" - rimraf "~2.2.6" - -term-size@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" - dependencies: - execa "^0.7.0" - -test-exclude@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.1.tgz#dfa222f03480bca69207ca728b37d74b45f724fa" +test-exclude@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.0.0.tgz#cdce7cece785e0e829cd5c2b27baf18bc583cfb7" dependencies: arrify "^1.0.1" - micromatch "^3.1.8" - object-assign "^4.1.0" - read-pkg-up "^1.0.1" + minimatch "^3.0.4" + read-pkg-up "^4.0.0" require-main-filename "^1.0.1" +text-encoding@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/text-encoding/-/text-encoding-0.6.4.tgz#e399a982257a276dae428bb92845cb71bdc26d19" + text-table@^0.2.0, text-table@~0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - -textextensions@2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-2.2.0.tgz#38ac676151285b658654581987a0ce1a4490d286" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" thread-loader@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/thread-loader/-/thread-loader-1.1.5.tgz#7f9d6701f773734fff1832586779021ab8571917" + version "1.2.0" + resolved "https://registry.yarnpkg.com/thread-loader/-/thread-loader-1.2.0.tgz#35dedb23cf294afbbce6c45c1339b950ed17e7a4" dependencies: async "^2.3.0" loader-runner "^2.3.0" loader-utils "^1.1.0" -throat@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" - throttle-debounce@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-1.0.1.tgz#dad0fe130f9daf3719fdea33dc36a8e6ba7f30b5" + version "1.1.0" + resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-1.1.0.tgz#51853da37be68a155cb6e827b3514a3c422e89cd" -throttleit@0.0.2: +throttleit@~0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-0.0.2.tgz#cfedf88e60c00dd9697b61fdd2a8343a9b680eaf" -through2@^2.0.0: +through2@^2.0.0, through2@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" dependencies: readable-stream "^2.1.5" xtend "~4.0.1" -through2@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-0.2.3.tgz#eb3284da4ea311b6cc8ace3653748a52abf25a3f" - dependencies: - readable-stream "~1.1.9" - xtend "~2.1.1" - -through@^2.3.6: +through@^2.3.6, through@~2.3.4: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" -thunkify@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d" - thunky@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.2.tgz#a862e018e3fb1ea2ec3fce5d55605cf57f247371" -timed-out@^4.0.0, timed-out@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - timers-browserify@^2.0.4: version "2.0.10" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" dependencies: setimmediate "^1.0.4" +timezones.json@^1.4.5: + version "1.4.5" + resolved "https://registry.yarnpkg.com/timezones.json/-/timezones.json-1.4.5.tgz#ffa56b72cc5e1050e0cd42729fc056fe332ac7ef" + +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + +tiny-emitter@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.0.2.tgz#82d27468aca5ade8e5fd1e6d22b57dd43ebdfb7c" + integrity sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow== + +tiny-inflate@^1.0.0, tiny-inflate@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.2.tgz#93d9decffc8805bd57eae4310f0b745e9b6fb3a7" + +tmp@0.0.31: + version "0.0.31" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" + dependencies: + os-tmpdir "~1.0.1" + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" dependencies: os-tmpdir "~1.0.2" -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" @@ -11125,17 +9416,24 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -topo@2.x.x: - version "2.0.2" - resolved "https://registry.yarnpkg.com/topo/-/topo-2.0.2.tgz#cd5615752539057c0dc0491a621c3bc6fbe1d182" +topo@3.x.x: + version "3.0.0" + resolved "https://registry.yarnpkg.com/topo/-/topo-3.0.0.tgz#37e48c330efeac784538e0acd3e62ca5e231fe7a" dependencies: - hoek "4.x.x" + hoek "5.x.x" toposort@^1.0.0: version "1.0.7" resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" -tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3: +tough-cookie@>=2.3.3, tough-cookie@^2.3.4: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + +tough-cookie@~2.3.3: version "2.3.4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" dependencies: @@ -11161,24 +9459,13 @@ trim-right@^1.0.1: dependencies: glob "^6.0.4" -truncate-utf8-bytes@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" - dependencies: - utf8-byte-length "^1.0.1" - -tsconfig@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" - dependencies: - "@types/strip-bom" "^3.0.0" - "@types/strip-json-comments" "0.0.30" - strip-bom "^3.0.0" - strip-json-comments "^2.0.0" +tryer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" tslib@^1.9.0: - version "1.9.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.2.tgz#8be0cc9a1f6dc7727c38deb16c2ebd1a2892988e" + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" tty-browserify@0.0.0: version "0.0.0" @@ -11190,10 +9477,6 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" -tunnel-agent@~0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" - tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" @@ -11204,9 +9487,9 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-detect@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" +type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" type-is@~1.6.15, type-is@~1.6.16: version "1.6.16" @@ -11219,18 +9502,18 @@ typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" -uglify-es@^3.3.4, uglify-es@^3.3.9: +uglify-es@^3.3.4: version "3.3.9" resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" dependencies: commander "~2.13.0" source-map "~0.6.1" -uglify-js@3.3.x: - version "3.3.25" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.25.tgz#3266ccb87c5bea229f69041a0296010d6477d539" +uglify-js@3.4.x: + version "3.4.6" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.6.tgz#bc546d53f3e02b05d97d0ca5a7abfe0fb0384ddb" dependencies: - commander "~2.15.0" + commander "~2.16.0" source-map "~0.6.1" uglify-js@^2.6: @@ -11246,9 +9529,9 @@ uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" -uglifyjs-webpack-plugin@^1.2.4, uglifyjs-webpack-plugin@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.5.tgz#2ef8387c8f1a903ec5e44fa36f9f3cbdcea67641" +uglifyjs-webpack-plugin@^1.2.4, uglifyjs-webpack-plugin@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.7.tgz#57638dd99c853a1ebfe9d97b42160a8a507f9d00" dependencies: cacache "^10.0.4" find-cache-dir "^1.0.0" @@ -11259,28 +9542,38 @@ uglifyjs-webpack-plugin@^1.2.4, uglifyjs-webpack-plugin@^1.2.5: webpack-sources "^1.1.0" worker-farm "^1.5.2" -underscore@~1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" -unicode-canonical-property-names-ecmascript@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.3.tgz#f6119f417467593c0086357c85546b6ad5abc583" +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" -unicode-match-property-ecmascript@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.3.tgz#db9b1cb4ffc67e0c5583780b1b59370e4cbe97b9" +unicode-match-property-value-ecmascript@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz#9f1dc76926d6ccf452310564fd834ace059663d4" + +unicode-properties@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-properties/-/unicode-properties-1.1.0.tgz#7a96eef49f75682ea69d2315eec9ac43ffdf00c1" dependencies: - unicode-canonical-property-names-ecmascript "^1.0.2" - unicode-property-aliases-ecmascript "^1.0.3" + brfs "^1.4.0" + unicode-trie "^0.3.0" -unicode-match-property-value-ecmascript@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.1.tgz#fea059120a016f403afd3bf586162b4db03e0604" +unicode-property-aliases-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0" -unicode-property-aliases-ecmascript@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.3.tgz#ac3522583b9e630580f916635333e00c5ead690d" +unicode-trie@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/unicode-trie/-/unicode-trie-0.3.1.tgz#d671dddd89101a08bac37b6a5161010602052085" + dependencies: + pako "^0.2.5" + tiny-inflate "^1.0.0" union-value@^1.0.0: version "1.0.0" @@ -11295,12 +9588,6 @@ uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" -uniqid@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1" - dependencies: - macaddress "^0.2.8" - uniqs@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" @@ -11317,15 +9604,9 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - dependencies: - crypto-random-string "^1.0.0" - universalify@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" @@ -11342,40 +9623,17 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -untildify@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/untildify/-/untildify-3.0.3.tgz#1e7b42b140bcfd922b22e70ca1265bfe3634c7c9" - -unzip-response@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" - -upath@^1.0.0: +upath@^1.0.5: version "1.1.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" -update-notifier@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" - dependencies: - boxen "^1.2.1" - chalk "^2.0.1" - configstore "^3.0.0" - import-lazy "^2.1.0" - is-ci "^1.0.10" - is-installed-globally "^0.1.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" - upper-case@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" uri-js@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.1.tgz#4595a80a51f356164e22970df64c7abd6ade9850" + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" dependencies: punycode "^2.1.0" @@ -11387,38 +9645,22 @@ url-join@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.0.tgz#4d3340e807d3773bda9991f8305acdcc2a665d2a" -url-loader@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.0.1.tgz#61bc53f1f184d7343da2728a1289ef8722ea45ee" +url-loader@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.1.tgz#4d1f3b4f90dde89f02c008e662d604d7511167c1" dependencies: loader-utils "^1.1.0" mime "^2.0.3" - schema-utils "^0.4.3" - -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - dependencies: - prepend-http "^1.0.1" + schema-utils "^1.0.0" -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - dependencies: - prepend-http "^2.0.0" - -url-parse@^1.1.8, url-parse@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.0.tgz#6bfdaad60098c7fe06f623e42b22de62de0d3d75" +url-parse@^1.1.8, url-parse@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.3.tgz#bfaee455c889023219d757e045fa6a684ec36c15" dependencies: querystringify "^2.0.0" requires-port "^1.0.0" -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" - -url@^0.11.0: +url@0.11.0, url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" dependencies: @@ -11426,14 +9668,8 @@ url@^0.11.0: querystring "0.2.0" use@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.0.tgz#14716bf03fdfefd03040aef58d8b4b85f3a7c544" - dependencies: - kind-of "^6.0.2" - -utf8-byte-length@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" util-deprecate@~1.0.1: version "1.0.2" @@ -11446,12 +9682,18 @@ util.promisify@1.0.0, util.promisify@^1.0.0, util.promisify@~1.0.0: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" -util@0.10.3, util@^0.10.3: +util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" dependencies: inherits "2.0.1" +util@^0.10.3: + version "0.10.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + dependencies: + inherits "2.0.3" + utila@~0.3: version "0.3.3" resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226" @@ -11464,17 +9706,13 @@ utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" -uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" - -v8-compile-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.0.tgz#526492e35fc616864284700b7043e01baee09f0a" +uuid@^3.0.1, uuid@^3.1.0, uuid@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" validate-npm-package-license@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" @@ -11495,35 +9733,9 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vinyl-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/vinyl-file/-/vinyl-file-2.0.0.tgz#a7ebf5ffbefda1b7d18d140fcb07b223efb6751a" - dependencies: - graceful-fs "^4.1.2" - pify "^2.3.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - strip-bom-stream "^2.0.0" - vinyl "^1.1.0" - -vinyl@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz#5c88036cf565e5df05558bfc911f8656df218884" - dependencies: - clone "^1.0.0" - clone-stats "^0.0.1" - replace-ext "0.0.1" - -vinyl@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.1.0.tgz#021f9c2cf951d6b939943c89eb5ee5add4fd924c" - dependencies: - clone "^2.1.1" - clone-buffer "^1.0.0" - clone-stats "^1.0.0" - cloneable-readable "^1.0.0" - remove-trailing-separator "^1.0.1" - replace-ext "^1.0.0" +vlq@^0.2.2: + version "0.2.3" + resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" vm-browserify@0.0.4: version "0.0.4" @@ -11531,12 +9743,20 @@ vm-browserify@0.0.4: dependencies: indexof "0.0.1" -vue-cli-plugin-electron-builder@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/vue-cli-plugin-electron-builder/-/vue-cli-plugin-electron-builder-0.3.2.tgz#67cfefefd2312fbdcfb74a652f5a6695a81b713c" +vue-clipboard2@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/vue-clipboard2/-/vue-clipboard2-0.2.1.tgz#9f06690af1c98aef344be1fc4beb00cdc5307ee1" + integrity sha512-n6ie/0g0bKohmLlC/5ja1esq2Q0jQ5hWmhNSZcvCsWfDeDnVARjl6cBB9p72XV1nlVfuqsZcfV8HTjjZAIlLBA== dependencies: - "@vue/cli-service" "^3.0.0-beta.6" - execa "^0.10.0" + clipboard "^2.0.0" + +vue-echarts@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/vue-echarts/-/vue-echarts-3.1.1.tgz#00568c2b16dce28f7fb442653854054e66d48adc" + dependencies: + echarts "^4.1.0" + lodash "^4.17.10" + resize-detector "^0.1.7" vue-eslint-parser@^2.0.3: version "2.0.3" @@ -11553,26 +9773,11 @@ vue-hot-reload-api@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.0.tgz#97976142405d13d8efae154749e88c4e358cf926" -vue-jest@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/vue-jest/-/vue-jest-2.6.0.tgz#23dc99a4dce0bb59fea3946e1317b234968cf12a" - dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.26.0" - chalk "^2.1.0" - extract-from-css "^0.4.4" - find-babel-config "^1.1.0" - js-beautify "^1.6.14" - node-cache "^4.1.1" - object-assign "^4.1.1" - source-map "^0.5.6" - tsconfig "^7.0.0" - vue-template-es2015-compiler "^1.6.0" - -vue-loader@^15.2.0: - version "15.2.4" - resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.2.4.tgz#a7b923123d3cf87230a8ff54a1c16d31a6c5dbb4" +vue-loader@^15.3.0: + version "15.4.1" + resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.4.1.tgz#10c2da6f50ce5fc6bff2317dcbd1dccf4b3c7702" dependencies: - "@vue/component-compiler-utils" "^1.2.1" + "@vue/component-compiler-utils" "^2.0.0" hash-sum "^1.0.2" loader-utils "^1.1.0" vue-hot-reload-api "^2.3.0" @@ -11583,15 +9788,15 @@ vue-router@^3.0.1: resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.0.1.tgz#d9b05ad9c7420ba0f626d6500d693e60092cc1e9" vue-style-loader@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.0.tgz#7588bd778e2c9f8d87bfc3c5a4a039638da7a863" + version "4.1.1" + resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.1.tgz#7c1d051b24f60b1707602b549ed50b4c8111d316" dependencies: hash-sum "^1.0.2" loader-utils "^1.0.2" -vue-template-compiler@^2.5.13, vue-template-compiler@^2.5.16: - version "2.5.16" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.5.16.tgz#93b48570e56c720cdf3f051cc15287c26fbd04cb" +vue-template-compiler@^2.5.17: + version "2.5.17" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.5.17.tgz#52a4a078c327deb937482a509ae85c06f346c3cb" dependencies: de-indent "^1.0.2" he "^1.1.0" @@ -11600,9 +9805,9 @@ vue-template-es2015-compiler@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz#dc42697133302ce3017524356a6c61b7b69b4a18" -vue@^2.5.16: - version "2.5.16" - resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.16.tgz#07edb75e8412aaeed871ebafa99f4672584a0085" +vue@^2.5.17: + version "2.5.17" + resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.17.tgz#0f8789ad718be68ca1872629832ed533589c6ada" vuex@^3.0.1: version "3.0.1" @@ -11614,19 +9819,6 @@ w3c-hr-time@^1.0.1: dependencies: browser-process-hrtime "^0.1.2" -walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - dependencies: - makeerror "1.0.x" - -watch@~0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" - dependencies: - exec-sh "^0.2.0" - minimist "^1.2.0" - watchpack@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" @@ -11651,11 +9843,22 @@ webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" -webpack-addons@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/webpack-addons/-/webpack-addons-1.1.5.tgz#2b178dfe873fb6e75e40a819fa5c26e4a9bc837a" +webpack-bundle-analyzer@^2.13.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.13.1.tgz#07d2176c6e86c3cdce4c23e56fae2a7b6b4ad526" dependencies: - jscodeshift "^0.4.0" + acorn "^5.3.0" + bfj-node4 "^5.2.0" + chalk "^2.3.0" + commander "^2.13.0" + ejs "^2.5.7" + express "^4.16.2" + filesize "^3.5.11" + gzip-size "^4.1.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + opener "^1.4.3" + ws "^4.0.0" webpack-chain@^4.8.0: version "4.8.0" @@ -11664,37 +9867,6 @@ webpack-chain@^4.8.0: deepmerge "^1.5.2" javascript-stringify "^1.6.0" -webpack-cli@^2.1.3: - version "2.1.5" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-2.1.5.tgz#3081fdeb2f205f0a54aa397986880b0c20a71f7a" - dependencies: - chalk "^2.4.1" - cross-spawn "^6.0.5" - diff "^3.5.0" - enhanced-resolve "^4.0.0" - envinfo "^5.7.0" - glob-all "^3.1.0" - global-modules "^1.0.0" - got "^8.3.1" - import-local "^1.0.0" - inquirer "^5.2.0" - interpret "^1.1.0" - jscodeshift "^0.5.0" - listr "^0.14.1" - loader-utils "^1.1.0" - lodash "^4.17.10" - log-symbols "^2.2.0" - mkdirp "^0.5.1" - p-each-series "^1.0.0" - p-lazy "^1.0.0" - prettier "^1.12.1" - supports-color "^5.4.0" - v8-compile-cache "^2.0.0" - webpack-addons "^1.1.5" - yargs "^11.1.0" - yeoman-environment "^2.1.1" - yeoman-generator "^2.0.5" - webpack-dev-middleware@3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.1.3.tgz#8b32aa43da9ae79368c1bf1183f2b6cf5e1f39ed" @@ -11708,8 +9880,8 @@ webpack-dev-middleware@3.1.3: webpack-log "^1.0.1" webpack-dev-server@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.1.4.tgz#9a08d13c4addd1e3b6d8ace116e86715094ad5b4" + version "3.1.5" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.1.5.tgz#87477252e1ac6789303fb8cd3e585fa5d508a401" dependencies: ansi-html "0.0.7" array-includes "^3.0.3" @@ -11732,7 +9904,7 @@ webpack-dev-server@^3.1.4: selfsigned "^1.9.1" serve-index "^1.7.2" sockjs "0.3.19" - sockjs-client "1.1.4" + sockjs-client "1.1.5" spdy "^3.4.1" strip-ansi "^3.0.0" supports-color "^5.1.0" @@ -11749,9 +9921,9 @@ webpack-log@^1.0.1, webpack-log@^1.1.2: loglevelnext "^1.0.1" uuid "^3.1.0" -webpack-merge@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.2.tgz#5d372dddd3e1e5f8874f5bf5a8e929db09feb216" +webpack-merge@^4.1.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.4.tgz#0fde38eabf2d5fd85251c24a5a8c48f8a3f4eb7b" dependencies: lodash "^4.17.5" @@ -11762,21 +9934,58 @@ webpack-sources@^1.0.1, webpack-sources@^1.1.0: source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^4.8.2: - version "4.10.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.10.2.tgz#d6a4cc3e2fa748f96ca62a70f91eaaa939ef3858" +webpack-sources@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" dependencies: - "@webassemblyjs/ast" "1.5.9" - "@webassemblyjs/wasm-edit" "1.5.9" - "@webassemblyjs/wasm-opt" "1.5.9" - "@webassemblyjs/wasm-parser" "1.5.9" - acorn "^5.0.0" + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@4.18.1: + version "4.18.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.18.1.tgz#029042c815443fce23424de1548d9317cfca148a" + dependencies: + "@webassemblyjs/ast" "1.7.6" + "@webassemblyjs/helper-module-context" "1.7.6" + "@webassemblyjs/wasm-edit" "1.7.6" + "@webassemblyjs/wasm-parser" "1.7.6" + acorn "^5.6.2" acorn-dynamic-import "^3.0.0" ajv "^6.1.0" ajv-keywords "^3.1.0" - chrome-trace-event "^0.1.1" - enhanced-resolve "^4.0.0" - eslint-scope "^3.7.1" + chrome-trace-event "^1.0.0" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.0" + json-parse-better-errors "^1.0.2" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + micromatch "^3.1.8" + mkdirp "~0.5.0" + neo-async "^2.5.0" + node-libs-browser "^2.0.0" + schema-utils "^0.4.4" + tapable "^1.1.0" + uglifyjs-webpack-plugin "^1.2.4" + watchpack "^1.5.0" + webpack-sources "^1.2.0" + +webpack@^4.15.1: + version "4.16.4" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.16.4.tgz#6b020f76483bc66339164c296d89978aa100d37a" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-module-context" "1.5.13" + "@webassemblyjs/wasm-edit" "1.5.13" + "@webassemblyjs/wasm-opt" "1.5.13" + "@webassemblyjs/wasm-parser" "1.5.13" + acorn "^5.6.2" + acorn-dynamic-import "^3.0.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" + chrome-trace-event "^1.0.0" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.0" json-parse-better-errors "^1.0.2" loader-runner "^2.3.0" loader-utils "^1.1.0" @@ -11812,18 +10021,14 @@ whatwg-mimetype@^2.0.0, whatwg-mimetype@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz#f0f21d76cbba72362eb609dbed2a30cd17fcc7d4" -whatwg-url@^6.4.0: - version "6.4.1" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.1.tgz#fdb94b440fd4ad836202c16e9737d511f012fd67" +whatwg-url@^6.4.0, whatwg-url@^6.4.1: + version "6.5.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" dependencies: lodash.sortby "^4.7.0" tr46 "^1.0.1" webidl-conversions "^4.0.2" -whet.extend@~0.9.9: - version "0.9.9" - resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" - which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" @@ -11832,38 +10037,22 @@ which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" -which@1, which@^1.2.10, which@^1.2.12, which@^1.2.9, which@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" - dependencies: - isexe "^2.0.0" - -which@^1.2.14: +which@1, which@^1.2.10, which@^1.2.9, which@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" dependencies: isexe "^2.0.0" wide-align@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" - dependencies: - string-width "^1.0.2" - -widest-line@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.0.tgz#0142a4e8a243f8882c0233aa0e0281aa76152273" + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" dependencies: - string-width "^2.1.1" + string-width "^1.0.2 || 2" window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" -window-size@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" - wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" @@ -11893,15 +10082,7 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" -write-file-atomic@^1.2.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - slide "^1.1.5" - -write-file-atomic@^2.0.0, write-file-atomic@^2.1.0: +write-file-atomic@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" dependencies: @@ -11922,45 +10103,21 @@ ws@^4.0.0: async-limiter "~1.0.0" safe-buffer "~5.1.0" -xdg-basedir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" +ws@^5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + dependencies: + async-limiter "~1.0.0" xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" -xmlbuilder@8.2.2: - version "8.2.2" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" - -xmlbuilder@^9.0.7: - version "9.0.7" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" - -xmldom@0.1.x: - version "0.1.27" - resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" - -xpipe@*: - version "1.0.5" - resolved "https://registry.yarnpkg.com/xpipe/-/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf" - -xregexp@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" - -xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: +xtend@^4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" -xtend@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" - dependencies: - object-keys "~0.4.0" - -y18n@^3.2.0, y18n@^3.2.1: +y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" @@ -11982,19 +10139,13 @@ yargs-parser@^5.0.0: dependencies: camelcase "^3.0.0" -yargs-parser@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" - dependencies: - camelcase "^4.1.0" - yargs-parser@^9.0.2: version "9.0.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" dependencies: camelcase "^4.1.0" -yargs@11.0.0, yargs@^11.0.0: +yargs@11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.0.0.tgz#c052931006c5eee74610e5fc0354bedfd08a201b" dependencies: @@ -12011,24 +10162,7 @@ yargs@11.0.0, yargs@^11.0.0: y18n "^3.2.1" yargs-parser "^9.0.2" -yargs@^10.0.3: - version "10.1.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" - dependencies: - cliui "^4.0.0" - decamelize "^1.1.1" - find-up "^2.1.0" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^8.1.0" - -yargs@^11.1.0: +yargs@11.1.0, yargs@^11.0.0: version "11.1.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" dependencies: @@ -12045,18 +10179,6 @@ yargs@^11.1.0: y18n "^3.2.1" yargs-parser "^9.0.2" -yargs@^3.10.0: - version "3.32.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995" - dependencies: - camelcase "^2.0.1" - cliui "^3.0.3" - decamelize "^1.1.1" - os-locale "^1.4.0" - string-width "^1.0.1" - window-size "^0.1.4" - y18n "^3.2.0" - yargs@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" @@ -12075,12 +10197,6 @@ yargs@^7.0.0: y18n "^3.2.1" yargs-parser "^5.0.0" -yargs@~1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-1.2.6.tgz#9c7b4a82fd5d595b2bf17ab6dcc43135432fe34b" - dependencies: - minimist "^0.1.0" - yargs@~3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" @@ -12096,61 +10212,22 @@ yauzl@2.4.1: dependencies: fd-slicer "~1.0.1" -yeoman-environment@^2.0.5, yeoman-environment@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/yeoman-environment/-/yeoman-environment-2.2.0.tgz#6c0ee93a8d962a9f6dbc5ad4e90ae7ab34875393" - dependencies: - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^3.1.0" - diff "^3.3.1" - escape-string-regexp "^1.0.2" - globby "^8.0.1" - grouped-queue "^0.3.3" - inquirer "^5.2.0" - is-scoped "^1.0.0" - lodash "^4.17.10" - log-symbols "^2.1.0" - mem-fs "^1.1.0" - strip-ansi "^4.0.0" - text-table "^0.2.0" - untildify "^3.0.2" - -yeoman-generator@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/yeoman-generator/-/yeoman-generator-2.0.5.tgz#57b0b3474701293cc9ec965288f3400b00887c81" +yauzl@2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.8.0.tgz#79450aff22b2a9c5a41ef54e02db907ccfbf9ee2" dependencies: - async "^2.6.0" - chalk "^2.3.0" - cli-table "^0.3.1" - cross-spawn "^6.0.5" - dargs "^5.1.0" - dateformat "^3.0.3" - debug "^3.1.0" - detect-conflict "^1.0.0" - error "^7.0.2" - find-up "^2.1.0" - github-username "^4.0.0" - istextorbinary "^2.2.1" - lodash "^4.17.10" - make-dir "^1.1.0" - mem-fs-editor "^4.0.0" - minimist "^1.2.0" - pretty-bytes "^4.0.2" - read-chunk "^2.1.0" - read-pkg-up "^3.0.0" - rimraf "^2.6.2" - run-async "^2.0.0" - shelljs "^0.8.0" - text-table "^0.2.0" - through2 "^2.0.0" - yeoman-environment "^2.0.5" + buffer-crc32 "~0.2.3" + fd-slicer "~1.0.1" -yorkie@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/yorkie/-/yorkie-1.0.3.tgz#5c05db48c012def99c29b79685b6ba2e40c8c671" +yorkie@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yorkie/-/yorkie-2.0.0.tgz#92411912d435214e12c51c2ae1093e54b6bb83d9" dependencies: execa "^0.8.0" is-ci "^1.0.10" normalize-path "^1.0.0" strip-indent "^2.0.0" + +zrender@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/zrender/-/zrender-4.0.4.tgz#910e60d888f00c9599073f23758dd23345fe48fd"