diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..e467111 --- /dev/null +++ b/.babelrc @@ -0,0 +1,7 @@ +{ + "plugins": [ + "@babel/plugin-proposal-optional-chaining", + ["@babel/plugin-proposal-pipeline-operator", { "proposal": "minimal" }], + "@babel/plugin-proposal-export-default-from" + ] + } \ No newline at end of file diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 0000000..d6471a3 --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,2 @@ +> 1% +last 2 versions diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..9eec291 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +node_modules/ +www/ diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..7053c49 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,5 @@ +[*.{js,jsx,ts,tsx,vue}] +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..dd9e460 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,3 @@ +node_modules/ +server.js +node-monitor/ \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..514a2b4 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,53 @@ +module.exports = { + root: true, + + env: { + node: true + }, + + extends: [ + 'plugin:vue/essential', + '@vue/standard', + // 'airbnb-base', + // 'plugin:prettier/recommended' + ], + + rules: { + 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', + 'curly': ['error', 'multi-or-nest'], + 'no-useless-escape': 'off', + 'no-var': 'error', + 'space-before-function-paren': ['error', { + 'anonymous': 'always', + 'named': 'never', + 'asyncArrow': 'always' + }], + 'indent': ['error', 'tab'], + 'no-unused-expressions': 'off', + 'no-tabs': 0, + 'no-mixed-spaces-and-tabs': 0, + 'semi': ['error', 'always'], + 'newline-per-chained-call': ['error'], + 'brace-style': ['error', 'stroustrup'], + // 'array-bracket-newline': ['error', { 'multiline': true, 'minItems': 2 }], + 'newline-after-var': ['error', 'always'], + 'vue/html-indent': ['error', 'tab', { + 'attribute': 1, + 'baseIndent': 1, + 'closeBracket': 0, + 'alignAttributesVertically': false, + 'ignores': [] + }] + // '@typescript-eslint/no-unused-expressions': 'error' + + }, + + globals: { + 'globalConfig': true + }, + + parserOptions: { + parser: 'babel-eslint' + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4dbca65 --- /dev/null +++ b/.gitignore @@ -0,0 +1,29 @@ +.DS_Store +node_modules +node-monitor +/dist +/www + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# Custom config files. +src/config/setup.json + +# e2e screenshots +e2e/screenshots/* diff --git a/.stylelintrc b/.stylelintrc new file mode 100644 index 0000000..ee73505 --- /dev/null +++ b/.stylelintrc @@ -0,0 +1,15 @@ +{ + "processors": ["stylelint-processor-html"], + "extends": "stylelint-config-standard", + "rules": { + "indentation": [4], + "selector-list-comma-space-after": "always", + "selector-list-comma-space-before": "never", + "selector-list-comma-newline-after": "never-multi-line", + "selector-list-comma-newline-before": "never-multi-line", + "font-family-no-missing-generic-family-keyword": null, + "no-descending-specificity": null, + "comment-empty-line-before": null, + "no-empty-source": null + } +} diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..14892a9 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,25 @@ +language: node_js +services: + - docker +node_js: + - "10" + - "12" +env: + global: + - DEV_BRANCH=dev + - RELEASE_BRANCH=release + - POST_RELEASE_BRANCH=main + - RELEASE_MESSAGE=release +cache: + npm: true + directories: + - "node_modules" + override: + - npx cypress verify +script: + - npm run build +jobs: + include: + - stage: lint + name: linter + script: npm run lint:all diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..89637bf --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,16 @@ +# CHANGELOG +All notable changes to this project will be documented in this file. + +The changelog format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). + +## [1.0.0][1.0.0] - 20-May-2021 + +#### Changed + +- Changed default network to dHealth Public Network + +#### Known Issues + +- Some missing re-branding items for dHealth logos. + +[1.0.0]: https://github.com/dhealthproject/dhealth-explorer/releases/tag/v1.0.0 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..923d629 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,10 @@ +FROM node:lts-alpine AS builder +WORKDIR /app +COPY . . +RUN npm install && npm run build + +FROM node:10-alpine AS runner +WORKDIR /app +COPY --from=builder /app /app +EXPOSE 80 +CMD ["npm", "start"] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e1c4310 --- /dev/null +++ b/LICENSE @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2021-present Using Blockchain Ltd - https://ubc.digital, + All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..b8df0a9 --- /dev/null +++ b/README.md @@ -0,0 +1,133 @@ + +

+ +# dHealth Explorer + +[![npm-badge][npm-badge]][npm-url] +[![dl-badge][dl-badge]][npm-url] +[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) + +dHealth Explorer is a read-only web application to browse the content of dHealth Public Blockchain Infrastructure for Healthcare. + +This software supports searching for transactions, accounts, namespaces, mosaics, nodes and blocks information on the dHealth Public Network. + +- [Installation](#installation) +- [Developers](#developers) +- [Sponsor Us](#sponsor-us) +- [Disclaimer](#disclaimer) +- [Licensing](#license) + +## Installation + +dHealth Explorer is available as a web application that you can host locally or on a VPS. + +1. Download dHealth Explorer from the [Github repository][self]. + +2. Install the required dependencies with `npm install`. + +3. Run the web application with `npm run prod` or `npm run dev`. + +4. Visit http://localhost:8080/#/ in your browser. + +Following suite of commands illustrates the installation and first run of dHealth Explorer: + +``` +$ git clone https://github.com/dhealthproject/dhealth-explorer +$ cd dhealth-explorer +$ npm install +$ npm run dev +``` + +## Developers + +### Requirements + +- [Node 10+](https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-20-04) + +Validate your environment by running: + +```bash +node -v +``` + +### Building + +Developers can use this software and build awesome new features. Pull requests are very much appreciated. + +1. Clone the project. + +``` +git clone https://github.com/dhealthproject/dhealth-explorer.git +``` + +2. Install the dependencies. +``` +cd dhealth-explorer +npm install +``` + +3. Start the development server. + +``` +npm run dev +``` + +4. Visit http://localhost:8080/#/ in your browser. + +### Deploying + +You can deploy this web application on any VPS with Node JS 10+ support. Use the following instructions to start a web server inside a daemon docker container: + +```bash +$ cd /opt/dhealth +$ git clone https://github.com/dhealthproject/dhealth-explorer.git +$ cd dhealth-explorer +$ docker build -t explorer-0 . +$ docker run -d -p 80:80 explorer-0 +``` + +:warning: The attached `Dockerfile` **exposes port 80** for any source (i.e. `0.0.0.0:80->80/tcp`). + +### Notes + +#### Architecture + +* `/src/config`: Handles the explorer configuration. +* `/src/infrastructure`: Handles the API / SDK request from Symbol nodes. +* `/src/store`: Handles the application logic with state management. +* `/src/views`: Handles the UI of the explorer. + +#### How to change the node list + +The file `/src/config/default.json` contains the node list shown in the node selector dropdown. + +1. Edit `peersApi.nodes` array to set up the custom node list. +2. Set `peersApi.defaultNode` property to the default node url. + +## Sponsor us + +| Platform | Sponsor Link | +| --- | --- | +| Paypal | [https://paypal.me/usingblockchainltd](https://paypal.me/usingblockchainltd) | +| Patreon | [https://patreon.com/usingblockchainltd](https://patreon.com/usingblockchainltd) | +| Github | [https://github.com/sponsors/UsingBlockchain](https://github.com/sponsors/UsingBlockchain) | +| :coffee: :coffee: :coffee: | [https://www.buymeacoffee.com/UBCDigital](https://www.buymeacoffee.com/UBCDigital) | + +## Disclaimer + + *The author of this package cannot be held responsible for any loss of money or any malintentioned usage forms of this package. Please use this package with caution.* + + *Our software contains links to the websites of third parties (“external links”). As the content of these websites is not under our control, we cannot assume any liability for such external content. In all cases, the provider of information of the linked websites is liable for the content and accuracy of the information provided. At the point in time when the links were placed, no infringements of the law were recognisable to us..* + +## License + +Copyright 2019-2020 NEM. +Copyright 2021-present [Using Blockchain Ltd][ref-ltd], All rights reserved. + +Licensed under the [Apache License 2.0](LICENSE) + +[self]: https://github.com/dhealthproject/dhealth-explorer +[ref-ltd]: https://using-blockchain.org +[npm-url]: https://www.npmjs.com/package/dhealth-explorer +[npm-badge]: https://img.shields.io/npm/v/dhealth-explorer +[dl-badge]: https://img.shields.io/npm/dt/dhealth-explorer diff --git a/__tests__/config/jest.setup.js b/__tests__/config/jest.setup.js new file mode 100644 index 0000000..855c253 --- /dev/null +++ b/__tests__/config/jest.setup.js @@ -0,0 +1 @@ +import 'isomorphic-fetch' diff --git a/__tests__/config/network.conf.json b/__tests__/config/network.conf.json new file mode 100644 index 0000000..4d77701 --- /dev/null +++ b/__tests__/config/network.conf.json @@ -0,0 +1,23 @@ +{ + "nodeUrl": "http://dual-01.dhealth.cloud:3000", + "marketDataUrl": "https://min-api.cryptocompare.com/", + "pagination": { + "pageSize": 25 + }, + "testAccount": { + "address": "NCOMSWYJ5E6WRQV7GBLHCIITDAVDZQ5HEMYJV6I" + }, + "testMosaic": { + "mosaicId": "39E0C49FA322A459" + }, + "testNamespace": { + "rootNamespace": "dhealth", + "subNamespace": "dhealth.dhp" + }, + "testBlock": { + "height": 1 + }, + "testTransactions":{ + "transferTransactionHash": "8AF63A07677442F89B54C85E1F547DFF23ABCEB01B59B100B81D666BD96540D1" + } +} \ No newline at end of file diff --git a/__tests__/infrastructure/AccountService.spec.js b/__tests__/infrastructure/AccountService.spec.js new file mode 100644 index 0000000..6cce0b9 --- /dev/null +++ b/__tests__/infrastructure/AccountService.spec.js @@ -0,0 +1,26 @@ +import { AccountService } from '../../src/infrastructure' +import networkConfig from '../config/network.conf.json' +import { constructHttp } from '../utils' + +beforeAll(async() => { + jest.setTimeout(10000) + await constructHttp() +}); + +describe('Account Service', () => { + + describe('getAccountInfo should', () => { + + it('return custom account object', async () => { + const accountInfo = await AccountService.getAccountInfo(networkConfig.testAccount.address) + expect(accountInfo).not.toBeNull() + }) + }) + + describe('getAccountList should', () => { + it('return custom account list', async () => { + const accountList = await AccountService.getAccountList(networkConfig.pagination.pageSize, 'harvested/blocks') + expect(accountList).not.toBeNull() + }) + }) +}) \ No newline at end of file diff --git a/__tests__/infrastructure/BlockService.spec.js b/__tests__/infrastructure/BlockService.spec.js new file mode 100644 index 0000000..24bb85c --- /dev/null +++ b/__tests__/infrastructure/BlockService.spec.js @@ -0,0 +1,27 @@ +import { BlockService } from '../../src/infrastructure' +import networkConfig from '../config/network.conf.json' +import { constructHttp } from '../utils' + +beforeAll(async() => { + jest.setTimeout(10000) + await constructHttp() +}); + +describe('Block Service', () => { + + describe('getBlockInfo should', () => { + + it('return custom block object', async () => { + const blockInfo = await BlockService.getBlockInfo(networkConfig.testBlock.height) + expect(blockInfo).not.toBeNull() + expect(blockInfo.height).toEqual(networkConfig.testBlock.height) + }) + }) + + describe('getBlockList should', () => { + it('return custom block list', async () => { + const blockList = await BlockService.getBlockList(networkConfig.pagination.pageSize) + expect(blockList).not.toBeNull() + }) + }) +}) \ No newline at end of file diff --git a/__tests__/infrastructure/MosaicService.spec.js b/__tests__/infrastructure/MosaicService.spec.js new file mode 100644 index 0000000..2f17529 --- /dev/null +++ b/__tests__/infrastructure/MosaicService.spec.js @@ -0,0 +1,27 @@ +import { MosaicService } from '../../src/infrastructure' +import networkConfig from '../config/network.conf.json' +import { constructHttp } from '../utils' + +beforeAll(async() => { + jest.setTimeout(10000) + await constructHttp() +}); + +describe('Mosaic Service', () => { + + describe('getMosaicInfo should', () => { + + it('return custom mosaic object', async () => { + const mosaicInfo = await MosaicService.getMosaicInfo(networkConfig.testMosaic.mosaicId) + expect(mosaicInfo).not.toBeNull() + expect(mosaicInfo.mosaicId).toEqual(networkConfig.testMosaic.mosaicId) + }) + }) + + describe('getMosaicList should', () => { + it('return custom mosaic list', async () => { + const mosaicList = await MosaicService.getMosaicList(networkConfig.pagination.pageSize) + expect(mosaicList).not.toBeNull() + }) + }) +}) \ No newline at end of file diff --git a/__tests__/infrastructure/NamespaceService.spec.js b/__tests__/infrastructure/NamespaceService.spec.js new file mode 100644 index 0000000..c047cca --- /dev/null +++ b/__tests__/infrastructure/NamespaceService.spec.js @@ -0,0 +1,27 @@ +import { NamespaceService } from '../../src/infrastructure' +import networkConfig from '../config/network.conf.json' +import { constructHttp } from '../utils' + +beforeAll(async() => { + jest.setTimeout(10000) + await constructHttp() +}); + +describe('Namespace Service', () => { + + describe('getNamespaceInfo should', () => { + + it('return custom namespace object', async () => { + const namespace = await NamespaceService.getNamespaceInfo(networkConfig.testNamespace.rootNamespace) + expect(namespace).not.toBeNull() + expect(namespace.namespaceName).toEqual(networkConfig.testNamespace.rootNamespace) + }) + }) + + describe('getNamespaceList should', () => { + it('return custom namespace list', async () => { + const namespaceList = await NamespaceService.getNamespaceList(networkConfig.pagination.pageSize) + expect(namespaceList).not.toBeNull() + }) + }) +}) \ No newline at end of file diff --git a/__tests__/infrastructure/TransactionService.spec.js b/__tests__/infrastructure/TransactionService.spec.js new file mode 100644 index 0000000..3932c03 --- /dev/null +++ b/__tests__/infrastructure/TransactionService.spec.js @@ -0,0 +1,27 @@ +import { TransactionService } from '../../src/infrastructure' +import networkConfig from '../config/network.conf.json' +import { constructHttp } from '../utils' + +beforeAll(async() => { + jest.setTimeout(10000) + await constructHttp() +}); + +describe('Transaction Service', () => { + + describe('getTransactionInfo should', () => { + + it('return custom transaction object', async () => { + const transactionInfo = await TransactionService.getTransactionInfo(networkConfig.testTransactions.transferTransactionHash) + expect(transactionInfo).not.toBeNull() + expect(transactionInfo.transactionHash).toEqual(networkConfig.testTransactions.transferTransactionHash) + }) + }) + + describe('getTransactionList should', () => { + it('return custom tranasaction list', async () => { + const transactionList = await TransactionService.getTransactionList(networkConfig.pagination.pageSize) + expect(transactionList).not.toBeNull() + }) + }) +}) \ No newline at end of file diff --git a/__tests__/utils.js b/__tests__/utils.js new file mode 100644 index 0000000..00e1fef --- /dev/null +++ b/__tests__/utils.js @@ -0,0 +1,7 @@ + +import networkConfig from './config/network.conf.json' +import http from '../src/infrastructure/http' + +export const constructHttp = async () => { + return await http.init(networkConfig.nodeUrl, networkConfig.marketDataUrl) +} \ No newline at end of file diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..6171695 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/app' + ] +}; diff --git a/cypress.json b/cypress.json new file mode 100644 index 0000000..b8a75f3 --- /dev/null +++ b/cypress.json @@ -0,0 +1,12 @@ +{ + "baseUrl": "http://localhost:8080/", + "defaultCommandTimeout": 20000, + "video": false, + "fixturesFolder": false, + "pluginsFile": false, + "supportFile": "e2e/support/index.js", + "testFiles": "**/*.spec.js", + "videosFolder": "e2e/videos", + "screenshotsFolder": "e2e/screenshots", + "integrationFolder":"e2e" +} diff --git a/docker/default.conf b/docker/default.conf new file mode 100644 index 0000000..07e6377 --- /dev/null +++ b/docker/default.conf @@ -0,0 +1,13 @@ +server { + listen 80; + server_name localhost; + location / { + root /usr/share/nginx/html; + index index.html index.htm; + try_files $uri $uri/ /index.html; + } + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } +} diff --git a/e2e/components/Footer.spec.js b/e2e/components/Footer.spec.js new file mode 100644 index 0000000..84b5eee --- /dev/null +++ b/e2e/components/Footer.spec.js @@ -0,0 +1,67 @@ +describe('Symbol Explorer Footer should', () => { + beforeEach(() => { + cy.visit('/') + }) + + it('link to correct nemflash.io given click on NEM News', () => { + cy.get('.footer').contains('NEM News') + .click() + .should('have.attr', 'href') + .and('include', 'nemflash.io') + }) + + it('link to correct forum.nem.io given click on Forum', () => { + cy.get('.footer') + .contains('Forum') + .click() + .should('have.attr', 'href') + .and('include', 'forum.nem.io') + }) + + it('link to correct nemtech github given click on Github', () => { + cy.get('.footer') + .contains('Github') + .click() + .should('have.attr', 'href') + .and('include', 'github.com/nemtech') + }) + + it('link to correct nemred telegram given click on Telegram', () => { + cy.get('.footer') + .contains('Telegram') + .click() + .should('have.attr', 'href') + .and('include', 't.me/nemred') + }) + + it('link to correct /r/nem/ reddit given click on Reddit', () => { + cy.get('.footer') + .contains('Reddit') + .click() + .should('have.attr', 'href') + .and('include', 'reddit.com/r/nem') + }) + + it('link to correct terms page given click on Terms', () => { + cy.get('.footer') + .contains('Terms') + .click() + + cy.url() + .should('contain', '/terms') + }) + + it('link to correct privacy page given click on Privacy', () => { + cy.get('.footer') + .contains('Privacy') + .click() + + cy.url() + .should('contain', '/privacy') + }) + + it('contain Node Selector component', () => { + cy.get('.node-selector') + }) + +}) diff --git a/e2e/components/Header.spec.js b/e2e/components/Header.spec.js new file mode 100644 index 0000000..008fa56 --- /dev/null +++ b/e2e/components/Header.spec.js @@ -0,0 +1,23 @@ +describe('Symbol Explorer Header should', () => { + beforeEach(() => { + cy.visit('/') + }) + + it('contain correct logo and title', () => { + cy.get('.header-title') + .contains('Symbol blockchain explorer') + + cy.get('.header-logo') + .should('have.attr', 'src') + .and('contain', 'symbol_logo') + + }) + + it('contain Search Box component', () => { + cy.get('.search-box') + }) + + it('contain Language Selector component', () => { + cy.get('.language-selector') + }) +}) \ No newline at end of file diff --git a/e2e/components/SearchBox.spec.js b/e2e/components/SearchBox.spec.js new file mode 100644 index 0000000..739b944 --- /dev/null +++ b/e2e/components/SearchBox.spec.js @@ -0,0 +1,59 @@ +import config from '../config/network.conf.json' + +describe('Search Box component should', () => { + beforeEach(() => { + cy.visit('/') + }) + + it('throw error given dummy data', () => { + + cy.get('.search-box') + .type('RB65QSXGV5FUOOP4MDI') + .type('{enter}') + + cy.get('.search-box') + .should('have.class', 'is-invalid') + }) + + it('redirect to block detail page given existing block number', () => { + + cy.get('.search-box') + .type(config.testBlock.height) + .type('{enter}') + + cy.url() + .should('contain', 'blocks/1') + }) + + it('redirect to transaction detail page given correct transaction hash', () => { + + cy.get('.search-box') + .type(config.testTransactions.transferTransaction) + .type('{enter}') + + cy.url() + .should('contain', `transactions/${config.testTransactions.transferTransaction}`) + }) + + it('redirect to account detail page given correct account address in plain format', () => { + + cy.get('.search-box') + .type(config.testAccount.address) + .type('{enter}') + + cy.url() + .should('contain', `accounts/${config.testAccount.address}`) + }) + + it('redirect to account detail page given correct account address in pretty format', () => { + + const prettyAddress = config.testAccount.address.match(/.{1,6}/g).join('-'); + + cy.get('.search-box') + .type(prettyAddress) + .type('{enter}') + + cy.url() + .should('contain', `accounts/${config.testAccount.address}`) + }) +}) \ No newline at end of file diff --git a/e2e/config/datafiled.json b/e2e/config/datafiled.json new file mode 100644 index 0000000..0d68268 --- /dev/null +++ b/e2e/config/datafiled.json @@ -0,0 +1,3 @@ +{ + "transactionInfoFields": ["Block Height", "Size (bytes)", "Transaction Hash", "Date", "Deadline", "Fee", "Signature", "Signer", "Status", "Confirmation"] +} \ No newline at end of file diff --git a/e2e/config/network.conf.json b/e2e/config/network.conf.json new file mode 100644 index 0000000..4910d19 --- /dev/null +++ b/e2e/config/network.conf.json @@ -0,0 +1,33 @@ +{ + "testAccount": { + "address": "TAB4OVF7V4HXLKF6TQB67XACDUFMWPRI24M6KVI" + }, + "testMosaic": { + "mosaicId": "2054DA418770623F" + }, + "testNamespace": { + "rootNamespace": "symbol", + "subNamespace": "symbol.xym" + }, + "testBlock": { + "height": "1" + }, + "testTransactions":{ + "transferTransaction": "79F07B7726DAC43645CD682127383970FA40BFCCE74EBD5DB89FE7CDB5B1036D", + "mosaicAlias": "3793B719514AC9E529293A7E3B5744A584B29DCF13ACCEEA8408480F0B936EA7", + "addressAlias": "DFAF072EE15FA64C22B9A8802FA87BE94D0280B28B6218F44BA3A1D78B0D3545", + "mosaicSupplyChange": "D26F327A6852B03403AEA1433B75CA83E3C9C2C7ADC0C154638928A5E9B44D8A", + "mosaicDefinition": "0969C9EA465D503C600BD2F09603C213EBFA92B93B2B9D8CA7ED29691652129A", + "namespaceRegistration": "9ECFF1C776286228EC88927B14BBF22FB0DAB1EA0C3356A4326DAD50E09268B9", + "secretLock": "BF5B997C894C960F4632B51E152FE28CA41FD5D534B685C004221CAFAB5CD744", + "secretProof": "516C77975E5F80D03AF336EF8A5DC23F95673DD1B481806FE2894366AC31D757", + "aggregateComplete": "51A5E6663E08449020AFC6CF2BE846001067205CB3E4B48B07E6D3AD45AAD862", + "aggregateBonded": "04DED0D9498AE97DC88AF80E8CBE4519F8F855DB2BB4F44AB1697777634EAC3E", + "hashLock":"041A4675B56B0A8AA3FE1DC10A98D856C234EB5EBA230F09BE478C2C4B81E22C", + "accountOperationRestriction": "55CAE5FE1E72B4A6139630D633871ADE3C30857CC32A0EC818D7F5A3B966AD49", + "accountAddressRestriction": "8D151C7C4C71E1D43A0F85CC0A6EB6DE5F4779B00A681F6BE36D0E8A13BAF33A", + "accountMosaicRestriction":"7172DFE1ECD06EA739B8FA6A0B0B724197D2E5BC96092D582927F6E254BB163B", + "vrfKeyLink":"7D2A9EEBC8C300C84753E2CA7434790EEC8B533F1C97BE61438396830A28B806", + "votingKeyLink":"A8F8861460F51E243ABBD167A7402C9FA8EFDA80914F41A7AB610A2994047A74" + } +} \ No newline at end of file diff --git a/e2e/pageDetail/accountDetail.spec.js b/e2e/pageDetail/accountDetail.spec.js new file mode 100644 index 0000000..5c29b58 --- /dev/null +++ b/e2e/pageDetail/accountDetail.spec.js @@ -0,0 +1,133 @@ +import config from '../config/network.conf.json' + +describe('Symbol Explorer Account Detail page', () => { + beforeEach(() => { + cy.visit(`/accounts/${config.testAccount.address}`) + }) + + describe('Account Detail Card should', () => { + it('load title', () => { + cy.get('[data-cy="accountDetailTitle"]').should('contain', 'Account Detail') + }) + + it('render table in card', ()=> { + cy.renderTableInCard("accountDetailTitle") + }) + + it('render correct table fields.', () => { + const items = ['Address', 'Alias Namespace', 'Address height', 'Public key', 'Importance', 'Account type'] + cy.renderFieldInTable("accountDetailTitle", items) + }) + }) + + // Todo: Multisig Cosignatories + // describe('Multisig Cosignatories Card should', () => { + // it('load title', () => { + // cy.get('[data-cy="multisigCosignatoriesTitle"]').should('contain', 'Multisig Cosignatories') + // }) + + // it('render table in card', ()=> { + // cy.renderTableInCard("multisigCosignatoriesTitle") + // }) + + // it('render correct table fields.', () => { + // const items = ['Minimum Approval', 'Minimum Removal', 'Cosignatories'] + // cy.renderFieldInTable("multisigCosignatoriesTitle", items) + // }) + // }) + + describe('Owned Mosaics Card should', () => { + it('load title', () => { + cy.get('[data-cy="ownedMosaicsTitle"]').should('contain', 'Owned Mosaics') + }) + + it('render table in card', () => { + cy.renderTableInCard("ownedMosaicsTitle") + }) + + it('render correct table header.', () => { + const items = ['Mosaic ID', 'Amount', 'Alias Namespace'] + cy.renderHeaderInTable("ownedMosaicsTitle", items) + }) + }) + + describe('Owned Namespaces Card should', () => { + it('load title', () => { + cy.get('[data-cy="ownedNamespacesTitle"]').should('contain', 'Owned Namespaces') + }) + + it('render table in card', () => { + cy.renderTableInCard("ownedNamespacesTitle") + }) + + it('render correct table header.', () => { + const items = ['Name', 'Status', 'Duration', 'Registration Type'] + cy.renderHeaderInTable("ownedNamespacesTitle", items) + }) + }) + + describe('Supplemental Keys Card should', () => { + it('load title', () => { + cy.get('[data-cy="supplementalKeysTitle"]').should('contain', 'Supplemental Keys') + }) + + it('render table in card', ()=> { + cy.renderTableInCard("supplementalKeysTitle") + }) + + it('render correct table fields.', () => { + const items = ['LINKED', 'NODE', 'VRF'] + cy.renderFieldInTable("supplementalKeysTitle", items) + }) + }) + + describe('Importance History Card should', () => { + it('load title', () => { + cy.get('[data-cy="importanceHistoryTitle"]').should('contain', 'Importance History') + }) + + it('render table in card', () => { + cy.renderTableInCard("importanceHistoryTitle") + }) + + it('render correct table header.', () => { + const items = ['Recalculation Block #', 'Total Fees Paid', 'Beneficiary Count', 'Importance Score'] + cy.renderHeaderInTable("importanceHistoryTitle", items) + }) + }) + + describe('Transactions Card should', () => { + it('load title', () => { + cy.get('[data-cy="accountTransactionsTitle"]').should('contain', 'Transactions') + }) + + it('render table in card', () => { + cy.renderTableInCard("accountTransactionsTitle") + }) + + it('render correct table header.', () => { + const items = ['Deadline', 'Transaction Hash', 'Type'] + cy.renderHeaderInTable("accountTransactionsTitle", items) + }) + }) + + // Todo: Harvested Blocks Card + // describe('Harvested Blocks Card should', () => { + // it('load title', () => { + // cy.get('[data-cy="harvestedBlockTitle"]').should('contain', 'Harvested Blocks') + // }) + + // it('render table in card', () => { + // cy.renderTableInCard("harvestedBlockTitle") + // }) + + // it('render correct table header.', () => { + // const items = ['Height', 'Age', 'Transactions', 'Total Fee', 'Date', 'Harvester'] + // cy.renderHeaderInTable("harvestedBlockTitle", items) + // }) + // }) + + // Todo: Metadata Entries + // Todo: Account Restriction + + }) \ No newline at end of file diff --git a/e2e/pageDetail/blockDetail.spec.js b/e2e/pageDetail/blockDetail.spec.js new file mode 100644 index 0000000..ed5670e --- /dev/null +++ b/e2e/pageDetail/blockDetail.spec.js @@ -0,0 +1,88 @@ +import config from '../config/network.conf.json' + +describe('Symbol Explorer Blocks detail page', () => { + beforeEach(() => { + cy.visit(`/blocks/${config.testBlock.height}`) + }) + + describe('Block Detail Card should', () => { + it('load title', () => { + cy.get('[data-cy="blockDetailTitle"]').should('contain', 'Block Detail') + }) + + it('render block pagination button', () => { + cy.get('[data-cy="blockDetailTitle"] [nextpageaction="block/nextBlock"]').should('have.length', 1) + cy.get('[data-cy="blockDetailTitle"] [previouspageaction="block/previousBlock"]').should('have.length', 1) + }) + + it('render table in card', ()=> { + cy.renderTableInCard("blockDetailTitle") + }) + + it('render correct table fields.', () => { + const items = ['Height', 'Size (bytes)', 'Date', 'Total Fee', 'Difficulty', 'Fee Multiplier', 'Transactions', 'Harvester', 'Block Hash', 'Proof Gamma', 'Proof Scalar', 'Beneficiary Address', 'Proof Verification Hash'] + cy.renderFieldInTable("blockDetailTitle", items) + }) + }) + + describe('Merkle Info Card should', () => { + it('load title', () => { + cy.get('[data-cy="merkleInfoTitle"]').should('contain', 'Merkle Info') + }) + + it('render table in card', ()=> { + cy.renderTableInCard("merkleInfoTitle") + }) + + it('render correct table fields.', () => { + const items = ['State Hash', 'State Hash Sub Cache Merkle Roots', 'Receipts Hash', 'Transactions Hash'] + cy.renderFieldInTable("merkleInfoTitle", items) + }) + }) + + describe('Block Transactions Card should', () => { + it('load title', () => { + cy.get('[data-cy="blockTransactionsTitle"]') + .should('contain', 'Block Transactions') + }) + + it('render table in card', ()=> { + cy.renderTableInCard("blockTransactionsTitle") + }) + + it('render correct table header.', () => { + const items = ['Deadline', 'Transaction Hash', 'Type'] + cy.renderHeaderInTable("blockTransactionsTitle", items) + }) + }) + + describe('Balance Change Receipt Card should', () => { + it('load title', () => { + cy.get('[data-cy="balanceChangeReceiptTitle"]').should('contain', 'Balance Change Receipt') + }) + + it('render table in card', ()=> { + cy.renderTableInCard("balanceChangeReceiptTitle") + }) + + it('render correct table header.', () => { + const items = ['Version', 'Type', 'Size', 'Address', 'Mosaic ID', 'Amount'] + cy.renderHeaderInTable("balanceChangeReceiptTitle", items) + }) + }) + + describe('Resolution Statement Card should', () => { + it('load title', () => { + cy.get('[data-cy="resolutionStatementTitle"]').should('contain', 'Resolution Statement') + }) + + it('render table in card', ()=> { + cy.renderTableInCard("resolutionStatementTitle") + }) + + it('render correct table header.', () => { + const items = ['Type', 'Unresolved', 'Resolved Value'] + cy.renderHeaderInTable("resolutionStatementTitle", items) + }) + }) +}) \ No newline at end of file diff --git a/e2e/pageDetail/mosaicDetail.spec.js b/e2e/pageDetail/mosaicDetail.spec.js new file mode 100644 index 0000000..2443760 --- /dev/null +++ b/e2e/pageDetail/mosaicDetail.spec.js @@ -0,0 +1,26 @@ +import config from '../config/network.conf.json' + +describe('Symbol Explorer Mosaic Detail page', () => { + beforeEach(() => { + cy.visit(`/mosaics/${config.testMosaic.mosaicId}`) + }) + + describe('Mosaic Detail Card should', () => { + it('load title', () => { + cy.get('[data-cy="mosaicDetailTitle"]').should('contain', 'Mosaic Detail') + }) + + it('render table in card', ()=> { + cy.renderTableInCard("mosaicDetailTitle") + }) + + it('render correct table fields.', () => { + const items = ['Mosaic ID', 'Alias Namespace', 'Divisibility', 'Address', 'Supply', 'Revision', 'Height', 'Duration', 'Supply Mutable', 'Transferable', 'Restrictable'] + cy.renderFieldInTable("mosaicDetailTitle", items) + }) + }) + + // Todo: Metadata Entries + // Todo: Mosaic Restriction + // Todo: Mosaic Restriction List + }) \ No newline at end of file diff --git a/e2e/pageDetail/namespaceDetail.spec.js b/e2e/pageDetail/namespaceDetail.spec.js new file mode 100644 index 0000000..d903a40 --- /dev/null +++ b/e2e/pageDetail/namespaceDetail.spec.js @@ -0,0 +1,40 @@ +import config from '../config/network.conf.json' + +describe('Symbol Explorer Namespace detail page', () => { + beforeEach(() => { + cy.visit(`/namespaces/${config.testNamespace.subNamespace}`) + }) + + describe('Namespace Detail Card should', () => { + it('load title', () => { + cy.get('[data-cy="namespaceDetailTitle"]').should('contain', 'Namespace Detail') + }) + + it('render table in card', ()=> { + cy.renderTableInCard("namespaceDetailTitle") + }) + + it('render correct table fields.', () => { + const items = ['Owner Address', 'Name', 'Namespace ID', 'Registration Type', 'Status', 'Alias Type', 'Alias', 'Registered at Height', 'Expired In Block', 'End at Height'] + cy.renderFieldInTable("namespaceDetailTitle", items) + }) + }) + + describe('Namespace Level Card should', () => { + it('load title', () => { + cy.get('[data-cy="namespaceLevelTitle"]') + .should('contain', 'Namespace Level') + }) + + it('render table in card', ()=> { + cy.renderTableInCard("namespaceLevelTitle") + }) + + it('render correct table header.', () => { + const items = ['Name', 'Namespace ID', 'Parent ID'] + cy.renderHeaderInTable("namespaceLevelTitle", items) + }) + }) + + // Todo: Metadata Entries + }) \ No newline at end of file diff --git a/e2e/pageDetail/transactions/accountAddressRestriction.spec.js b/e2e/pageDetail/transactions/accountAddressRestriction.spec.js new file mode 100644 index 0000000..e74d226 --- /dev/null +++ b/e2e/pageDetail/transactions/accountAddressRestriction.spec.js @@ -0,0 +1,39 @@ +import config from '../../config/network.conf.json' +import datafiled from '../../config/datafiled.json' + +describe('Symbol Explorer Transaction detail page for Account Address Restriction.', () => { + beforeEach(() => { + cy.visit(`/transactions/${config.testTransactions.accountAddressRestriction}`) + }) + + describe('Transaction info card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionInfoTitle"]').should('contain', 'Transaction Info') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionInfoTitle") + }) + + it('render correct transaction info titles', ()=> { + const items = datafiled.transactionInfoFields + cy.renderFieldInTable("transactionInfoTitle", items) + }) + }) + + describe('Transaction Detail card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionDetailTitle"]').should('contain', 'Transaction Detail') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionDetailTitle") + }) + + it('render correct transaction detail titles', () => { + const items = ['Transaction Type', 'Restriction Type', 'Additions'] + cy.renderFieldInTable("transactionDetailTitle", items) + }) + + }) +}) \ No newline at end of file diff --git a/e2e/pageDetail/transactions/accountMosaicRestriction.spec.js b/e2e/pageDetail/transactions/accountMosaicRestriction.spec.js new file mode 100644 index 0000000..0d5f717 --- /dev/null +++ b/e2e/pageDetail/transactions/accountMosaicRestriction.spec.js @@ -0,0 +1,39 @@ +import config from '../../config/network.conf.json' +import datafiled from '../../config/datafiled.json' + +describe('Symbol Explorer Transaction detail page for Account Mosaic Restriction.', () => { + beforeEach(() => { + cy.visit(`/transactions/${config.testTransactions.accountMosaicRestriction}`) + }) + + describe('Transaction info card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionInfoTitle"]').should('contain', 'Transaction Info') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionInfoTitle") + }) + + it('render correct transaction info titles', ()=> { + const items = datafiled.transactionInfoFields + cy.renderFieldInTable("transactionInfoTitle", items) + }) + }) + + describe('Transaction Detail card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionDetailTitle"]').should('contain', 'Transaction Detail') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionDetailTitle") + }) + + it('render correct transaction detail titles', () => { + const items = ['Transaction Type', 'Restriction Type', 'Additions'] + cy.renderFieldInTable("transactionDetailTitle", items) + }) + + }) +}) \ No newline at end of file diff --git a/e2e/pageDetail/transactions/accountOperationRestriction.spec.js b/e2e/pageDetail/transactions/accountOperationRestriction.spec.js new file mode 100644 index 0000000..35f3c53 --- /dev/null +++ b/e2e/pageDetail/transactions/accountOperationRestriction.spec.js @@ -0,0 +1,39 @@ +import config from '../../config/network.conf.json' +import datafiled from '../../config/datafiled.json' + +describe('Symbol Explorer Transaction detail page for Account Operation Restriction.', () => { + beforeEach(() => { + cy.visit(`/transactions/${config.testTransactions.accountOperationRestriction}`) + }) + + describe('Transaction info card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionInfoTitle"]').should('contain', 'Transaction Info') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionInfoTitle") + }) + + it('render correct transaction info titles', ()=> { + const items = datafiled.transactionInfoFields + cy.renderFieldInTable("transactionInfoTitle", items) + }) + }) + + describe('Transaction Detail card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionDetailTitle"]').should('contain', 'Transaction Detail') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionDetailTitle") + }) + + it('render correct transaction detail titles', () => { + const items = ['Transaction Type', 'Restriction Type', 'Additions'] + cy.renderFieldInTable("transactionDetailTitle", items) + }) + + }) +}) \ No newline at end of file diff --git a/e2e/pageDetail/transactions/addressAlias.spec.js b/e2e/pageDetail/transactions/addressAlias.spec.js new file mode 100644 index 0000000..927c261 --- /dev/null +++ b/e2e/pageDetail/transactions/addressAlias.spec.js @@ -0,0 +1,39 @@ +import config from '../../config/network.conf.json' +import datafiled from '../../config/datafiled.json' + +describe('Symbol Explorer Transaction detail page for Address Alias', () => { + beforeEach(() => { + cy.visit(`/transactions/${config.testTransactions.addressAlias}`) + }) + + describe('Transaction info card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionInfoTitle"]').should('contain', 'Transaction Info') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionInfoTitle") + }) + + it('render correct transaction info titles', ()=> { + const items = datafiled.transactionInfoFields + cy.renderFieldInTable("transactionInfoTitle", items) + }) + }) + + describe('Transaction Detail card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionDetailTitle"]').should('contain', 'Transaction Detail') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionDetailTitle") + }) + + it('render correct transaction detail titles', () => { + const items = ['Transaction Type', 'Alias Action', 'Namespace ID', 'Name', 'Address'] + cy.renderFieldInTable("transactionDetailTitle", items) + }) + + }) +}) \ No newline at end of file diff --git a/e2e/pageDetail/transactions/aggregateComplete.spec.js b/e2e/pageDetail/transactions/aggregateComplete.spec.js new file mode 100644 index 0000000..1c3e698 --- /dev/null +++ b/e2e/pageDetail/transactions/aggregateComplete.spec.js @@ -0,0 +1,55 @@ +import config from '../../config/network.conf.json' +import datafiled from '../../config/datafiled.json' + +describe('Symbol Explorer Transaction detail page for Aggregate Complete', () => { + beforeEach(() => { + cy.visit(`/transactions/${config.testTransactions.aggregateComplete}`) + }) + + describe('Transaction info card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionInfoTitle"]').should('contain', 'Transaction Info') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionInfoTitle") + }) + + it('render correct transaction info titles', ()=> { + const items = datafiled.transactionInfoFields + cy.renderFieldInTable("transactionInfoTitle", items) + }) + }) + + describe('Transaction Detail card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionDetailTitle"]').should('contain', 'Transaction Detail') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionDetailTitle") + }) + + it('render correct transaction detail titles', () => { + const items = ['Type'] + cy.renderFieldInTable("transactionDetailTitle", items) + }) + + }) + + describe('Aggregate Inner Transactions card should', () => { + it('load title', () => { + cy.get('[data-cy="aggregateInnerTransactionsTitle"]').should('contain', 'Aggregate Inner Transactions') + }) + + it('render data list in table', () => { + cy.renderTableInCard('aggregateInnerTransactionsTitle') + }) + + it('render correct table header.', () => { + const items = ['Transaction Type', 'Signer', 'Transaction Detail'] + cy.renderHeaderInTable('aggregateInnerTransactionsTitle', items) + }) + }) + +}) \ No newline at end of file diff --git a/e2e/pageDetail/transactions/hashLock.spec.js b/e2e/pageDetail/transactions/hashLock.spec.js new file mode 100644 index 0000000..7d3130f --- /dev/null +++ b/e2e/pageDetail/transactions/hashLock.spec.js @@ -0,0 +1,39 @@ +import config from '../../config/network.conf.json' +import datafiled from '../../config/datafiled.json' + +describe('Symbol Explorer Transaction detail page for Hash Lock.', () => { + beforeEach(() => { + cy.visit(`/transactions/${config.testTransactions.hashLock}`) + }) + + describe('Transaction info card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionInfoTitle"]').should('contain', 'Transaction Info') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionInfoTitle") + }) + + it('render correct transaction info titles', ()=> { + const items = datafiled.transactionInfoFields + cy.renderFieldInTable("transactionInfoTitle", items) + }) + }) + + describe('Transaction Detail card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionDetailTitle"]').should('contain', 'Transaction Detail') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionDetailTitle") + }) + + it('render correct transaction detail titles', () => { + const items = ['Transaction Type', 'Duration', 'Mosaic ID', 'Amount', 'Hash', 'Alias Namespace'] + cy.renderFieldInTable("transactionDetailTitle", items) + }) + + }) +}) \ No newline at end of file diff --git a/e2e/pageDetail/transactions/mosaicAlias.spec.js b/e2e/pageDetail/transactions/mosaicAlias.spec.js new file mode 100644 index 0000000..1e1759f --- /dev/null +++ b/e2e/pageDetail/transactions/mosaicAlias.spec.js @@ -0,0 +1,39 @@ +import config from '../../config/network.conf.json' +import datafiled from '../../config/datafiled.json' + +describe('Symbol Explorer Transaction detail page for Mosaic Alias', () => { + beforeEach(() => { + cy.visit(`/transactions/${config.testTransactions.mosaicAlias}`) + }) + + describe('Transaction info card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionInfoTitle"]').should('contain', 'Transaction Info') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionInfoTitle") + }) + + it('render correct transaction info titles', ()=> { + const items = datafiled.transactionInfoFields + cy.renderFieldInTable("transactionInfoTitle", items) + }) + }) + + describe('Transaction Detail card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionDetailTitle"]').should('contain', 'Transaction Detail') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionDetailTitle") + }) + + it('render correct transaction detail titles', () => { + const items = ['Transaction Type', 'Alias Action', 'Namespace ID', 'Mosaic ID', 'Name'] + cy.renderFieldInTable("transactionDetailTitle", items) + }) + + }) +}) \ No newline at end of file diff --git a/e2e/pageDetail/transactions/mosaicSupplyChange.spec.js b/e2e/pageDetail/transactions/mosaicSupplyChange.spec.js new file mode 100644 index 0000000..dad26c8 --- /dev/null +++ b/e2e/pageDetail/transactions/mosaicSupplyChange.spec.js @@ -0,0 +1,39 @@ +import config from '../../config/network.conf.json' +import datafiled from '../../config/datafiled.json' + +describe('Symbol Explorer Transaction detail page for Mosaic Supply Change', () => { + beforeEach(() => { + cy.visit(`/transactions/${config.testTransactions.mosaicSupplyChange}`) + }) + + describe('Transaction info card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionInfoTitle"]').should('contain', 'Transaction Info') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionInfoTitle") + }) + + it('render correct transaction info titles', ()=> { + const items = datafiled.transactionInfoFields + cy.renderFieldInTable("transactionInfoTitle", items) + }) + }) + + describe('Transaction Detail card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionDetailTitle"]').should('contain', 'Transaction Detail') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionDetailTitle") + }) + + it('render correct transaction detail titles', () => { + const items = ['Transaction Type', 'Mosaic ID', 'Action', 'Delta'] + cy.renderFieldInTable("transactionDetailTitle", items) + }) + + }) +}) \ No newline at end of file diff --git a/e2e/pageDetail/transactions/namespaceRegistration.spec.js b/e2e/pageDetail/transactions/namespaceRegistration.spec.js new file mode 100644 index 0000000..445382b --- /dev/null +++ b/e2e/pageDetail/transactions/namespaceRegistration.spec.js @@ -0,0 +1,39 @@ +import config from '../../config/network.conf.json' +import datafiled from '../../config/datafiled.json' + +describe('Symbol Explorer Transaction detail page for Namespace Registration', () => { + beforeEach(() => { + cy.visit(`/transactions/${config.testTransactions.namespaceRegistration}`) + }) + + describe('Transaction info card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionInfoTitle"]').should('contain', 'Transaction Info') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionInfoTitle") + }) + + it('render correct transaction info titles', ()=> { + const items = datafiled.transactionInfoFields + cy.renderFieldInTable("transactionInfoTitle", items) + }) + }) + + describe('Transaction Detail card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionDetailTitle"]').should('contain', 'Transaction Detail') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionDetailTitle") + }) + + it('render correct transaction detail titles', () => { + const items = ['Transaction Type', 'Recipient', 'Registration Type', 'Name', 'Namespace ID', 'Parent ID', 'Duration'] + cy.renderFieldInTable("transactionDetailTitle", items) + }) + + }) +}) \ No newline at end of file diff --git a/e2e/pageDetail/transactions/secretLock.spec.js b/e2e/pageDetail/transactions/secretLock.spec.js new file mode 100644 index 0000000..73ccfb5 --- /dev/null +++ b/e2e/pageDetail/transactions/secretLock.spec.js @@ -0,0 +1,38 @@ +import config from '../../config/network.conf.json' +import datafiled from '../../config/datafiled.json' + +describe('Symbol Explorer Transaction detail page for Secret Lock.', () => { + beforeEach(() => { + cy.visit(`/transactions/${config.testTransactions.secretLock}`) + }) + + describe('Transaction info card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionInfoTitle"]').should('contain', 'Transaction Info') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionInfoTitle") + }) + + it('render correct transaction info titles', ()=> { + const items = datafiled.transactionInfoFields + cy.renderFieldInTable("transactionInfoTitle", items) + }) + }) + + describe('Transaction Detail card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionDetailTitle"]').should('contain', 'Transaction Detail') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionDetailTitle") + }) + + it('render correct transaction detail titles', () => { + const items = ['Transaction Type', 'Duration', 'Mosaic ID', 'Secret', 'Recipient', 'Hash Algorithm'] + cy.renderFieldInTable("transactionDetailTitle", items) + }) + }) +}) \ No newline at end of file diff --git a/e2e/pageDetail/transactions/secretProof.spec.js b/e2e/pageDetail/transactions/secretProof.spec.js new file mode 100644 index 0000000..65ebc94 --- /dev/null +++ b/e2e/pageDetail/transactions/secretProof.spec.js @@ -0,0 +1,38 @@ +import config from '../../config/network.conf.json' +import datafiled from '../../config/datafiled.json' + +describe('Symbol Explorer Transaction detail page for Secret Proof.', () => { + beforeEach(() => { + cy.visit(`/transactions/${config.testTransactions.secretProof}`) + }) + + describe('Transaction info card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionInfoTitle"]').should('contain', 'Transaction Info') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionInfoTitle") + }) + + it('render correct transaction info titles', ()=> { + const items = datafiled.transactionInfoFields + cy.renderFieldInTable("transactionInfoTitle", items) + }) + }) + + describe('Transaction Detail card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionDetailTitle"]').should('contain', 'Transaction Detail') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionDetailTitle") + }) + + it('render correct transaction detail titles', () => { + const items = ['Transaction Type', 'Hash Algorithm', 'Recipient', 'Secret', 'Proof'] + cy.renderFieldInTable("transactionDetailTitle", items) + }) + }) +}) \ No newline at end of file diff --git a/e2e/pageDetail/transactions/transferTransaction.spec.js b/e2e/pageDetail/transactions/transferTransaction.spec.js new file mode 100644 index 0000000..d077721 --- /dev/null +++ b/e2e/pageDetail/transactions/transferTransaction.spec.js @@ -0,0 +1,54 @@ +import config from '../../config/network.conf.json' +import datafiled from '../../config/datafiled.json' + +describe('Symbol Explorer Transaction detail page for Transfer Transaction', () => { + beforeEach(() => { + cy.visit(`/transactions/${config.testTransactions.transferTransaction}`) + }) + + describe('Transaction info card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionInfoTitle"]').should('contain', 'Transaction Info') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionInfoTitle") + }) + + it('render correct transaction info titles', ()=> { + const items = datafiled.transactionInfoFields + cy.renderFieldInTable("transactionInfoTitle", items) + }) + }) + + describe('Transaction Detail card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionDetailTitle"]').should('contain', 'Transaction Detail') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionDetailTitle") + }) + + it('render correct transaction detail titles', () => { + const items = ['Type', 'Recipient', 'Message'] + cy.renderFieldInTable("transactionDetailTitle", items) + }) + }) + + describe('Mosaics card should', () => { + it('load title', () => { + cy.get('[data-cy="mosaicsTitle"]').should('contain', 'Mosaics') + }) + + it('render data list in table', () => { + cy.renderTableInCard('mosaicsTitle') + }) + + it('render correct table header.', () => { + const items = ['Mosaic ID', 'Amount', 'Alias Namespace'] + cy.renderHeaderInTable('mosaicsTitle', items) + }) + }) + +}) \ No newline at end of file diff --git a/e2e/pageDetail/transactions/votingKeyLink.spec.js b/e2e/pageDetail/transactions/votingKeyLink.spec.js new file mode 100644 index 0000000..c922228 --- /dev/null +++ b/e2e/pageDetail/transactions/votingKeyLink.spec.js @@ -0,0 +1,39 @@ +import config from '../../config/network.conf.json' +import datafiled from '../../config/datafiled.json' + +describe('Symbol Explorer Transaction detail page for Voting Key Link.', () => { + beforeEach(() => { + cy.visit(`/transactions/${config.testTransactions.votingKeyLink}`) + }) + + describe('Transaction info card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionInfoTitle"]').should('contain', 'Transaction Info') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionInfoTitle") + }) + + it('render correct transaction info titles', ()=> { + const items = datafiled.transactionInfoFields + cy.renderFieldInTable("transactionInfoTitle", items) + }) + }) + + describe('Transaction Detail card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionDetailTitle"]').should('contain', 'Transaction Detail') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionDetailTitle") + }) + + it('render correct transaction detail titles', () => { + const items = ['Transaction Type', 'Link Action', 'Linked Public Key', 'Linked Account Address', 'Start Finalization Epoch', 'End Finalization Epoch'] + cy.renderFieldInTable("transactionDetailTitle", items) + }) + + }) +}) \ No newline at end of file diff --git a/e2e/pageDetail/transactions/vrfKeyLink.spec.js b/e2e/pageDetail/transactions/vrfKeyLink.spec.js new file mode 100644 index 0000000..30cdeb8 --- /dev/null +++ b/e2e/pageDetail/transactions/vrfKeyLink.spec.js @@ -0,0 +1,39 @@ +import config from '../../config/network.conf.json' +import datafiled from '../../config/datafiled.json' + +describe('Symbol Explorer Transaction detail page for VRF Key Link.', () => { + beforeEach(() => { + cy.visit(`/transactions/${config.testTransactions.vrfKeyLink}`) + }) + + describe('Transaction info card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionInfoTitle"]').should('contain', 'Transaction Info') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionInfoTitle") + }) + + it('render correct transaction info titles', ()=> { + const items = datafiled.transactionInfoFields + cy.renderFieldInTable("transactionInfoTitle", items) + }) + }) + + describe('Transaction Detail card should', () => { + it('load title', () => { + cy.get('[data-cy="transactionDetailTitle"]').should('contain', 'Transaction Detail') + }) + + it('render data info in table', ()=> { + cy.renderTableInCard("transactionDetailTitle") + }) + + it('render correct transaction detail titles', () => { + const items = ['Transaction Type', 'Link Action', 'Linked Public Key', 'Linked Account Address'] + cy.renderFieldInTable("transactionDetailTitle", items) + }) + + }) +}) \ No newline at end of file diff --git a/e2e/pages/accounts.spec.js b/e2e/pages/accounts.spec.js new file mode 100644 index 0000000..a8b0e08 --- /dev/null +++ b/e2e/pages/accounts.spec.js @@ -0,0 +1,40 @@ +describe('Symbol Explorer Accounts list page should', () => { + beforeEach(() => { + cy.visit('/accounts') + }) + + it('load pages titles', () => { + cy.contains('Accounts') + }) + + it('render table header and table body', () => { + cy.renderTable() + }) + + it('render 5 items in table header', () => { + cy.renderHeaderItem(5) + }) + + it('render at least 1 row data in the table list', () => { + cy.renderData() + }) + + it('redirect to account detail page given click on Address', () => { + cy.get('tbody tr .address a') + .then($data => { + return $data[0] + }).click({ force:true }) + + cy.url().should('contain', '/account') + }) + + // Todo + // it('redirect to block detail page given click on Last Activity', () => { + // cy.get('tbody tr .lastActivity a') + // .then($data => { + // return $data[0] + // }).click({ force:true }) + + // cy.url().should('contain', '/block') + // }) +}) \ No newline at end of file diff --git a/e2e/pages/blocks.spec.js b/e2e/pages/blocks.spec.js new file mode 100644 index 0000000..26fc2e4 --- /dev/null +++ b/e2e/pages/blocks.spec.js @@ -0,0 +1,54 @@ +describe('Symbol Explorer Blocks list page should', () => { + it('load pages titles', () => { + cy.visit('/blocks') + cy.contains('Blocks') + }) + + it('load chain height and block height is exist', () => { + cy.visit('/blocks') + + cy.get('.ex-infotext') + .should('be.visible') + .should('not.empty') + }) + + it('render table header and table body', () => { + cy.visit('/blocks') + + cy.renderTable() + }) + + it('render 7 items in table header', () => { + cy.visit('/blocks') + + cy.renderHeaderItem(7) + }) + + it('render at least 1 row data in the table list', () => { + cy.visit('/blocks') + + cy.renderData() + }) + + it('redirect to account detail page given click on harvester address', () => { + cy.visit('/blocks') + + cy.get('tbody tr .harvester') + .then($data => { + return $data[0] + }).click() + + cy.url().should('contain', '/account') + }) + + it('redirect to block detail page given click on block height', () => { + cy.visit('/blocks') + + cy.get('tbody tr .height') + .then($data => { + return $data[0] + }).click() + + cy.url().should('contain', '/block') + }) + }) \ No newline at end of file diff --git a/e2e/pages/home.spec.js b/e2e/pages/home.spec.js new file mode 100644 index 0000000..d6fec70 --- /dev/null +++ b/e2e/pages/home.spec.js @@ -0,0 +1,56 @@ +// cypress/integration/spec.js +describe('Symbol Explorer Home Page should', () => { + beforeEach(() => { + cy.visit('/') + }) + + it('load XEM Price graph', () => { + + cy.contains('XEM Price') + + // view all statistic button is clickable + // cy.contains('View all statistics').click() + // cy.url().should('contain', '/statistics') + + // XEM price chart is visible + cy.get('.apexcharts-svg').should('be.visible') + + }) + + it('load Base Info', () => { + cy.contains('Base Info') + + // Must have 4 block infomation in Base Info + cy.get('.ex-item-title') + .should('be.visible') + + cy.get('.ex-item-title') + .should('have.length', 5) + + cy.get('.ex-item-value') + .should('be.visible') + + cy.get('.ex-item-value') + .should('have.length', 5) + }) + + it('load Recent Transactions', () => { + cy.contains('Recent Transactions') + + cy.contains('View all transactions').click() + + cy.url() + .should('contain', '/transactions') + }) + + it('load Recent Blocks', () => { + cy.contains('Recent Blocks') + + cy.contains('View all blocks') + .click() + + cy.url() + .should('contain', '/blocks') + + }) +}) \ No newline at end of file diff --git a/e2e/pages/mosaics.spec.js b/e2e/pages/mosaics.spec.js new file mode 100644 index 0000000..558c1d5 --- /dev/null +++ b/e2e/pages/mosaics.spec.js @@ -0,0 +1,48 @@ +describe('Symbol Explorer Mosaics list page should', () => { + beforeEach(() => { + cy.visit('/mosaics') + }) + + it('load pages titles', () => { + cy.contains('Mosaics') + }) + + it('render table header and table body', () => { + cy.renderTable() + }) + + it('render 7 items in table header', () => { + cy.renderHeaderItem(7) + }) + + it('render at least 1 row data in the table list', () => { + cy.renderData() + }) + + it('redirect to account detail page given click on Owner Address', () => { + cy.get('tbody tr .ownerAddress a') + .then($data => { + return $data[0] + }).click({ force:true }) + + cy.url().should('contain', '/account') + }) + + it('redirect to mosaic detail page given click on Mosaic ID', () => { + cy.get('tbody tr .mosaicId a') + .then($data => { + return $data[0] + }).click({ force:true }) + + cy.url().should('contain', '/mosaic') + }) + + it('redirect to block detail page given click on Registered at Height ', () => { + cy.get('tbody tr .startHeight a') + .then($data => { + return $data[0] + }).click({ force:true }) + + cy.url().should('contain', '/block') + }) +}) \ No newline at end of file diff --git a/e2e/pages/namespaces.spec.js b/e2e/pages/namespaces.spec.js new file mode 100644 index 0000000..9ad1edf --- /dev/null +++ b/e2e/pages/namespaces.spec.js @@ -0,0 +1,48 @@ +describe('Symbol Explorer Namespaces list page should', () => { + beforeEach(() => { + cy.visit('/namespaces') + }) + + it('load pages titles', () => { + cy.contains('Namespaces') + }) + + it('render table header and table body', () => { + cy.renderTable() + }) + + it('render 5 items in table header', () => { + cy.renderHeaderItem(5) + }) + + it('render at least 1 row data in the table list', () => { + cy.renderData() + }) + + it('redirect to account detail page given click on Owner Address', () => { + cy.get('tbody tr .ownerAddress a') + .then($data => { + return $data[0] + }).click({ force:true }) + + cy.url().should('contain', '/account') + }) + + it('redirect to namespace detail page given click on Namespace ID', () => { + cy.get('tbody tr .namespaceId a') + .then($data => { + return $data[0] + }).click({ force:true }) + + cy.url().should('contain', '/namespace') + }) + + it('redirect to namespace detail page given click on Name', () => { + cy.get('tbody tr .namespaceName a') + .then($data => { + return $data[0] + }).click({ force:true }) + + cy.url().should('contain', '/namespace') + }) +}) \ No newline at end of file diff --git a/e2e/pages/nodes.spec.js b/e2e/pages/nodes.spec.js new file mode 100644 index 0000000..10216e6 --- /dev/null +++ b/e2e/pages/nodes.spec.js @@ -0,0 +1,30 @@ +describe('Symbol Explorer Nodes list page should', () => { + beforeEach(() => { + cy.visit('/nodes') + }) + + it('load pages titles', () => { + cy.contains('Nodes') + }) + + it('render table header and table body', () => { + cy.renderTable() + }) + + it('render 8 items in table header', () => { + cy.renderHeaderItem(8) + }) + + it('render at least 1 row data in the table list', () => { + cy.renderData() + }) + + it('redirect to account detail page given click on Address', () => { + cy.get('tbody tr .address a') + .then($data => { + return $data[0] + }).click({ force:true }) + + cy.url().should('contain', '/account') + }) +}) \ No newline at end of file diff --git a/e2e/pages/transactions.spec.js b/e2e/pages/transactions.spec.js new file mode 100644 index 0000000..05286be --- /dev/null +++ b/e2e/pages/transactions.spec.js @@ -0,0 +1,49 @@ +describe('Symbol Explorer Transactions list page should', () => { + beforeEach(() => { + cy.visit('/transactions') + }) + + it('load pages titles', () => { + cy.contains('Transactions') + }) + + it('render table header and table body', () => { + cy.renderTable() + }) + + it('render 6 items in table header', () => { + cy.renderHeaderItem(6) + }) + + it('render at least 1 row data in the table list', () => { + cy.renderData() + }) + + it('redirect to transaction detail page given click on transaction hash', () => { + cy.get('tbody tr .transactionHash a') + .then($data => { + return $data[0] + }).click({ force:true }) + + cy.url().should('contain', '/transaction') + }) + + it('redirect to account detail page given click on signer address', () => { + cy.get('tbody tr .signer a') + .then($data => { + return $data[0] + }).click({ force:true }) + + cy.url().should('contain', '/account') + }) + + it('redirect to block detail page given click on block height', () => { + cy.get('tbody tr .height a') + .then($data => { + console.log($data[0]) + return $data[0] + }).click({ force:true }) + + cy.url().should('contain', '/block') + }) + }) \ No newline at end of file diff --git a/e2e/router/router.spec.js b/e2e/router/router.spec.js new file mode 100644 index 0000000..c46643c --- /dev/null +++ b/e2e/router/router.spec.js @@ -0,0 +1,49 @@ + +describe('Symbol Explorer Menu Route should', () => { + beforeEach(() => { + cy.visit('/') + }) + + it('redirect to home given click on home tab', () => { + cy.contains('XEM Price') + cy.contains('Base Info') + cy.contains('Recent Transactions') + cy.contains('Recent Blocks') + }) + + it('redirect to blocks listing given click on blocks tab', () => { + cy.get('.ex-menu').contains('Blocks').click() + cy.url().should('contain', '/blocks') + + }) + + it('redirect to transactions listing given click on transactions tab', () => { + cy.get('.ex-menu').contains('Transactions').click() + cy.url().should('contain', '/transactions') + }) + + it('redirect to accounts listing click on account tab', () => { + cy.get('.ex-menu').contains('Accounts').click() + cy.url().should('contain', '/accounts') + }) + + it('redirect to namespaces listing given click on namespace tab', () => { + cy.get('.ex-menu').contains('Namespaces').click() + cy.url().should('contain', '/namespaces') + }) + + it('redirect to mosaics listing given click on mosaic tab', () => { + cy.get('.ex-menu').contains('Mosaics').click() + cy.url().should('contain', '/mosaics') + }) + + it('redirect to nodes listing given click on nodes tab', () => { + cy.get('.ex-menu').contains('Nodes').click() + cy.url().should('contain', '/nodes') + }) + + it('redirect to statistics page given click on statistics tab', () => { + cy.get('.ex-menu').contains('Statistics').click() + cy.url().should('contain', '/statistics') + }) +}) diff --git a/e2e/support/commands.js b/e2e/support/commands.js new file mode 100644 index 0000000..c70fd73 --- /dev/null +++ b/e2e/support/commands.js @@ -0,0 +1,51 @@ +Cypress.Commands.add("renderTable", () => { + cy.get('table') + .should('be.visible') + + cy.get('thead') + .should('be.visible') + + cy.get('tbody') + .should('be.visible') + }) + +Cypress.Commands.add("renderHeaderItem", (length) => { + cy.get('thead > tr > th') + .should('have.length', length) + }) + + Cypress.Commands.add("renderData", () => { + cy.get('tbody > tr') + .then($data => { + return $data.length + }).should('be.at.least',1) + }) + + Cypress.Commands.add("renderTableInCard", (dataCy) => { + cy.get(`[data-cy="${dataCy}"] table`) + .should('be.visible') + + cy.get(`[data-cy="${dataCy}"] tbody > tr`) + .then($data => { + return $data.length + }).should('be.at.least',1) + }) + + Cypress.Commands.add("renderHeaderInTable", (dataCy, items) => { + cy.get(`[data-cy="${dataCy}"] thead > tr > th`).as('tableHeader') + cy.get('@tableHeader').should('have.length', items.length) + + items.map(item => { + cy.get('@tableHeader').should('contain', item) + }) + }) + + Cypress.Commands.add("renderFieldInTable", (dataCy, items) => { + cy.get(`[data-cy="${dataCy}"] .table-titles`).as('infoField') + cy.get('@infoField').should('have.length', items.length) + + items.map(item => { + cy.get('@infoField').should('contain', item) + }) + }) + diff --git a/e2e/support/index.js b/e2e/support/index.js new file mode 100644 index 0000000..43c03b7 --- /dev/null +++ b/e2e/support/index.js @@ -0,0 +1 @@ +import './commands' diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..8403f8e --- /dev/null +++ b/jest.config.js @@ -0,0 +1,20 @@ +const path = require('path'); + +module.exports = { + verbose: true, + setupFiles: ['/__tests__/config/jest.setup.js'], + rootDir: path.join(__dirname), + moduleDirectories: ['node_modules', 'src'], + modulePaths: ['/src', '/node_modules'], + transform: { + '^.+\\.js$': 'babel-jest', + '^.+\\.vue$': 'vue-jest', + '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub' + }, + + testMatch: [ + '**/__tests__/**/*.spec.js' + ], + + transformIgnorePatterns: ['/node_modules'] +}; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..7bddd07 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,24294 @@ +{ + "name": "dhealth-explorer", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/core": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.5.5.tgz", + "integrity": "sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.5.5", + "@babel/helpers": "^7.5.5", + "@babel/parser": "^7.5.5", + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5", + "convert-source-map": "^1.1.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/generator": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz", + "integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==", + "dev": true, + "requires": { + "@babel/types": "^7.5.5", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz", + "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + }, + "dependencies": { + "@babel/types": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz", + "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.8.3", + "@babel/types": "^7.8.3" + }, + "dependencies": { + "@babel/types": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-call-delegate": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.7.tgz", + "integrity": "sha512-doAA5LAKhsFCR0LAFIf+r2RSMmC+m8f/oQ+URnUET/rWeEzC0yTRmAGyWkD4sSu3xwbS7MYQ2u+xlt1V5R56KQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.7" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/generator": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.8.tgz", + "integrity": "sha512-HKyUVu69cZoclptr8t8U5b6sx6zoWjh8jiUhnuj3MpZuKT2dJ8zPTuiy31luq32swhI0SpwItCIlU8XW7BZeJg==", + "dev": true, + "requires": { + "@babel/types": "^7.8.7", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz", + "integrity": "sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==", + "dev": true + }, + "@babel/template": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@babel/traverse": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.6.tgz", + "integrity": "sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.6", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.6.tgz", + "integrity": "sha512-klTBDdsr+VFFqaDHm5rR69OpEQtO2Qv8ECxHS1mNhJJvaHArR6a1xTf5K/eZW7eZpJbhCx3NW1Yt/sKsLXLblg==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-member-expression-to-functions": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-split-export-declaration": "^7.8.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/helper-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz", + "integrity": "sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==", + "dev": true + }, + "@babel/template": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@babel/types": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz", + "integrity": "sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-regex": "^7.8.3", + "regexpu-core": "^4.7.0" + } + }, + "@babel/helper-define-map": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz", + "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/types": "^7.8.3", + "lodash": "^4.17.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/helper-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz", + "integrity": "sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==", + "dev": true + }, + "@babel/template": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@babel/types": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz", + "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/generator": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.8.tgz", + "integrity": "sha512-HKyUVu69cZoclptr8t8U5b6sx6zoWjh8jiUhnuj3MpZuKT2dJ8zPTuiy31luq32swhI0SpwItCIlU8XW7BZeJg==", + "dev": true, + "requires": { + "@babel/types": "^7.8.7", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz", + "integrity": "sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==", + "dev": true + }, + "@babel/template": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@babel/traverse": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.6.tgz", + "integrity": "sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.6", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-function-name": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", + "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", + "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz", + "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + }, + "dependencies": { + "@babel/types": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", + "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + }, + "dependencies": { + "@babel/types": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-module-imports": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", + "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + }, + "dependencies": { + "@babel/types": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-module-transforms": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.6.tgz", + "integrity": "sha512-RDnGJSR5EFBJjG3deY0NiL0K9TO8SXxS9n/MPsbPK/s9LbQymuLNtlzvDiNS7IpecuL45cMeLVkA+HfmlrnkRg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-simple-access": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/template": "^7.8.6", + "@babel/types": "^7.8.6", + "lodash": "^4.17.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz", + "integrity": "sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==", + "dev": true + }, + "@babel/template": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@babel/types": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", + "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + }, + "dependencies": { + "@babel/types": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-plugin-utils": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==" + }, + "@babel/helper-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz", + "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==", + "dev": true, + "requires": { + "lodash": "^4.17.13" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz", + "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-wrap-function": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/generator": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.8.tgz", + "integrity": "sha512-HKyUVu69cZoclptr8t8U5b6sx6zoWjh8jiUhnuj3MpZuKT2dJ8zPTuiy31luq32swhI0SpwItCIlU8XW7BZeJg==", + "dev": true, + "requires": { + "@babel/types": "^7.8.7", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz", + "integrity": "sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==", + "dev": true + }, + "@babel/template": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@babel/traverse": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.6.tgz", + "integrity": "sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.6", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-replace-supers": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz", + "integrity": "sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/traverse": "^7.8.6", + "@babel/types": "^7.8.6" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/generator": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.8.tgz", + "integrity": "sha512-HKyUVu69cZoclptr8t8U5b6sx6zoWjh8jiUhnuj3MpZuKT2dJ8zPTuiy31luq32swhI0SpwItCIlU8XW7BZeJg==", + "dev": true, + "requires": { + "@babel/types": "^7.8.7", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz", + "integrity": "sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==", + "dev": true + }, + "@babel/template": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@babel/traverse": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.6.tgz", + "integrity": "sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.6", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-simple-access": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", + "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", + "dev": true, + "requires": { + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz", + "integrity": "sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==", + "dev": true + }, + "@babel/template": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@babel/types": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", + "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz", + "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", + "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/generator": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.8.tgz", + "integrity": "sha512-HKyUVu69cZoclptr8t8U5b6sx6zoWjh8jiUhnuj3MpZuKT2dJ8zPTuiy31luq32swhI0SpwItCIlU8XW7BZeJg==", + "dev": true, + "requires": { + "@babel/types": "^7.8.7", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz", + "integrity": "sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==", + "dev": true + }, + "@babel/template": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@babel/traverse": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.6.tgz", + "integrity": "sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.6", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helpers": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.5.5.tgz", + "integrity": "sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g==", + "dev": true, + "requires": { + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5" + } + }, + "@babel/highlight": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz", + "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==", + "dev": true + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz", + "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3", + "@babel/plugin-syntax-async-generators": "^7.8.0" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz", + "integrity": "sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.8.3.tgz", + "integrity": "sha512-e3RvdvS4qPJVTe288DlXjwKflpfy1hr0j5dz5WpIYYeP7vQZg2WfAEIp8k5/Lwis/m5REXEteIz6rrcDtXXG7w==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-decorators": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-default-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.8.3.tgz", + "integrity": "sha512-PYtv2S2OdCdp7GSPDg5ndGZFm9DmWFvuLoS5nBxZCgOBggluLnhTScspJxng96alHQzPyrrHxvC9/w4bFuspeA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-export-default-from": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", + "dev": true + } + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz", + "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz", + "integrity": "sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "@babel/plugin-proposal-pipeline-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-pipeline-operator/-/plugin-proposal-pipeline-operator-7.8.3.tgz", + "integrity": "sha512-Z0qV3aUYoLUAnVLdfLTlz/GJYfcrbX7Mhrp897Twik29wQseAFAAXQ4TPvN1oswVBHdN74sLPIn9HVfTXtjuQA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-pipeline-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz", + "integrity": "sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.8", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz", + "integrity": "sha512-Gf2Yx/iRs1JREDtVZ56OrjjgFHCaldpTnuy9BHla10qyVT3YkIIGEtoDWhyop0ksu1GvNjHIoYRBqm3zoR1jyQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz", + "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g==", + "dev": true + } + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.8.3.tgz", + "integrity": "sha512-8Hg4dNNT9/LcA1zQlfwuKR8BUc/if7Q7NkTam9sGTcJphLwpf2g4S42uhspQrIrR+dpzE0dtTqBVFoHl8GtnnQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-default-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.8.3.tgz", + "integrity": "sha512-a1qnnsr73KLNIQcQlcQ4ZHxqqfBKM6iNQZW2OMTyxNbA2WC7SHWHtGVpFzWtQAuS2pspkWVzdEBXXx8Ik0Za4w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", + "dev": true + } + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.1.tgz", + "integrity": "sha512-ypC4jwfIVF72og0dgvEcFRdOM2V9Qm1tu7RGmdZOlhsccyK0wisXmMObGuWEOd5jQ+K9wcIgSNftCpk2vkjUfQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz", + "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g==", + "dev": true + } + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz", + "integrity": "sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.1.tgz", + "integrity": "sha512-XyHIFa9kdrgJS91CUH+ccPVTnJShr8nLGc5bG2IhGXv5p1Rd+8BleGE5yzIg2Nc1QZAdHDa0Qp4m6066OL96Iw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz", + "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g==", + "dev": true + } + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.1.tgz", + "integrity": "sha512-uTd0OsHrpe3tH5gRPTxG8Voh99/WCU78vIm5NMRYPAqC8lR4vajt6KkCAknCHrx24vkPdd/05yfdGSB4EIY2mg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz", + "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g==", + "dev": true + } + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-pipeline-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-pipeline-operator/-/plugin-syntax-pipeline-operator-7.8.3.tgz", + "integrity": "sha512-GhiBvlXZLWeP+MjKaEv33KmiR/QMCv4iCwz1AuuAp7pHxBvOxxyQmIPukh+N/py6PRLYG10bvRCNeenG34QbDA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz", + "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz", + "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz", + "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz", + "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "lodash": "^4.17.13" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.6.tgz", + "integrity": "sha512-k9r8qRay/R6v5aWZkrEclEhKO6mc1CCQr2dLsVHBmOQiMpN6I2bpjX3vgnldUWeEI1GHVNByULVxZ4BdP4Hmdg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-define-map": "^7.8.3", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-split-export-declaration": "^7.8.3", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/helper-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz", + "integrity": "sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==", + "dev": true + }, + "@babel/template": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@babel/types": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz", + "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.8.tgz", + "integrity": "sha512-eRJu4Vs2rmttFCdhPUM3bV0Yo/xPSdPw6ML9KHs/bjB4bLA5HXlbvYXPOD5yASodGod+krjYx21xm1QmL8dCJQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz", + "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz", + "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz", + "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.6.tgz", + "integrity": "sha512-M0pw4/1/KI5WAxPsdcUL/w2LJ7o89YHN3yLkzNjg7Yl15GlVGgzHyCU+FMeAxevHGsLVmUqbirlUIKTafPmzdw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz", + "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/helper-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz", + "integrity": "sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==", + "dev": true + }, + "@babel/template": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@babel/types": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/plugin-transform-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz", + "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz", + "integrity": "sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz", + "integrity": "sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-simple-access": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz", + "integrity": "sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.8.3", + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz", + "integrity": "sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz", + "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz", + "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz", + "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.8.tgz", + "integrity": "sha512-hC4Ld/Ulpf1psQciWWwdnUspQoQco2bMzSrwU6TmzRlvoYQe4rQFy9vnCZDTlVeCQj0JPfL+1RX0V8hCJvkgBA==", + "dev": true, + "requires": { + "@babel/helper-call-delegate": "^7.8.7", + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + }, + "dependencies": { + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/types": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz", + "integrity": "sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.8.3.tgz", + "integrity": "sha512-/vqUt5Yh+cgPZXXjmaG9NT8aVfThKk7G4OqkVhrXqwsC5soMn/qTCxs36rZ2QFhpfTJcjw4SNDIZ4RUb8OL4jQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "resolve": "^1.8.1", + "semver": "^5.5.1" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz", + "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz", + "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz", + "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-regex": "^7.8.3" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz", + "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz", + "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz", + "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/preset-env": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.4.tgz", + "integrity": "sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.2.0", + "@babel/plugin-proposal-json-strings": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.3.4", + "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", + "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-json-strings": "^7.2.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", + "@babel/plugin-transform-arrow-functions": "^7.2.0", + "@babel/plugin-transform-async-to-generator": "^7.3.4", + "@babel/plugin-transform-block-scoped-functions": "^7.2.0", + "@babel/plugin-transform-block-scoping": "^7.3.4", + "@babel/plugin-transform-classes": "^7.3.4", + "@babel/plugin-transform-computed-properties": "^7.2.0", + "@babel/plugin-transform-destructuring": "^7.2.0", + "@babel/plugin-transform-dotall-regex": "^7.2.0", + "@babel/plugin-transform-duplicate-keys": "^7.2.0", + "@babel/plugin-transform-exponentiation-operator": "^7.2.0", + "@babel/plugin-transform-for-of": "^7.2.0", + "@babel/plugin-transform-function-name": "^7.2.0", + "@babel/plugin-transform-literals": "^7.2.0", + "@babel/plugin-transform-modules-amd": "^7.2.0", + "@babel/plugin-transform-modules-commonjs": "^7.2.0", + "@babel/plugin-transform-modules-systemjs": "^7.3.4", + "@babel/plugin-transform-modules-umd": "^7.2.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0", + "@babel/plugin-transform-new-target": "^7.0.0", + "@babel/plugin-transform-object-super": "^7.2.0", + "@babel/plugin-transform-parameters": "^7.2.0", + "@babel/plugin-transform-regenerator": "^7.3.4", + "@babel/plugin-transform-shorthand-properties": "^7.2.0", + "@babel/plugin-transform-spread": "^7.2.0", + "@babel/plugin-transform-sticky-regex": "^7.2.0", + "@babel/plugin-transform-template-literals": "^7.2.0", + "@babel/plugin-transform-typeof-symbol": "^7.2.0", + "@babel/plugin-transform-unicode-regex": "^7.2.0", + "browserslist": "^4.3.4", + "invariant": "^2.2.2", + "js-levenshtein": "^1.1.3", + "semver": "^5.3.0" + } + }, + "@babel/runtime": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.7.tgz", + "integrity": "sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime-corejs2": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.8.7.tgz", + "integrity": "sha512-R8zbPiv25S0pGfMqAr55dRRxWB8vUeo3wicI4g9PFVBKmsy/9wmQUV1AaYW/kxRHUhx42TTh6F0+QO+4pwfYWg==", + "dev": true, + "requires": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", + "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4" + } + }, + "@babel/traverse": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz", + "integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.5.5", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/parser": "^7.5.5", + "@babel/types": "^7.5.5", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", + "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@cypress/listr-verbose-renderer": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@cypress/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz", + "integrity": "sha1-p3SS9LEdzHxEajSz4ochr9M8ZCo=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "cli-cursor": "^1.0.2", + "date-fns": "^1.27.2", + "figures": "^1.7.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "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" + } + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "^1.0.1" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==", + "dev": true + }, + "@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==", + "dev": true + }, + "@hapi/hoek": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==", + "dev": true + }, + "@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "dev": true, + "requires": { + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" + } + }, + "@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "dev": true, + "requires": { + "@hapi/hoek": "^8.3.0" + } + }, + "@intervolga/optimize-cssnano-plugin": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz", + "integrity": "sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA==", + "dev": true, + "requires": { + "cssnano": "^4.0.0", + "cssnano-preset-default": "^4.0.0", + "postcss": "^7.0.0" + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", + "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "dev": true + }, + "@jest/console": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", + "dev": true, + "requires": { + "@jest/source-map": "^24.9.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" + } + }, + "@jest/core": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", + "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/reporters": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-changed-files": "^24.9.0", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-resolve-dependencies": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "jest-watcher": "^24.9.0", + "micromatch": "^3.1.10", + "p-each-series": "^1.0.0", + "realpath-native": "^1.1.0", + "rimraf": "^2.5.4", + "slash": "^2.0.0", + "strip-ansi": "^5.0.0" + } + }, + "@jest/environment": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", + "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", + "dev": true, + "requires": { + "@jest/fake-timers": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/fake-timers": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/globals": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.1.0.tgz", + "integrity": "sha512-MKiHPNaT+ZoG85oMaYUmGHEqu98y3WO2yeIDJrs2sJqHhYOy3Z6F7F/luzFomRQ8SQ1wEkmahFAz2291Iv8EAw==", + "dev": true, + "requires": { + "@jest/environment": "^26.1.0", + "@jest/types": "^26.1.0", + "expect": "^26.1.0" + }, + "dependencies": { + "@jest/environment": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.1.0.tgz", + "integrity": "sha512-86+DNcGongbX7ai/KE/S3/NcUVZfrwvFzOOWX/W+OOTvTds7j07LtC+MgGydH5c8Ri3uIrvdmVgd1xFD5zt/xA==", + "dev": true, + "requires": { + "@jest/fake-timers": "^26.1.0", + "@jest/types": "^26.1.0", + "jest-mock": "^26.1.0" + } + }, + "@jest/fake-timers": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.1.0.tgz", + "integrity": "sha512-Y5F3kBVWxhau3TJ825iuWy++BAuQzK/xEa+wD9vDH3RytW9f2DbMVodfUQC54rZDX3POqdxCgcKdgcOL0rYUpA==", + "dev": true, + "requires": { + "@jest/types": "^26.1.0", + "@sinonjs/fake-timers": "^6.0.1", + "jest-message-util": "^26.1.0", + "jest-mock": "^26.1.0", + "jest-util": "^26.1.0" + } + }, + "@jest/types": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz", + "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "15.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.5.tgz", + "integrity": "sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "diff-sequences": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.0.0.tgz", + "integrity": "sha512-JC/eHYEC3aSS0vZGjuoc4vHA0yAQTzhQQldXMeMF+JlxLGJlCO38Gma82NV9gk1jGFz8mDzUMeaKXvjRRdJ2dg==", + "dev": true + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + }, + "expect": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-26.1.0.tgz", + "integrity": "sha512-QbH4LZXDsno9AACrN9eM0zfnby9G+OsdNgZUohjg/P0mLy1O+/bzTAJGT6VSIjVCe8yKM6SzEl/ckEOFBT7Vnw==", + "dev": true, + "requires": { + "@jest/types": "^26.1.0", + "ansi-styles": "^4.0.0", + "jest-get-type": "^26.0.0", + "jest-matcher-utils": "^26.1.0", + "jest-message-util": "^26.1.0", + "jest-regex-util": "^26.0.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "jest-diff": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.1.0.tgz", + "integrity": "sha512-GZpIcom339y0OXznsEKjtkfKxNdg7bVbEofK8Q6MnevTIiR1jNhDWKhRX6X0SDXJlwn3dy59nZ1z55fLkAqPWg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^26.0.0", + "jest-get-type": "^26.0.0", + "pretty-format": "^26.1.0" + } + }, + "jest-get-type": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.0.0.tgz", + "integrity": "sha512-zRc1OAPnnws1EVfykXOj19zo2EMw5Hi6HLbFCSjpuJiXtOWAYIjNsHVSbpQ8bDX7L5BGYGI8m+HmKdjHYFF0kg==", + "dev": true + }, + "jest-matcher-utils": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.1.0.tgz", + "integrity": "sha512-PW9JtItbYvES/xLn5mYxjMd+Rk+/kIt88EfH3N7w9KeOrHWaHrdYPnVHndGbsFGRJ2d5gKtwggCvkqbFDoouQA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^26.1.0", + "jest-get-type": "^26.0.0", + "pretty-format": "^26.1.0" + } + }, + "jest-message-util": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.1.0.tgz", + "integrity": "sha512-dY0+UlldiAJwNDJ08SF0HdF32g9PkbF2NRK/+2iMPU40O6q+iSn1lgog/u0UH8ksWoPv0+gNq8cjhYO2MFtT0g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.1.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + } + }, + "jest-mock": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.1.0.tgz", + "integrity": "sha512-1Rm8EIJ3ZFA8yCIie92UbxZWj9SuVmUGcyhLHyAhY6WI3NIct38nVcfOPWhJteqSn8V8e3xOMha9Ojfazfpovw==", + "dev": true, + "requires": { + "@jest/types": "^26.1.0" + } + }, + "jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "dev": true + }, + "jest-util": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.1.0.tgz", + "integrity": "sha512-rNMOwFQevljfNGvbzNQAxdmXQ+NawW/J72dmddsK0E8vgxXCMtwQ/EH0BiWEIxh0hhMcTsxwAxINt7Lh46Uzbg==", + "dev": true, + "requires": { + "@jest/types": "^26.1.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + } + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "pretty-format": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.1.0.tgz", + "integrity": "sha512-GmeO1PEYdM+non4BKCj+XsPJjFOJIPnsLewqhDVoqY1xo0yNmDas7tC2XwpMrRAHR3MaE2hPo37deX5OisJ2Wg==", + "dev": true, + "requires": { + "@jest/types": "^26.1.0", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^16.12.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "stack-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.2.tgz", + "integrity": "sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "@jest/reporters": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", + "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "istanbul-lib-coverage": "^2.0.2", + "istanbul-lib-instrument": "^3.0.1", + "istanbul-lib-report": "^2.0.4", + "istanbul-lib-source-maps": "^3.0.1", + "istanbul-reports": "^2.2.6", + "jest-haste-map": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.6.0", + "node-notifier": "^5.4.2", + "slash": "^2.0.0", + "source-map": "^0.6.0", + "string-length": "^2.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/source-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/test-result": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", + "dev": true, + "requires": { + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/istanbul-lib-coverage": "^2.0.0" + } + }, + "@jest/test-sequencer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", + "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", + "dev": true, + "requires": { + "@jest/test-result": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0" + } + }, + "@jest/transform": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", + "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^24.9.0", + "babel-plugin-istanbul": "^5.1.0", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.15", + "jest-haste-map": "^24.9.0", + "jest-regex-util": "^24.9.0", + "jest-util": "^24.9.0", + "micromatch": "^3.1.10", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "2.4.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + } + }, + "@js-joda/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-3.2.0.tgz", + "integrity": "sha512-PMqgJ0sw5B7FKb2d5bWYIoxjri+QlW/Pys7+Rw82jSH0QN3rB05jZ/VrrsUdh1w4+i2kw9JOejXGq/KhDOX7Kg==" + }, + "@mdi/font": { + "version": "5.2.45", + "resolved": "https://registry.npmjs.org/@mdi/font/-/font-5.2.45.tgz", + "integrity": "sha512-3ReoMrZh2OJR8loD7to2hheYWh6pD+ypv6EpuvnEvoR04fsShwpDfS2ZErM3k98REEk4XIqPzuctAztmhWm+Pw==" + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true + }, + "@nuxt/opencollective": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@nuxt/opencollective/-/opencollective-0.3.0.tgz", + "integrity": "sha512-Vf09BxCdj1iT2IRqVwX5snaY2WCTkvM0O4cWWSO1ThCFuc4if0Q/nNwAgCxRU0FeYHJ7DdyMUNSdswCLKlVqeg==", + "requires": { + "chalk": "^2.4.2", + "consola": "^2.10.1", + "node-fetch": "^2.6.0" + } + }, + "@sinonjs/commons": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.0.tgz", + "integrity": "sha512-wEj54PfsZ5jGSwMX68G8ZXFawcSglQSXqCftWX3ec8MDUzQdHgcKvw97awHbY0efQEL5iKUOAmmVtoYgmrSG4Q==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@soda/friendly-errors-webpack-plugin": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz", + "integrity": "sha512-cWKrGaFX+rfbMrAxVv56DzhPNqOJPZuNIS2HGMELtgGzb+vsMzyig9mml5gZ/hr2BGtSLV+dP2LUEuAL8aG2mQ==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "error-stack-parser": "^2.0.0", + "string-width": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "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" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "@types/babel__core": { + "version": "7.1.9", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.9.tgz", + "integrity": "sha512-sY2RsIJ5rpER1u3/aQ8OFSI7qGIy8o1NEEbgb2UaJcvOtXOMpd39ko723NBpjQFg9SIX7TXtjejZVGeIMLhoOw==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.1.tgz", + "integrity": "sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", + "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.12.tgz", + "integrity": "sha512-t4CoEokHTfcyfb4hUaF9oOHu9RmmNWnm1CP0YmMqOOfClKascOmvlEM736vlqeScuGvBDsHkf8R2INd4DWreQA==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true + }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "dev": true + }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/graceful-fs": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.3.tgz", + "integrity": "sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "24.9.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.9.1.tgz", + "integrity": "sha512-Fb38HkXSVA4L8fGKEZ6le5bB8r6MRWlOCZbVuWZcmOMSCd2wCYOwN1ibj8daIoV9naq7aaOZjrLCoCMptKU/4Q==", + "dev": true, + "requires": { + "jest-diff": "^24.3.0" + } + }, + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==" + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "@types/node": { + "version": "12.6.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.6.8.tgz", + "integrity": "sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, + "@types/prettier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.0.1.tgz", + "integrity": "sha512-boy4xPNEtiw6N3abRhBi/e7hNvy3Tt8E9ZRAQrwAGzoCGZS/1wjo9KY7JHhnfnEsG5wSjDbymCozUM9a3ea7OQ==", + "dev": true + }, + "@types/q": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", + "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", + "dev": true + }, + "@types/sizzle": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.2.tgz", + "integrity": "sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg==", + "dev": true + }, + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "@types/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I=", + "dev": true + }, + "@types/strip-json-comments": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", + "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", + "dev": true + }, + "@types/unist": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", + "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==", + "dev": true + }, + "@types/vfile": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/vfile/-/vfile-3.0.2.tgz", + "integrity": "sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/unist": "*", + "@types/vfile-message": "*" + } + }, + "@types/vfile-message": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/vfile-message/-/vfile-message-2.0.0.tgz", + "integrity": "sha512-GpTIuDpb9u4zIO165fUy9+fXcULdD8HFRNli04GehoMVbeNq7D6OBnqSmg3lxZnC+UvgUhEWKxdKiwYUkGltIw==", + "dev": true, + "requires": { + "vfile-message": "*" + } + }, + "@types/yargs": { + "version": "13.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.9.tgz", + "integrity": "sha512-xrvhZ4DZewMDhoH1utLtOAwYQy60eYFoXeje30TzM3VOvQlBwQaEpKFq5m34k1wOw2AKIi2pwtiAjdmhvlBUzg==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", + "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", + "dev": true + }, + "@vue/babel-helper-vue-jsx-merge-props": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0.tgz", + "integrity": "sha512-6tyf5Cqm4m6v7buITuwS+jHzPlIPxbFzEhXR5JGZpbrvOcp1hiQKckd305/3C7C36wFekNTQSxAtgeM0j0yoUw==", + "dev": true + }, + "@vue/babel-plugin-transform-vue-jsx": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.1.2.tgz", + "integrity": "sha512-YfdaoSMvD1nj7+DsrwfTvTnhDXI7bsuh+Y5qWwvQXlD24uLgnsoww3qbiZvWf/EoviZMrvqkqN4CBw0W3BWUTQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", + "html-tags": "^2.0.0", + "lodash.kebabcase": "^4.1.1", + "svg-tags": "^1.0.0" + } + }, + "@vue/babel-preset-app": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-3.12.1.tgz", + "integrity": "sha512-Zjy5jQaikV1Pz+ri0YgXFS7q4/5wCxB5tRkDOEIt5+4105u0Feb/pvH20nVL6nx9GyXrECFfcm7Yxr/z++OaPQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-decorators": "^7.1.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.4.0", + "@babel/preset-env": "^7.0.0 < 7.4.0", + "@babel/runtime": "^7.0.0", + "@babel/runtime-corejs2": "^7.2.0", + "@vue/babel-preset-jsx": "^1.0.0", + "babel-plugin-dynamic-import-node": "^2.2.0", + "babel-plugin-module-resolver": "3.2.0", + "core-js": "^2.6.5" + } + }, + "@vue/babel-preset-jsx": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.1.2.tgz", + "integrity": "sha512-zDpVnFpeC9YXmvGIDSsKNdL7qCG2rA3gjywLYHPCKDT10erjxF4U+6ay9X6TW5fl4GsDlJp9bVfAVQAAVzxxvQ==", + "dev": true, + "requires": { + "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.1.2", + "@vue/babel-sugar-functional-vue": "^1.1.2", + "@vue/babel-sugar-inject-h": "^1.1.2", + "@vue/babel-sugar-v-model": "^1.1.2", + "@vue/babel-sugar-v-on": "^1.1.2" + } + }, + "@vue/babel-sugar-functional-vue": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.1.2.tgz", + "integrity": "sha512-YhmdJQSVEFF5ETJXzrMpj0nkCXEa39TvVxJTuVjzvP2rgKhdMmQzlJuMv/HpadhZaRVMCCF3AEjjJcK5q/cYzQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-inject-h": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.1.2.tgz", + "integrity": "sha512-VRSENdTvD5htpnVp7i7DNuChR5rVMcORdXjvv5HVvpdKHzDZAYiLSD+GhnhxLm3/dMuk8pSzV+k28ECkiN5m8w==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-v-model": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.1.2.tgz", + "integrity": "sha512-vLXPvNq8vDtt0u9LqFdpGM9W9IWDmCmCyJXuozlq4F4UYVleXJ2Fa+3JsnTZNJcG+pLjjfnEGHci2339Kj5sGg==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.1.2", + "camelcase": "^5.0.0", + "html-tags": "^2.0.0", + "svg-tags": "^1.0.0" + } + }, + "@vue/babel-sugar-v-on": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.1.2.tgz", + "integrity": "sha512-T8ZCwC8Jp2uRtcZ88YwZtZXe7eQrJcfRq0uTFy6ShbwYJyz5qWskRFoVsdTi9o0WEhmQXxhQUewodOSCUPVmsQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.1.2", + "camelcase": "^5.0.0" + } + }, + "@vue/cli-overlay": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-3.12.1.tgz", + "integrity": "sha512-Bym92EN+lj+cNRN2ozbYyH+V8DMXWGbCDUk+hiJ4EYDBZfBkZKvalk1/mOBFwyxiopnnbOEBAAhL/UuMQ1xARg==", + "dev": true + }, + "@vue/cli-plugin-babel": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-3.12.1.tgz", + "integrity": "sha512-Zetvz8PikLCGomeKOKu8pC9YQ7cfxs7pGpvEOzaxGdhMnebhjAYR6i6dOB57A6N5lhxQksXCtYTv26QgfiIpdg==", + "dev": true, + "requires": { + "@babel/core": "^7.0.0", + "@vue/babel-preset-app": "^3.12.1", + "@vue/cli-shared-utils": "^3.12.1", + "babel-loader": "^8.0.5", + "webpack": "^4.0.0" + } + }, + "@vue/cli-plugin-e2e-cypress": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-e2e-cypress/-/cli-plugin-e2e-cypress-4.2.3.tgz", + "integrity": "sha512-UOJ34JpeEqL7Jbw92RYEvnBtsv6S3pA9fWV8FJ2UccRGwzWHiPGPddkKSYof9E1Fkhg51QvSCXr5XKjBEtxTnQ==", + "dev": true, + "requires": { + "@vue/cli-shared-utils": "^4.2.3", + "cypress": "^3.8.3", + "eslint-plugin-cypress": "^2.8.1" + }, + "dependencies": { + "@vue/cli-shared-utils": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-4.2.3.tgz", + "integrity": "sha512-GCoTB6vMZsi9z/Bmn8/C9IlnUw8eeHONOGE+48TJkZyulftVFhlwVWjTFp5GuDAlwpTWarHchW9IoVu3pIIGfA==", + "dev": true, + "requires": { + "@hapi/joi": "^15.0.1", + "chalk": "^2.4.2", + "execa": "^1.0.0", + "launch-editor": "^2.2.1", + "lru-cache": "^5.1.1", + "node-ipc": "^9.1.1", + "open": "^6.3.0", + "ora": "^3.4.0", + "read-pkg": "^5.1.1", + "request": "^2.87.0", + "request-promise-native": "^1.0.8", + "semver": "^6.1.0", + "strip-ansi": "^6.0.0" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "request-promise-core": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", + "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "request-promise-native": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", + "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", + "dev": true, + "requires": { + "request-promise-core": "1.1.3", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "@vue/cli-plugin-eslint": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.12.1.tgz", + "integrity": "sha512-tVTZlEZsy3sQbO4LLWFK11yzlWwqVAqaM+IY+BeWHITBzEJKh2KmouG+x6x/reXiU3qROsMJ4Ej3Hs8buSMWyQ==", + "dev": true, + "requires": { + "@vue/cli-shared-utils": "^3.12.1", + "babel-eslint": "^10.0.1", + "eslint": "^4.19.1", + "eslint-loader": "^2.1.2", + "eslint-plugin-vue": "^4.7.1", + "globby": "^9.2.0", + "webpack": "^4.0.0", + "yorkie": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "optional": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "optional": true + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "optional": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "eslint": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "dev": true, + "optional": true, + "requires": { + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.4", + "esquery": "^1.0.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.0.1", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^1.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", + "table": "4.0.2", + "text-table": "~0.2.0" + } + }, + "eslint-plugin-vue": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-4.7.1.tgz", + "integrity": "sha512-esETKhVMI7Vdli70Wt4bvAwnZBJeM0pxVX9Yb0wWKxdCJc2EADalVYK/q2FzMw8oKN0wPMdqVCKS8kmR89recA==", + "dev": true, + "optional": true, + "requires": { + "vue-eslint-parser": "^2.0.3" + } + }, + "eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", + "dev": true, + "optional": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true, + "optional": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true, + "optional": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "optional": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true, + "optional": true + } + } + }, + "@vue/cli-plugin-unit-jest": { + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-unit-jest/-/cli-plugin-unit-jest-4.4.6.tgz", + "integrity": "sha512-TwvCZV03JgXLSdc1UaD+Fjt3ooeX0gvRH2bUy58uuEx3qyk7xYx7vRM4uyJ51XZs9l4SEcegwtOlBga6lc6okA==", + "dev": true, + "requires": { + "@babel/core": "^7.9.6", + "@babel/plugin-transform-modules-commonjs": "^7.9.6", + "@types/jest": "^24.0.19", + "@vue/cli-shared-utils": "^4.4.6", + "babel-core": "^7.0.0-bridge.0", + "babel-jest": "^24.9.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2", + "deepmerge": "^4.2.2", + "jest": "^24.9.0", + "jest-environment-jsdom-fifteen": "^1.0.2", + "jest-serializer-vue": "^2.0.2", + "jest-transform-stub": "^2.0.0", + "jest-watch-typeahead": "^0.4.2", + "ts-jest": "^24.2.0", + "vue-jest": "^3.0.5" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz", + "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.3" + } + }, + "@babel/core": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.3.tgz", + "integrity": "sha512-5YqWxYE3pyhIi84L84YcwjeEgS+fa7ZjK6IBVGTjDVfm64njkR2lfDhVR5OudLk8x2GK59YoSyVv+L/03k1q9w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.3", + "@babel/generator": "^7.10.3", + "@babel/helper-module-transforms": "^7.10.1", + "@babel/helpers": "^7.10.1", + "@babel/parser": "^7.10.3", + "@babel/template": "^7.10.3", + "@babel/traverse": "^7.10.3", + "@babel/types": "^7.10.3", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/generator": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.3.tgz", + "integrity": "sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz", + "integrity": "sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.10.3", + "@babel/template": "^7.10.3", + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz", + "integrity": "sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.3.tgz", + "integrity": "sha512-q7+37c4EPLSjNb2NmWOjNwj0+BOyYlssuQ58kHEWk1Z78K5i8vTUsteq78HMieRPQSl/NtpQyJfdjt3qZ5V2vw==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-module-imports": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.3.tgz", + "integrity": "sha512-Jtqw5M9pahLSUWA+76nhK9OG8nwYXzhQzVIGFoNaHnXF/r4l7kz4Fl0UAW7B6mqC5myoJiBP5/YQlXQTMfHI9w==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-module-transforms": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz", + "integrity": "sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.1", + "@babel/helper-replace-supers": "^7.10.1", + "@babel/helper-simple-access": "^7.10.1", + "@babel/helper-split-export-declaration": "^7.10.1", + "@babel/template": "^7.10.1", + "@babel/types": "^7.10.1", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.3.tgz", + "integrity": "sha512-kT2R3VBH/cnSz+yChKpaKRJQJWxdGoc6SjioRId2wkeV3bK0wLLioFpJROrX0U4xr/NmxSSAWT/9Ih5snwIIzg==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz", + "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g==", + "dev": true + }, + "@babel/helper-replace-supers": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz", + "integrity": "sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.10.1", + "@babel/helper-optimise-call-expression": "^7.10.1", + "@babel/traverse": "^7.10.1", + "@babel/types": "^7.10.1" + } + }, + "@babel/helper-simple-access": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz", + "integrity": "sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw==", + "dev": true, + "requires": { + "@babel/template": "^7.10.1", + "@babel/types": "^7.10.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", + "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", + "dev": true, + "requires": { + "@babel/types": "^7.10.1" + } + }, + "@babel/helpers": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.1.tgz", + "integrity": "sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw==", + "dev": true, + "requires": { + "@babel/template": "^7.10.1", + "@babel/traverse": "^7.10.1", + "@babel/types": "^7.10.1" + } + }, + "@babel/highlight": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz", + "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.3", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.3.tgz", + "integrity": "sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA==", + "dev": true + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.1.tgz", + "integrity": "sha512-AQG4fc3KOah0vdITwt7Gi6hD9BtQP/8bhem7OjbaMoRNCH5Djx42O2vYMfau7QnAzQCa+RJnhJBmFFMGpQEzrg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.10.1", + "@babel/helper-plugin-utils": "^7.10.1", + "@babel/helper-simple-access": "^7.10.1", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/template": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.3.tgz", + "integrity": "sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.3", + "@babel/parser": "^7.10.3", + "@babel/types": "^7.10.3" + } + }, + "@babel/traverse": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.3.tgz", + "integrity": "sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.3", + "@babel/generator": "^7.10.3", + "@babel/helper-function-name": "^7.10.3", + "@babel/helper-split-export-declaration": "^7.10.1", + "@babel/parser": "^7.10.3", + "@babel/types": "^7.10.3", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz", + "integrity": "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.3", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@vue/cli-shared-utils": { + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-4.4.6.tgz", + "integrity": "sha512-ba+FZZCjiTSu2otnLjY4qXqASe7ZIQ/QBljk5oRPgqrR0p1NUkDPUcZhqa041aOaSW1yAfSfhOD7Q84nMnWhzQ==", + "dev": true, + "requires": { + "@hapi/joi": "^15.0.1", + "chalk": "^2.4.2", + "execa": "^1.0.0", + "launch-editor": "^2.2.1", + "lru-cache": "^5.1.1", + "node-ipc": "^9.1.1", + "open": "^6.3.0", + "ora": "^3.4.0", + "read-pkg": "^5.1.1", + "request": "^2.88.2", + "semver": "^6.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "babel-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", + "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", + "dev": true, + "requires": { + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/babel__core": "^7.1.0", + "babel-plugin-istanbul": "^5.1.0", + "babel-preset-jest": "^24.9.0", + "chalk": "^2.4.2", + "slash": "^2.0.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", + "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", + "dev": true, + "requires": { + "import-local": "^2.0.0", + "jest-cli": "^24.9.0" + }, + "dependencies": { + "jest-cli": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", + "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", + "dev": true, + "requires": { + "@jest/core": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "import-local": "^2.0.0", + "is-ci": "^2.0.0", + "jest-config": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "prompts": "^2.0.1", + "realpath-native": "^1.1.0", + "yargs": "^13.3.0" + } + } + } + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "@vue/cli-service": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-3.12.1.tgz", + "integrity": "sha512-PDxNrTGnSKzeV1ruFlsRIAO8JcPizwT0EJXq9GeyooU+p+sOkv7aKkCBJQVYNjZapD1NOGWx6CvAAC/wAW+gew==", + "dev": true, + "requires": { + "@intervolga/optimize-cssnano-plugin": "^1.0.5", + "@soda/friendly-errors-webpack-plugin": "^1.7.1", + "@vue/cli-overlay": "^3.12.1", + "@vue/cli-shared-utils": "^3.12.1", + "@vue/component-compiler-utils": "^3.0.0", + "@vue/preload-webpack-plugin": "^1.1.0", + "@vue/web-component-wrapper": "^1.2.0", + "acorn": "^6.1.1", + "acorn-walk": "^6.1.1", + "address": "^1.0.3", + "autoprefixer": "^9.5.1", + "browserslist": "^4.5.4", + "cache-loader": "^2.0.1", + "case-sensitive-paths-webpack-plugin": "^2.2.0", + "chalk": "^2.4.2", + "cli-highlight": "^2.1.0", + "clipboardy": "^2.0.0", + "cliui": "^5.0.0", + "copy-webpack-plugin": "^4.6.0", + "css-loader": "^1.0.1", + "cssnano": "^4.1.10", + "current-script-polyfill": "^1.0.0", + "debug": "^4.1.1", + "default-gateway": "^5.0.2", + "dotenv": "^7.0.0", + "dotenv-expand": "^5.1.0", + "escape-string-regexp": "^1.0.5", + "file-loader": "^3.0.1", + "fs-extra": "^7.0.1", + "globby": "^9.2.0", + "hash-sum": "^1.0.2", + "html-webpack-plugin": "^3.2.0", + "launch-editor-middleware": "^2.2.1", + "lodash.defaultsdeep": "^4.6.1", + "lodash.mapvalues": "^4.6.0", + "lodash.transform": "^4.6.0", + "mini-css-extract-plugin": "^0.8.0", + "minimist": "^1.2.0", + "ora": "^3.4.0", + "portfinder": "^1.0.20", + "postcss-loader": "^3.0.0", + "read-pkg": "^5.0.0", + "semver": "^6.0.0", + "slash": "^2.0.0", + "source-map-url": "^0.4.0", + "ssri": "^6.0.1", + "string.prototype.padend": "^3.0.0", + "terser-webpack-plugin": "^1.2.3", + "thread-loader": "^2.1.2", + "url-loader": "^1.1.2", + "vue-loader": "^15.7.0", + "webpack": "^4.0.0", + "webpack-bundle-analyzer": "^3.3.0", + "webpack-chain": "^4.11.0", + "webpack-dev-server": "^3.4.1", + "webpack-merge": "^4.2.1" + }, + "dependencies": { + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@vue/cli-shared-utils": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-3.12.1.tgz", + "integrity": "sha512-jFblzRFjutGwu5utOKdVlPlsbA1lBUNNQlAThzNqej+JtTKJjnvjlhjKX0Gq0oOny5FjKWhoyfQ74p9h1qE6JQ==", + "dev": true, + "requires": { + "@hapi/joi": "^15.0.1", + "chalk": "^2.4.1", + "execa": "^1.0.0", + "launch-editor": "^2.2.1", + "lru-cache": "^5.1.1", + "node-ipc": "^9.1.1", + "open": "^6.3.0", + "ora": "^3.4.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.7", + "semver": "^6.0.0", + "string.prototype.padstart": "^3.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@vue/component-compiler-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.1.1.tgz", + "integrity": "sha512-+lN3nsfJJDGMNz7fCpcoYIORrXo0K3OTsdr8jCM7FuqdI4+70TY6gxY6viJ2Xi1clqyPg7LpeOWwjF31vSMmUw==", + "dev": true, + "requires": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.14", + "postcss-selector-parser": "^6.0.2", + "prettier": "^1.18.2", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "@vue/eslint-config-standard": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-standard/-/eslint-config-standard-4.0.0.tgz", + "integrity": "sha512-bQghq1cw1BuMRHNhr3tRpAJx1tpGy0QtajQX873kLtA9YVuOIoXR7nAWnTN09bBHnSUh2N288vMsqPi2fI4Hzg==", + "dev": true, + "requires": { + "eslint-config-standard": "^12.0.0", + "eslint-plugin-import": "^2.14.0", + "eslint-plugin-node": "^8.0.0", + "eslint-plugin-promise": "^4.0.1", + "eslint-plugin-standard": "^4.0.0" + } + }, + "@vue/preload-webpack-plugin": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.1.tgz", + "integrity": "sha512-8VCoJeeH8tCkzhkpfOkt+abALQkS11OIHhte5MBzYaKMTqK0A3ZAKEUVAffsOklhEv7t0yrQt696Opnu9oAx+w==", + "dev": true + }, + "@vue/web-component-wrapper": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.2.0.tgz", + "integrity": "sha512-Xn/+vdm9CjuC9p3Ae+lTClNutrVhsXpzxvoTXXtoys6kVRX9FkueSUAqSWAyZntmVLlR4DosBV4pH8y5Z/HbUw==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "abab": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", + "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", + "dev": true + }, + "acorn-globals": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", + "dev": true, + "requires": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + } + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "optional": true, + "requires": { + "acorn": "^3.0.4" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true, + "optional": true + } + } + }, + "acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", + "dev": true + }, + "address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "dev": true + }, + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==" + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "apexcharts": { + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.24.0.tgz", + "integrity": "sha512-iT6czJCIVrmAtrcO90MZTQCvC+xi6R6Acf0jNH/d40FVTtCfcqECuKIh5iAMyOTtgUb7+fQ8rbadH2bm1kbL9Q==", + "requires": { + "svg.draggable.js": "^2.2.2", + "svg.easing.js": "^2.0.0", + "svg.filter.js": "^2.0.2", + "svg.pathmorphing.js": "^0.1.3", + "svg.resize.js": "^1.4.3", + "svg.select.js": "^3.0.1" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "arch": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz", + "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" + } + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "dev": true, + "requires": { + "lodash": "^4.17.10" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "autoprefixer": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.1.tgz", + "integrity": "sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw==", + "dev": true, + "requires": { + "browserslist": "^4.6.3", + "caniuse-lite": "^1.0.30000980", + "chalk": "^2.4.2", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.17", + "postcss-value-parser": "^4.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.0.tgz", + "integrity": "sha512-ESPktioptiSUchCKgggAkzdmkgzKfmp0EU8jXH+5kbIUB+unr0Y4CY9SRMvibuvYUBjNh1ACLbxqYNpdTQOteQ==", + "dev": true + } + } + }, + "await-lock": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/await-lock/-/await-lock-2.0.1.tgz", + "integrity": "sha512-ntLi9fzlMT/vWjC1wwVI11/cSRJ3nTS35qVekNc9WnaoMOP2eWH0RvIqwLQkDjX4a4YynsKEv+Ere2VONp9wxg==" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + }, + "axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "requires": { + "follow-redirects": "^1.10.0" + } + }, + "babel-cli": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", + "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", + "requires": { + "babel-core": "^6.26.0", + "babel-polyfill": "^6.26.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "chokidar": "^1.6.1", + "commander": "^2.11.0", + "convert-source-map": "^1.5.0", + "fs-readdir-recursive": "^1.0.0", + "glob": "^7.1.2", + "lodash": "^4.17.4", + "output-file-sync": "^1.1.2", + "path-is-absolute": "^1.0.1", + "slash": "^1.0.0", + "source-map": "^0.5.6", + "v8flags": "^2.1.1" + }, + "dependencies": { + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "optional": true, + "requires": { + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "optional": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "optional": true + }, + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "requires": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "optional": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "optional": true, + "requires": { + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "optional": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "optional": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "optional": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "optional": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "optional": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "optional": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + } + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "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" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "dev": true + }, + "babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + }, + "dependencies": { + "@babel/generator": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.8.tgz", + "integrity": "sha512-HKyUVu69cZoclptr8t8U5b6sx6zoWjh8jiUhnuj3MpZuKT2dJ8zPTuiy31luq32swhI0SpwItCIlU8XW7BZeJg==", + "dev": true, + "requires": { + "@babel/types": "^7.8.7", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz", + "integrity": "sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==", + "dev": true + }, + "@babel/template": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + } + } + }, + "@babel/traverse": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.6.tgz", + "integrity": "sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.6", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + } + } + }, + "@babel/types": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "resolve": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", + "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "requires": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" + } + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "requires": { + "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": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "requires": { + "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": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "requires": { + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "requires": { + "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-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-jest": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.1.0.tgz", + "integrity": "sha512-Nkqgtfe7j6PxLO6TnCQQlkMm8wdTdnIF8xrdpooHCuD5hXRzVEPbPneTJKknH5Dsv3L8ip9unHDAp48YQ54Dkg==", + "dev": true, + "requires": { + "@jest/transform": "^26.1.0", + "@jest/types": "^26.1.0", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^26.1.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz", + "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.3" + } + }, + "@babel/generator": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.3.tgz", + "integrity": "sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-function-name": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz", + "integrity": "sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.10.3", + "@babel/template": "^7.10.3", + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz", + "integrity": "sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.3.tgz", + "integrity": "sha512-q7+37c4EPLSjNb2NmWOjNwj0+BOyYlssuQ58kHEWk1Z78K5i8vTUsteq78HMieRPQSl/NtpQyJfdjt3qZ5V2vw==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-module-imports": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.3.tgz", + "integrity": "sha512-Jtqw5M9pahLSUWA+76nhK9OG8nwYXzhQzVIGFoNaHnXF/r4l7kz4Fl0UAW7B6mqC5myoJiBP5/YQlXQTMfHI9w==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-module-transforms": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz", + "integrity": "sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.1", + "@babel/helper-replace-supers": "^7.10.1", + "@babel/helper-simple-access": "^7.10.1", + "@babel/helper-split-export-declaration": "^7.10.1", + "@babel/template": "^7.10.1", + "@babel/types": "^7.10.1", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.3.tgz", + "integrity": "sha512-kT2R3VBH/cnSz+yChKpaKRJQJWxdGoc6SjioRId2wkeV3bK0wLLioFpJROrX0U4xr/NmxSSAWT/9Ih5snwIIzg==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-replace-supers": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz", + "integrity": "sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.10.1", + "@babel/helper-optimise-call-expression": "^7.10.1", + "@babel/traverse": "^7.10.1", + "@babel/types": "^7.10.1" + } + }, + "@babel/helper-simple-access": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz", + "integrity": "sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw==", + "dev": true, + "requires": { + "@babel/template": "^7.10.1", + "@babel/types": "^7.10.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", + "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", + "dev": true, + "requires": { + "@babel/types": "^7.10.1" + } + }, + "@babel/helpers": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.1.tgz", + "integrity": "sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw==", + "dev": true, + "requires": { + "@babel/template": "^7.10.1", + "@babel/traverse": "^7.10.1", + "@babel/types": "^7.10.1" + } + }, + "@babel/highlight": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz", + "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.3", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.3.tgz", + "integrity": "sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA==", + "dev": true + }, + "@babel/template": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.3.tgz", + "integrity": "sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.3", + "@babel/parser": "^7.10.3", + "@babel/types": "^7.10.3" + } + }, + "@babel/traverse": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.3.tgz", + "integrity": "sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.3", + "@babel/generator": "^7.10.3", + "@babel/helper-function-name": "^7.10.3", + "@babel/helper-split-export-declaration": "^7.10.1", + "@babel/parser": "^7.10.3", + "@babel/types": "^7.10.3", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz", + "integrity": "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.3", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@jest/transform": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.1.0.tgz", + "integrity": "sha512-ICPm6sUXmZJieq45ix28k0s+d/z2E8CHDsq+WwtWI6kW8m7I8kPqarSEcUN86entHQ570ZBRci5OWaKL0wlAWw==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^26.1.0", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.1.0", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.1.0", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + } + }, + "@jest/types": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz", + "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "15.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.5.tgz", + "integrity": "sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "babel-plugin-istanbul": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", + "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^4.0.0", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.1.0.tgz", + "integrity": "sha512-qhqLVkkSlqmC83bdMhM8WW4Z9tB+JkjqAqlbbohS9sJLT5Ha2vfzuKqg5yenXrAjOPG2YC0WiXdH3a9PvB+YYw==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-jest": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.1.0.tgz", + "integrity": "sha512-na9qCqFksknlEj5iSdw1ehMVR06LCCTkZLGKeEtxDDdhg8xpUF09m29Kvh1pRbZ07h7AQ5ttLYUwpXL4tO6w7w==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^26.1.0", + "babel-preset-current-node-syntax": "^0.1.2" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "dependencies": { + "@babel/core": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.3.tgz", + "integrity": "sha512-5YqWxYE3pyhIi84L84YcwjeEgS+fa7ZjK6IBVGTjDVfm64njkR2lfDhVR5OudLk8x2GK59YoSyVv+L/03k1q9w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.3", + "@babel/generator": "^7.10.3", + "@babel/helper-module-transforms": "^7.10.1", + "@babel/helpers": "^7.10.1", + "@babel/parser": "^7.10.3", + "@babel/template": "^7.10.3", + "@babel/traverse": "^7.10.3", + "@babel/types": "^7.10.3", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "jest-haste-map": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.1.0.tgz", + "integrity": "sha512-WeBS54xCIz9twzkEdm6+vJBXgRBQfdbbXD0dk8lJh7gLihopABlJmIQFdWSDDtuDe4PRiObsjZSUjbJ1uhWEpA==", + "dev": true, + "requires": { + "@jest/types": "^26.1.0", + "@types/graceful-fs": "^4.1.2", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.1.2", + "graceful-fs": "^4.2.4", + "jest-serializer": "^26.1.0", + "jest-util": "^26.1.0", + "jest-worker": "^26.1.0", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7", + "which": "^2.0.2" + } + }, + "jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "dev": true + }, + "jest-serializer": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.1.0.tgz", + "integrity": "sha512-eqZOQG/0+MHmr25b2Z86g7+Kzd5dG9dhCiUoyUNJPgiqi38DqbDEOlHcNijyfZoj74soGBohKBZuJFS18YTJ5w==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4" + } + }, + "jest-util": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.1.0.tgz", + "integrity": "sha512-rNMOwFQevljfNGvbzNQAxdmXQ+NawW/J72dmddsK0E8vgxXCMtwQ/EH0BiWEIxh0hhMcTsxwAxINt7Lh46Uzbg==", + "dev": true, + "requires": { + "@jest/types": "^26.1.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + } + }, + "jest-worker": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.1.0.tgz", + "integrity": "sha512-Z9P5pZ6UC+kakMbNJn+tA2RdVdNX5WH1x+5UCBZ9MxIK24pjYtFt96fK+UwBTrjLYm232g1xz0L3eTh51OW+yQ==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + } + } + }, + "babel-loader": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", + "dev": true, + "requires": { + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "ajv": { + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", + "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "schema-utils": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.6.tgz", + "integrity": "sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA==", + "dev": true, + "requires": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + } + } + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-istanbul": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", + "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "find-up": "^3.0.0", + "istanbul-lib-instrument": "^3.3.0", + "test-exclude": "^5.2.3" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + } + } + }, + "babel-plugin-jest-hoist": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", + "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", + "dev": true, + "requires": { + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-plugin-module-resolver": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz", + "integrity": "sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA==", + "dev": true, + "requires": { + "find-babel-config": "^1.1.0", + "glob": "^7.1.2", + "pkg-up": "^2.0.0", + "reselect": "^3.0.1", + "resolve": "^1.4.0" + } + }, + "babel-plugin-syntax-dynamic-import": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", + "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=" + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "requires": { + "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": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "requires": { + "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": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "requires": { + "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": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "requires": { + "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": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "requires": { + "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": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "requires": { + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "requires": { + "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": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "requires": { + "jsesc": "~0.5.0" + } + } + } + }, + "babel-plugin-transform-inline-environment-variables": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-environment-variables/-/babel-plugin-transform-inline-environment-variables-6.8.0.tgz", + "integrity": "sha1-/JHdCBJ9xsKr39FyGxHpYCppuhA=", + "requires": { + "babel-runtime": "^6.0.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "requires": { + "regenerator-transform": "^0.10.0" + }, + "dependencies": { + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "requires": { + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" + } + } + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "requires": { + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "regenerator-runtime": "^0.10.5" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" + } + } + }, + "babel-preset-current-node-syntax": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.3.tgz", + "integrity": "sha512-uyexu1sVwcdFnyq9o8UQYsXwXflIh8LvrF5+cKrYam93ned1CStffB3+BEcsxGSgagoA3GEyjDqO4a/58hyPYQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "babel-preset-es2015": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", + "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", + "requires": { + "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": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", + "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", + "dev": true, + "requires": { + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "babel-plugin-jest-hoist": "^24.9.0" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "requires": { + "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" + }, + "dependencies": { + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "requires": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "requires": { + "source-map": "^0.5.6" + } + } + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + } + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + }, + "dependencies": { + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + } + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + }, + "bail": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.4.tgz", + "integrity": "sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bfj": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz", + "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "check-types": "^8.0.3", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "~2.0.0" + } + }, + "bluebird": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", + "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", + "dev": true + }, + "bn.js": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz", + "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "requires": { + "hoek": "2.x.x" + } + }, + "bootstrap": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.4.1.tgz", + "integrity": "sha512-tbx5cHubwE6e2ZG7nqM3g/FZ5PQEDMWmMGNrCUBVRPHXTJaH7CBDdsLeu3eCh3B1tzAxTnAbtmrzvWEvT2NNEA==" + }, + "bootstrap-vue": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.7.0.tgz", + "integrity": "sha512-9DJwtQVFp+7hgKr8N4mjt/YHObep8SVG4wvCX/uKTaMeaNWcMAzxQ/bjFfYVDmf1sjfnWltw1Cqd+ilR+XS0FQ==", + "requires": { + "@nuxt/opencollective": "^0.3.0", + "bootstrap": ">=4.4.1 <5.0.0", + "popper.js": "^1.16.1", + "portal-vue": "^2.1.7", + "vue-functional-data-merge": "^3.1.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz", + "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000984", + "electron-to-chromium": "^1.3.191", + "node-releases": "^1.1.25" + } + }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-reverse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz", + "integrity": "sha1-SSg8jvpvkBvAH6MwTQYCeXGuL2A=" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cache-loader": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-2.0.1.tgz", + "integrity": "sha512-V99T3FOynmGx26Zom+JrVBytLBsmUCzVG2/4NnUKgvXN4bEV42R1ERl1IyiH/cvFIDA1Ytq2lPZ9tXDSahcQpQ==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.0", + "normalize-path": "^3.0.0", + "schema-utils": "^1.0.0" + } + }, + "cachedir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-1.3.0.tgz", + "integrity": "sha512-O1ji32oyON9laVPJL1IZ5bmwd2cB46VfpxkDequezH+15FDzzVddEyrGEeX4WusDSqKxdyFdDQDEG1yo1GoWkg==", + "dev": true, + "requires": { + "os-homedir": "^1.0.1" + } + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + }, + "dependencies": { + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + } + } + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "optional": true, + "requires": { + "callsites": "^0.2.0" + } + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true, + "optional": true + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } + } + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30000988", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000988.tgz", + "integrity": "sha512-lPj3T8poYrRc/bniW5SQPND3GRtSrQdUM/R4mCYTbZxyi3jQiggLvZH4+BYUuX0t4TXjU+vMM7KFDQg+rSzZUQ==", + "dev": true + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "requires": { + "rsvp": "^4.8.4" + } + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz", + "integrity": "sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "catbuffer-typescript": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/catbuffer-typescript/-/catbuffer-typescript-0.1.1.tgz", + "integrity": "sha512-r/z3UKG3YCCdsTEHRXGe3IQxA8OaBRBE31e9du2LOaLStGxYCmxUjfRtJ/DyKfgpS55fJPl3w/VFMnsfwIHmkA==" + }, + "ccount": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.4.tgz", + "integrity": "sha512-fpZ81yYfzentuieinmGnphk0pLkOTMm6MZdVqwd77ROvhko6iujLNGrHH5E7utq3ygWklwfmwuG+A7P+NpqT6w==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, + "character-entities": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.3.tgz", + "integrity": "sha512-yB4oYSAa9yLcGyTbB4ItFwHw43QHdH129IJ5R+WvxOkWlyFnR5FAaBNnUq4mcxsTVZGh28bHoeTHMKXH1wZf3w==", + "dev": true + }, + "character-entities-html4": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.3.tgz", + "integrity": "sha512-SwnyZ7jQBCRHELk9zf2CN5AnGEc2nA+uKMZLHvcqhpPprjkYhiLn0DywMHgN5ttFZuITMATbh68M6VIVKwJbcg==", + "dev": true + }, + "character-entities-legacy": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz", + "integrity": "sha512-YAxUpPoPwxYFsslbdKkhrGnXAtXoHNgYjlBM3WMXkWGTl5RsY3QmOyhwAgL8Nxm9l5LBThXGawxKPn68y6/fww==", + "dev": true + }, + "character-reference-invalid": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz", + "integrity": "sha512-VOq6PRzQBam/8Jm6XBGk2fNEnHXAdGd6go0rtd4weAGECBamHDwwCQSOT12TACIYUZegUXnV6xBXqUssijtxIg==", + "dev": true + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true, + "optional": true + }, + "chart.js": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.3.tgz", + "integrity": "sha512-+2jlOobSk52c1VU6fzkh3UwqHMdSlgH1xFv9FKMqHiNCpXsGPQa/+81AFa+i3jZ253Mq9aAycPwDjnn1XbRNNw==", + "requires": { + "chartjs-color": "^2.1.0", + "moment": "^2.10.2" + } + }, + "chartjs-color": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz", + "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==", + "requires": { + "chartjs-color-string": "^0.6.0", + "color-convert": "^1.9.3" + } + }, + "chartjs-color-string": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz", + "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==", + "requires": { + "color-name": "^1.0.0" + } + }, + "check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=", + "dev": true + }, + "check-types": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz", + "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==", + "dev": true + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true, + "optional": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-highlight": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.4.tgz", + "integrity": "sha512-s7Zofobm20qriqDoU9sXptQx0t2R9PEgac92mENNm7xaEe1hn71IIMsXMK+6encA6WRCWWxIGQbipr3q998tlQ==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "highlight.js": "^9.6.0", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^5.1.1", + "yargs": "^15.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "cli-spinners": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.2.0.tgz", + "integrity": "sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ==", + "dev": true + }, + "cli-truncate": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", + "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", + "dev": true, + "requires": { + "slice-ansi": "0.0.4", + "string-width": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "clipboardy": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", + "dev": true, + "requires": { + "arch": "^2.1.1", + "execa": "^1.0.0", + "is-wsl": "^2.1.1" + }, + "dependencies": { + "is-wsl": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.1.1.tgz", + "integrity": "sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog==", + "dev": true + } + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "clone-regexp": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", + "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", + "dev": true, + "requires": { + "is-regexp": "^2.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collapse-white-space": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.5.tgz", + "integrity": "sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ==", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", + "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", + "dev": true, + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + }, + "dependencies": { + "mime-db": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", + "dev": true + } + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "condense-newlines": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz", + "integrity": "sha1-PemFVTE5R10yUCyDsC9gaE0kxV8=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-whitespace": "^0.3.0", + "kind-of": "^3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "consola": { + "version": "2.11.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.11.3.tgz", + "integrity": "sha512-aoW0YIIAmeftGR8GSpw6CGQluNdkWMWh3yEFjH/hmynTYnMtibXszii3lxCXmk8YxJtI3FAK5aTiquA5VH68Gw==" + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "dev": true, + "requires": { + "bluebird": "^3.1.1" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "copy-webpack-plugin": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz", + "integrity": "sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==", + "dev": true, + "requires": { + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "globby": "^7.1.1", + "is-glob": "^4.0.0", + "loader-utils": "^1.1.0", + "minimatch": "^3.0.4", + "p-limit": "^1.0.0", + "serialize-javascript": "^1.4.0" + }, + "dependencies": { + "cacache": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" + } + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" + } + }, + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "mississippi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "serialize-javascript": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", + "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "ssri": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "requires": { + "boom": "2.x.x" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "crypto-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz", + "integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg==" + }, + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + } + }, + "css-loader": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.1.tgz", + "integrity": "sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "css-selector-tokenizer": "^0.7.0", + "icss-utils": "^2.1.0", + "loader-utils": "^1.0.2", + "lodash": "^4.17.11", + "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", + "postcss-modules-values": "^1.3.0", + "postcss-value-parser": "^3.3.0", + "source-list-map": "^2.0.0" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "css-selector-tokenizer": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz", + "integrity": "sha512-yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2", + "regexpu-core": "^4.6.0" + } + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dev": true, + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-what": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz", + "integrity": "sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "cssnano-preset-default": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "dev": true, + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", + "postcss-unique-selectors": "^4.0.1" + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "dev": true + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "dev": true + }, + "csso": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz", + "integrity": "sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==", + "dev": true, + "requires": { + "css-tree": "1.0.0-alpha.37" + } + }, + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "cssstyle": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", + "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", + "dev": true, + "requires": { + "cssom": "0.3.x" + } + }, + "current-script-polyfill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/current-script-polyfill/-/current-script-polyfill-1.0.0.tgz", + "integrity": "sha1-8xz35PPiGLBybnOMqSoC00iO9hU=", + "dev": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "cypress": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-3.8.3.tgz", + "integrity": "sha512-I9L/d+ilTPPA4vq3NC1OPKmw7jJIpMKNdyfR8t1EXYzYCjyqbc59migOm1YSse/VRbISLJ+QGb5k4Y3bz2lkYw==", + "dev": true, + "requires": { + "@cypress/listr-verbose-renderer": "0.4.1", + "@cypress/xvfb": "1.2.4", + "@types/sizzle": "2.3.2", + "arch": "2.1.1", + "bluebird": "3.5.0", + "cachedir": "1.3.0", + "chalk": "2.4.2", + "check-more-types": "2.24.0", + "commander": "2.15.1", + "common-tags": "1.8.0", + "debug": "3.2.6", + "eventemitter2": "4.1.2", + "execa": "0.10.0", + "executable": "4.1.1", + "extract-zip": "1.6.7", + "fs-extra": "5.0.0", + "getos": "3.1.1", + "is-ci": "1.2.1", + "is-installed-globally": "0.1.0", + "lazy-ass": "1.6.0", + "listr": "0.12.0", + "lodash": "4.17.15", + "log-symbols": "2.2.0", + "minimist": "1.2.0", + "moment": "2.24.0", + "ramda": "0.24.1", + "request": "2.88.0", + "request-progress": "3.0.0", + "supports-color": "5.5.0", + "tmp": "0.1.0", + "untildify": "3.0.3", + "url": "0.11.0", + "yauzl": "2.10.0" + }, + "dependencies": { + "bluebird": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=", + "dev": true + }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "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" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "tmp": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", + "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", + "dev": true, + "requires": { + "rimraf": "^2.6.3" + } + } + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + }, + "dependencies": { + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } + }, + "date-fns": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", + "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", + "dev": true + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + } + }, + "decimal.js": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.0.tgz", + "integrity": "sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw==", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", + "dev": true + }, + "default-gateway": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-5.0.5.tgz", + "integrity": "sha512-z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA==", + "dev": true, + "requires": { + "execa": "^3.3.0" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", + "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "dependencies": { + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "requires": { + "repeating": "^2.0.0" + } + }, + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "dev": true + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "dev": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + }, + "diff-sequences": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", + "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } + } + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "optional": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "webidl-conversions": "^4.0.2" + } + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dotenv": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", + "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "easy-stack": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.0.tgz", + "integrity": "sha1-EskbMIWjfwuqM26UhurEv5Tj54g=", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "editorconfig": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", + "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", + "dev": true, + "requires": { + "commander": "^2.19.0", + "lru-cache": "^4.1.5", + "semver": "^5.6.0", + "sigmund": "^1.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.208", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.208.tgz", + "integrity": "sha512-ljgZXaKSfRg32jEl1V8zRJaT3u653jxfZRztKQWM/I1kE+ifBCQKRY+jOPzb4JS48a4czvT/LQfjdiDq5qjU4g==", + "dev": true + }, + "elegant-spinner": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", + "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "dev": true, + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", + "dev": true, + "requires": { + "stackframe": "^1.1.1" + } + }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "eslint": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.9.1", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.3", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.1", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.2.2", + "js-yaml": "^3.13.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0" + }, + "dependencies": { + "acorn": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", + "dev": true + }, + "acorn-jsx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "dev": true + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "espree": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "dev": true, + "requires": { + "acorn": "^6.0.7", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", + "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "inquirer": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.0.tgz", + "integrity": "sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + } + } + }, + "table": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.5.tgz", + "integrity": "sha512-oGa2Hl7CQjfoaogtrOHEJroOcYILTx7BZWLGsJIlzoWmB2zmguhNfPJZsWPKYek/MgCxfco54gEi31d1uN2hFA==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + } + } + }, + "eslint-config-standard": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz", + "integrity": "sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==", + "dev": true + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-loader": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz", + "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==", + "dev": true, + "requires": { + "loader-fs-cache": "^1.0.0", + "loader-utils": "^1.0.2", + "object-assign": "^4.0.1", + "object-hash": "^1.1.4", + "rimraf": "^2.6.1" + } + }, + "eslint-module-utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz", + "integrity": "sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==", + "dev": true, + "requires": { + "debug": "^2.6.8", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + } + } + }, + "eslint-plugin-cypress": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.10.3.tgz", + "integrity": "sha512-CvFeoCquShfO8gHNIKA1VpUTz78WtknMebLemBd1lRbcmJNjwpqCqpQYUG/XVja8GjdX/e2TJXYa+EUBxehtUg==", + "dev": true, + "requires": { + "globals": "^11.12.0" + } + }, + "eslint-plugin-es": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz", + "integrity": "sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw==", + "dev": true, + "requires": { + "eslint-utils": "^1.3.0", + "regexpp": "^2.0.1" + }, + "dependencies": { + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + } + } + }, + "eslint-plugin-import": { + "version": "2.18.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz", + "integrity": "sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.2", + "eslint-module-utils": "^2.4.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.0", + "read-pkg-up": "^2.0.0", + "resolve": "^1.11.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-plugin-node": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz", + "integrity": "sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w==", + "dev": true, + "requires": { + "eslint-plugin-es": "^1.3.1", + "eslint-utils": "^1.3.1", + "ignore": "^5.0.2", + "minimatch": "^3.0.4", + "resolve": "^1.8.1", + "semver": "^5.5.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.2.tgz", + "integrity": "sha512-vdqWBp7MyzdmHkkRWV5nY+PfGRbYbahfuvsBCh277tq+w9zyNi7h5CYJCK0kmzti9kU+O/cB7sE8HvKv6aXAKQ==", + "dev": true + } + } + }, + "eslint-plugin-promise": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz", + "integrity": "sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==", + "dev": true + }, + "eslint-plugin-standard": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.0.tgz", + "integrity": "sha512-OwxJkR6TQiYMmt1EsNRMe5qG3GsbjlcOhbGUBY4LtavF9DsLaTcoR+j2Tdjqi23oUwKNUqX7qcn5fPStafMdlA==", + "dev": true + }, + "eslint-plugin-vue": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-5.2.3.tgz", + "integrity": "sha512-mGwMqbbJf0+VvpGR5Lllq0PMxvTdrZ/ZPjmhkacrCHbubJeJOt+T6E3HUzAifa2Mxi7RSdJfC9HFpOeSYVMMIw==", + "dev": true, + "requires": { + "vue-eslint-parser": "^5.0.0" + }, + "dependencies": { + "acorn": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", + "dev": true + }, + "acorn-jsx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "dev": true + }, + "espree": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", + "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", + "dev": true, + "requires": { + "acorn": "^6.0.2", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "vue-eslint-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-5.0.0.tgz", + "integrity": "sha512-JlHVZwBBTNVvzmifwjpZYn0oPWH2SgWv5dojlZBsrhablDu95VFD+hriB1rQGwbD+bms6g+rAFhQHk6+NyiS6g==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "eslint-scope": "^4.0.0", + "eslint-visitor-keys": "^1.0.0", + "espree": "^4.1.0", + "esquery": "^1.0.1", + "lodash": "^4.17.11" + }, + "dependencies": { + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true + } + } + } + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", + "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.0.0" + } + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "espree": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "optional": true, + "requires": { + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true, + "optional": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-pubsub": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz", + "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", + "dev": true + }, + "eventemitter2": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-4.1.2.tgz", + "integrity": "sha1-DhqEd6+CGm7zmVsxG/dMI6UkfxU=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", + "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==", + "dev": true + }, + "events": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "dev": true + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "dev": true, + "requires": { + "original": "^1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "exec-sh": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", + "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", + "dev": true + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.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" + } + }, + "execall": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", + "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", + "dev": true, + "requires": { + "clone-regexp": "^2.1.0" + } + }, + "executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "requires": { + "pify": "^2.2.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "optional": true, + "requires": { + "fill-range": "^2.1.0" + }, + "dependencies": { + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "optional": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "optional": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "optional": true, + "requires": { + "isarray": "1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "expect": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", + "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "ansi-styles": "^3.2.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.9.0" + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "optional": true, + "requires": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extract-from-css": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/extract-from-css/-/extract-from-css-0.4.4.tgz", + "integrity": "sha1-HqffLnx8brmSL6COitrqSG9vj5I=", + "dev": true, + "requires": { + "css": "^2.1.0" + } + }, + "extract-zip": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", + "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", + "dev": true, + "requires": { + "concat-stream": "1.6.2", + "debug": "2.6.9", + "mkdirp": "0.5.1", + "yauzl": "2.4.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "yauzl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "dev": true, + "requires": { + "fd-slicer": "~1.0.1" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + } + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "dev": true + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "optional": true, + "requires": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + } + }, + "file-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz", + "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==", + "dev": true, + "requires": { + "loader-utils": "^1.0.2", + "schema-utils": "^1.0.0" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "optional": true + }, + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-babel-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", + "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", + "dev": true, + "requires": { + "json5": "^0.5.1", + "path-exists": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flat-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "dev": true, + "optional": true, + "requires": { + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" + } + }, + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "dev": true + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.10.0.tgz", + "integrity": "sha512-4eyLK6s6lH32nOvLLwlIOnr9zrL8Sm+OvW4pVTJNoXeGzYIkHVf+pADQi+OJ0E67hiuSLezPVPyBcIZO50TmmQ==", + "requires": { + "debug": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "optional": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-extra": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", + "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", + "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1", + "node-pre-gyp": "*" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "optional": true + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "optional": true + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "optional": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "optional": true + }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "optional": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "optional": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "optional": true, + "requires": { + "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" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "optional": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "optional": true + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "optional": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz", + "integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==", + "optional": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "optional": true + }, + "needle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.3.tgz", + "integrity": "sha512-EkY0GeSq87rWp1hoq/sH/wnTWgFVhYlnIkbJ0YJFfRgEFlz2RraCjBpFQ+vrEgEdp0ThfyHADmkChEhcb7PKyw==", + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz", + "integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==", + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4.4.2" + } + }, + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", + "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "optional": true + }, + "npm-packlist": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "optional": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "optional": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "optional": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "optional": true + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "optional": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "optional": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "optional": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "optional": true + }, + "tar": { + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "optional": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "optional": true + } + } + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "futoin-hkdf": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/futoin-hkdf/-/futoin-hkdf-1.3.3.tgz", + "integrity": "sha512-oR75fYk3B3X9/B02Y6vusrBKucrpC6VjxhRL+C6B7FwUpuSRHbhBNG3AZbcE/xPyJmEQWsyqUFp3VeNNbA3S7A==" + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "requires": { + "globule": "^1.0.0" + } + }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "getos": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.1.1.tgz", + "integrity": "sha512-oUP1rnEhAr97rkitiszGP9EgDVYnmchgFzfqRzSkgtfv7ai6tEi7Ko8GgjNXts7VLWEqrTWyhsOKLe5C5b/Zkg==", + "dev": true, + "requires": { + "async": "2.6.1" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "requires": { + "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" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "optional": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "optional": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "optional": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "optional": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } + } + }, + "globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", + "dev": true + }, + "globule": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.1.tgz", + "integrity": "sha512-OVyWOHgw29yosRHCHo7NncwR1hW5ew0W/UrvtwvjefVJeQ26q4/8r8FmPsSF1hJ93IgWkyv16pCTz6WblMzm/g==", + "dev": true, + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.12", + "minimatch": "~3.0.2" + } + }, + "gonzales-pe": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "graceful-fs": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", + "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==" + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "pify": "^4.0.1" + } + }, + "handle-thing": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", + "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "requires": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "highlight.js": { + "version": "9.18.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.1.tgz", + "integrity": "sha512-OrVKYz70LHsnCgmbXctv/bfuvntIKDz177h0Co37DQ5jamGZLVmoCVMtjMtNZY3X9DrCcKfklHPNeA0uPZhSJg==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + } + }, + "hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "dev": true + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", + "dev": true + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "dev": true, + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + } + } + }, + "html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "dev": true + }, + "html-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", + "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", + "dev": true, + "requires": { + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "tapable": "^1.0.0", + "toposort": "^1.0.0", + "util.promisify": "1.0.0" + }, + "dependencies": { + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + } + } + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=" + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "icss-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", + "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "dev": true, + "requires": { + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "requires": { + "import-from": "^2.1.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "dependencies": { + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "in-publish": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz", + "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dev": true, + "optional": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "dependencies": { + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + } + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-alphabetical": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.3.tgz", + "integrity": "sha512-eEMa6MKpHFzw38eKm56iNNi6GJ7lf6aLLio7Kr23sJPAECscgRtZvOBYybejWDQ2bM949Y++61PY+udzj5QMLA==", + "dev": true + }, + "is-alphanumeric": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", + "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", + "dev": true + }, + "is-alphanumerical": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.3.tgz", + "integrity": "sha512-A1IGAPO5AW9vSh7omxIlOGwIqEvpW/TA+DksVOPM5ODuxKlZS09+TEM1E3275lJqO2oJ38vDpeAL3DCIiHE6eA==", + "dev": true, + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, + "requires": { + "ci-info": "^1.5.0" + } + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "requires": { + "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": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-decimal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.3.tgz", + "integrity": "sha512-bvLSwoDg2q6Gf+E2LEPiklHZxxiSi3XAh4Mav65mKqTfCO1HM3uBs24TjEH8iJX3bbDdLXKJXBTmGzuTUuAEjQ==", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-docker": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.0.0.tgz", + "integrity": "sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==", + "dev": true, + "optional": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "optional": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "optional": true, + "requires": { + "is-primitive": "^2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz", + "integrity": "sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA==", + "dev": true + }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "requires": { + "is-path-inside": "^2.1.0" + }, + "dependencies": { + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "requires": { + "path-is-inside": "^1.0.2" + } + } + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "optional": true + }, + "is-potential-custom-element-name": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", + "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "optional": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-regexp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", + "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", + "dev": true + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "dev": true, + "requires": { + "html-comment-regex": "^1.1.0" + } + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-whitespace": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz", + "integrity": "sha1-Fjnssb4DauxppUy7QBz77XEUq38=", + "dev": true + }, + "is-whitespace-character": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.3.tgz", + "integrity": "sha512-SNPgMLz9JzPccD3nPctcj8sZlX9DAMJSKH8bP7Z6bohCwuNgX8xbWr1eTAYXX9Vpi/aSn8Y1akL9WgM3t43YNQ==", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is-word-character": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.3.tgz", + "integrity": "sha512-0wfcrFgOOOBdgRNT9H33xe6Zi6yhX/uoc4U8NBZGeQQB0ctU1dnlNTyL9JM2646bHDTpsDm1Brb3VPoCIMrd/A==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "dev": true, + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + }, + "dependencies": { + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "dev": true, + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + } + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "dev": true, + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", + "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0" + } + }, + "javascript-stringify": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-1.6.0.tgz", + "integrity": "sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=", + "dev": true + }, + "jest": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-26.1.0.tgz", + "integrity": "sha512-LIti8jppw5BcQvmNJe4w2g1N/3V68HUfAv9zDVm7v+VAtQulGhH0LnmmiVkbNE4M4I43Bj2fXPiBGKt26k9tHw==", + "dev": true, + "requires": { + "@jest/core": "^26.1.0", + "import-local": "^3.0.2", + "jest-cli": "^26.1.0" + }, + "dependencies": { + "@babel/generator": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.3.tgz", + "integrity": "sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-function-name": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz", + "integrity": "sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.10.3", + "@babel/template": "^7.10.3", + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz", + "integrity": "sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.3.tgz", + "integrity": "sha512-q7+37c4EPLSjNb2NmWOjNwj0+BOyYlssuQ58kHEWk1Z78K5i8vTUsteq78HMieRPQSl/NtpQyJfdjt3qZ5V2vw==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-module-imports": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.3.tgz", + "integrity": "sha512-Jtqw5M9pahLSUWA+76nhK9OG8nwYXzhQzVIGFoNaHnXF/r4l7kz4Fl0UAW7B6mqC5myoJiBP5/YQlXQTMfHI9w==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-module-transforms": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz", + "integrity": "sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.1", + "@babel/helper-replace-supers": "^7.10.1", + "@babel/helper-simple-access": "^7.10.1", + "@babel/helper-split-export-declaration": "^7.10.1", + "@babel/template": "^7.10.1", + "@babel/types": "^7.10.1", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.3.tgz", + "integrity": "sha512-kT2R3VBH/cnSz+yChKpaKRJQJWxdGoc6SjioRId2wkeV3bK0wLLioFpJROrX0U4xr/NmxSSAWT/9Ih5snwIIzg==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-replace-supers": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz", + "integrity": "sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.10.1", + "@babel/helper-optimise-call-expression": "^7.10.1", + "@babel/traverse": "^7.10.1", + "@babel/types": "^7.10.1" + } + }, + "@babel/helper-simple-access": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz", + "integrity": "sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw==", + "dev": true, + "requires": { + "@babel/template": "^7.10.1", + "@babel/types": "^7.10.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", + "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", + "dev": true, + "requires": { + "@babel/types": "^7.10.1" + } + }, + "@babel/helpers": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.1.tgz", + "integrity": "sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw==", + "dev": true, + "requires": { + "@babel/template": "^7.10.1", + "@babel/traverse": "^7.10.1", + "@babel/types": "^7.10.1" + } + }, + "@babel/highlight": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz", + "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.3", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.3.tgz", + "integrity": "sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA==", + "dev": true + }, + "@babel/template": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.3.tgz", + "integrity": "sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.3", + "@babel/parser": "^7.10.3", + "@babel/types": "^7.10.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz", + "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.3" + } + } + } + }, + "@babel/traverse": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.3.tgz", + "integrity": "sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.3", + "@babel/generator": "^7.10.3", + "@babel/helper-function-name": "^7.10.3", + "@babel/helper-split-export-declaration": "^7.10.1", + "@babel/parser": "^7.10.3", + "@babel/types": "^7.10.3", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz", + "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.3" + } + } + } + }, + "@babel/types": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz", + "integrity": "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.3", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@jest/console": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.1.0.tgz", + "integrity": "sha512-+0lpTHMd/8pJp+Nd4lyip+/Iyf2dZJvcCqrlkeZQoQid+JlThA4M9vxHtheyrQ99jJTMQam+es4BcvZ5W5cC3A==", + "dev": true, + "requires": { + "@jest/types": "^26.1.0", + "chalk": "^4.0.0", + "jest-message-util": "^26.1.0", + "jest-util": "^26.1.0", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.1.0.tgz", + "integrity": "sha512-zyizYmDJOOVke4OO/De//aiv8b07OwZzL2cfsvWF3q9YssfpcKfcnZAwDY8f+A76xXSMMYe8i/f/LPocLlByfw==", + "dev": true, + "requires": { + "@jest/console": "^26.1.0", + "@jest/reporters": "^26.1.0", + "@jest/test-result": "^26.1.0", + "@jest/transform": "^26.1.0", + "@jest/types": "^26.1.0", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^26.1.0", + "jest-config": "^26.1.0", + "jest-haste-map": "^26.1.0", + "jest-message-util": "^26.1.0", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.1.0", + "jest-resolve-dependencies": "^26.1.0", + "jest-runner": "^26.1.0", + "jest-runtime": "^26.1.0", + "jest-snapshot": "^26.1.0", + "jest-util": "^26.1.0", + "jest-validate": "^26.1.0", + "jest-watcher": "^26.1.0", + "micromatch": "^4.0.2", + "p-each-series": "^2.1.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "@jest/environment": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.1.0.tgz", + "integrity": "sha512-86+DNcGongbX7ai/KE/S3/NcUVZfrwvFzOOWX/W+OOTvTds7j07LtC+MgGydH5c8Ri3uIrvdmVgd1xFD5zt/xA==", + "dev": true, + "requires": { + "@jest/fake-timers": "^26.1.0", + "@jest/types": "^26.1.0", + "jest-mock": "^26.1.0" + } + }, + "@jest/fake-timers": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.1.0.tgz", + "integrity": "sha512-Y5F3kBVWxhau3TJ825iuWy++BAuQzK/xEa+wD9vDH3RytW9f2DbMVodfUQC54rZDX3POqdxCgcKdgcOL0rYUpA==", + "dev": true, + "requires": { + "@jest/types": "^26.1.0", + "@sinonjs/fake-timers": "^6.0.1", + "jest-message-util": "^26.1.0", + "jest-mock": "^26.1.0", + "jest-util": "^26.1.0" + } + }, + "@jest/reporters": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.1.0.tgz", + "integrity": "sha512-SVAysur9FOIojJbF4wLP0TybmqwDkdnFxHSPzHMMIYyBtldCW9gG+Q5xWjpMFyErDiwlRuPyMSJSU64A67Pazg==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^26.1.0", + "@jest/test-result": "^26.1.0", + "@jest/transform": "^26.1.0", + "@jest/types": "^26.1.0", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^26.1.0", + "jest-resolve": "^26.1.0", + "jest-util": "^26.1.0", + "jest-worker": "^26.1.0", + "node-notifier": "^7.0.0", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^4.1.3" + } + }, + "@jest/source-map": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.1.0.tgz", + "integrity": "sha512-XYRPYx4eEVX15cMT9mstnO7hkHP3krNtKfxUYd8L7gbtia8JvZZ6bMzSwa6IQJENbudTwKMw5R1BePRD+bkEmA==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.1.0.tgz", + "integrity": "sha512-Xz44mhXph93EYMA8aYDz+75mFbarTV/d/x0yMdI3tfSRs/vh4CqSxgzVmCps1fPkHDCtn0tU8IH9iCKgGeGpfw==", + "dev": true, + "requires": { + "@jest/console": "^26.1.0", + "@jest/types": "^26.1.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.1.0.tgz", + "integrity": "sha512-Z/hcK+rTq56E6sBwMoQhSRDVjqrGtj1y14e2bIgcowARaIE1SgOanwx6gvY4Q9gTKMoZQXbXvptji+q5GYxa6Q==", + "dev": true, + "requires": { + "@jest/test-result": "^26.1.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.1.0", + "jest-runner": "^26.1.0", + "jest-runtime": "^26.1.0" + } + }, + "@jest/transform": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.1.0.tgz", + "integrity": "sha512-ICPm6sUXmZJieq45ix28k0s+d/z2E8CHDsq+WwtWI6kW8m7I8kPqarSEcUN86entHQ570ZBRci5OWaKL0wlAWw==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^26.1.0", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.1.0", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.1.0", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + } + }, + "@jest/types": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.1.0.tgz", + "integrity": "sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "15.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.5.tgz", + "integrity": "sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "acorn": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz", + "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==", + "dev": true + }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "dev": true, + "requires": { + "type-fest": "^0.11.0" + }, + "dependencies": { + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true + } + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "babel-plugin-istanbul": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", + "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^4.0.0", + "test-exclude": "^6.0.0" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.0.0.tgz", + "integrity": "sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==", + "dev": true + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } + } + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "diff-sequences": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.0.0.tgz", + "integrity": "sha512-JC/eHYEC3aSS0vZGjuoc4vHA0yAQTzhQQldXMeMF+JlxLGJlCO38Gma82NV9gk1jGFz8mDzUMeaKXvjRRdJ2dg==", + "dev": true + }, + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true + } + } + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + }, + "execa": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.0.2.tgz", + "integrity": "sha512-QI2zLa6CjGWdiQsmSkZoGtDx2N+cQIGb3yNolGTdjSQzydzLgYYf8LRuagp7S7fPimjcrzUDSUFd/MgzELMi4Q==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "expect": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-26.1.0.tgz", + "integrity": "sha512-QbH4LZXDsno9AACrN9eM0zfnby9G+OsdNgZUohjg/P0mLy1O+/bzTAJGT6VSIjVCe8yKM6SzEl/ckEOFBT7Vnw==", + "dev": true, + "requires": { + "@jest/types": "^26.1.0", + "ansi-styles": "^4.0.0", + "jest-get-type": "^26.0.0", + "jest-matcher-utils": "^26.1.0", + "jest-message-util": "^26.1.0", + "jest-regex-util": "^26.0.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, + "import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "optional": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz", + "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.3" + } + }, + "@babel/core": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.3.tgz", + "integrity": "sha512-5YqWxYE3pyhIi84L84YcwjeEgS+fa7ZjK6IBVGTjDVfm64njkR2lfDhVR5OudLk8x2GK59YoSyVv+L/03k1q9w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.3", + "@babel/generator": "^7.10.3", + "@babel/helper-module-transforms": "^7.10.1", + "@babel/helpers": "^7.10.1", + "@babel/parser": "^7.10.3", + "@babel/template": "^7.10.3", + "@babel/traverse": "^7.10.3", + "@babel/types": "^7.10.3", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jest-changed-files": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.1.0.tgz", + "integrity": "sha512-HS5MIJp3B8t0NRKGMCZkcDUZo36mVRvrDETl81aqljT1S9tqiHRSpyoOvWg9ZilzZG9TDisDNaN1IXm54fLRZw==", + "dev": true, + "requires": { + "@jest/types": "^26.1.0", + "execa": "^4.0.0", + "throat": "^5.0.0" + } + }, + "jest-cli": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.1.0.tgz", + "integrity": "sha512-Imumvjgi3rU7stq6SJ1JUEMaV5aAgJYXIs0jPqdUnF47N/Tk83EXfmtvNKQ+SnFVI6t6mDOvfM3aA9Sg6kQPSw==", + "dev": true, + "requires": { + "@jest/core": "^26.1.0", + "@jest/test-result": "^26.1.0", + "@jest/types": "^26.1.0", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^26.1.0", + "jest-util": "^26.1.0", + "jest-validate": "^26.1.0", + "prompts": "^2.0.1", + "yargs": "^15.3.1" + } + }, + "jest-config": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.1.0.tgz", + "integrity": "sha512-ONTGeoMbAwGCdq4WuKkMcdMoyfs5CLzHEkzFOlVvcDXufZSaIWh/OXMLa2fwKXiOaFcqEw8qFr4VOKJQfn4CVw==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^26.1.0", + "@jest/types": "^26.1.0", + "babel-jest": "^26.1.0", + "chalk": "^4.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^26.1.0", + "jest-environment-node": "^26.1.0", + "jest-get-type": "^26.0.0", + "jest-jasmine2": "^26.1.0", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.1.0", + "jest-util": "^26.1.0", + "jest-validate": "^26.1.0", + "micromatch": "^4.0.2", + "pretty-format": "^26.1.0" + } + }, + "jest-diff": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.1.0.tgz", + "integrity": "sha512-GZpIcom339y0OXznsEKjtkfKxNdg7bVbEofK8Q6MnevTIiR1jNhDWKhRX6X0SDXJlwn3dy59nZ1z55fLkAqPWg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^26.0.0", + "jest-get-type": "^26.0.0", + "pretty-format": "^26.1.0" + } + }, + "jest-docblock": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", + "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.1.0.tgz", + "integrity": "sha512-lYiSo4Igr81q6QRsVQq9LIkJW0hZcKxkIkHzNeTMPENYYDw/W/Raq28iJ0sLlNFYz2qxxeLnc5K2gQoFYlu2bA==", + "dev": true, + "requires": { + "@jest/types": "^26.1.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.0.0", + "jest-util": "^26.1.0", + "pretty-format": "^26.1.0" + } + }, + "jest-environment-jsdom": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.1.0.tgz", + "integrity": "sha512-dWfiJ+spunVAwzXbdVqPH1LbuJW/kDL+FyqgA5YzquisHqTi0g9hquKif9xKm7c1bKBj6wbmJuDkeMCnxZEpUw==", + "dev": true, + "requires": { + "@jest/environment": "^26.1.0", + "@jest/fake-timers": "^26.1.0", + "@jest/types": "^26.1.0", + "jest-mock": "^26.1.0", + "jest-util": "^26.1.0", + "jsdom": "^16.2.2" + } + }, + "jest-environment-node": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.1.0.tgz", + "integrity": "sha512-DNm5x1aQH0iRAe9UYAkZenuzuJ69VKzDCAYISFHQ5i9e+2Tbeu2ONGY7YStubCLH8a1wdKBgqScYw85+ySxqxg==", + "dev": true, + "requires": { + "@jest/environment": "^26.1.0", + "@jest/fake-timers": "^26.1.0", + "@jest/types": "^26.1.0", + "jest-mock": "^26.1.0", + "jest-util": "^26.1.0" + } + }, + "jest-get-type": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.0.0.tgz", + "integrity": "sha512-zRc1OAPnnws1EVfykXOj19zo2EMw5Hi6HLbFCSjpuJiXtOWAYIjNsHVSbpQ8bDX7L5BGYGI8m+HmKdjHYFF0kg==", + "dev": true + }, + "jest-haste-map": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.1.0.tgz", + "integrity": "sha512-WeBS54xCIz9twzkEdm6+vJBXgRBQfdbbXD0dk8lJh7gLihopABlJmIQFdWSDDtuDe4PRiObsjZSUjbJ1uhWEpA==", + "dev": true, + "requires": { + "@jest/types": "^26.1.0", + "@types/graceful-fs": "^4.1.2", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.1.2", + "graceful-fs": "^4.2.4", + "jest-serializer": "^26.1.0", + "jest-util": "^26.1.0", + "jest-worker": "^26.1.0", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7", + "which": "^2.0.2" + } + }, + "jest-jasmine2": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.1.0.tgz", + "integrity": "sha512-1IPtoDKOAG+MeBrKvvuxxGPJb35MTTRSDglNdWWCndCB3TIVzbLThRBkwH9P081vXLgiJHZY8Bz3yzFS803xqQ==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^26.1.0", + "@jest/source-map": "^26.1.0", + "@jest/test-result": "^26.1.0", + "@jest/types": "^26.1.0", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^26.1.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^26.1.0", + "jest-matcher-utils": "^26.1.0", + "jest-message-util": "^26.1.0", + "jest-runtime": "^26.1.0", + "jest-snapshot": "^26.1.0", + "jest-util": "^26.1.0", + "pretty-format": "^26.1.0", + "throat": "^5.0.0" + } + }, + "jest-leak-detector": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.1.0.tgz", + "integrity": "sha512-dsMnKF+4BVOZwvQDlgn3MG+Ns4JuLv8jNvXH56bgqrrboyCbI1rQg6EI5rs+8IYagVcfVP2yZFKfWNZy0rK0Hw==", + "dev": true, + "requires": { + "jest-get-type": "^26.0.0", + "pretty-format": "^26.1.0" + } + }, + "jest-matcher-utils": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.1.0.tgz", + "integrity": "sha512-PW9JtItbYvES/xLn5mYxjMd+Rk+/kIt88EfH3N7w9KeOrHWaHrdYPnVHndGbsFGRJ2d5gKtwggCvkqbFDoouQA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^26.1.0", + "jest-get-type": "^26.0.0", + "pretty-format": "^26.1.0" + } + }, + "jest-message-util": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.1.0.tgz", + "integrity": "sha512-dY0+UlldiAJwNDJ08SF0HdF32g9PkbF2NRK/+2iMPU40O6q+iSn1lgog/u0UH8ksWoPv0+gNq8cjhYO2MFtT0g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.1.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + } + }, + "jest-mock": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.1.0.tgz", + "integrity": "sha512-1Rm8EIJ3ZFA8yCIie92UbxZWj9SuVmUGcyhLHyAhY6WI3NIct38nVcfOPWhJteqSn8V8e3xOMha9Ojfazfpovw==", + "dev": true, + "requires": { + "@jest/types": "^26.1.0" + } + }, + "jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "dev": true + }, + "jest-resolve": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.1.0.tgz", + "integrity": "sha512-KsY1JV9FeVgEmwIISbZZN83RNGJ1CC+XUCikf/ZWJBX/tO4a4NvA21YixokhdR9UnmPKKAC4LafVixJBrwlmfg==", + "dev": true, + "requires": { + "@jest/types": "^26.1.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.1", + "jest-util": "^26.1.0", + "read-pkg-up": "^7.0.1", + "resolve": "^1.17.0", + "slash": "^3.0.0" + }, + "dependencies": { + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "jest-resolve-dependencies": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.1.0.tgz", + "integrity": "sha512-fQVEPHHQ1JjHRDxzlLU/buuQ9om+hqW6Vo928aa4b4yvq4ZHBtRSDsLdKQLuCqn5CkTVpYZ7ARh2fbA8WkRE6g==", + "dev": true, + "requires": { + "@jest/types": "^26.1.0", + "jest-regex-util": "^26.0.0", + "jest-snapshot": "^26.1.0" + } + }, + "jest-runner": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.1.0.tgz", + "integrity": "sha512-elvP7y0fVDREnfqit0zAxiXkDRSw6dgCkzPCf1XvIMnSDZ8yogmSKJf192dpOgnUVykmQXwYYJnCx641uLTgcw==", + "dev": true, + "requires": { + "@jest/console": "^26.1.0", + "@jest/environment": "^26.1.0", + "@jest/test-result": "^26.1.0", + "@jest/types": "^26.1.0", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^26.1.0", + "jest-docblock": "^26.0.0", + "jest-haste-map": "^26.1.0", + "jest-jasmine2": "^26.1.0", + "jest-leak-detector": "^26.1.0", + "jest-message-util": "^26.1.0", + "jest-resolve": "^26.1.0", + "jest-runtime": "^26.1.0", + "jest-util": "^26.1.0", + "jest-worker": "^26.1.0", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" + } + }, + "jest-runtime": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.1.0.tgz", + "integrity": "sha512-1qiYN+EZLmG1QV2wdEBRf+Ci8i3VSfIYLF02U18PiUDrMbhfpN/EAMMkJtT02jgJUoaEOpHAIXG6zS3QRMzRmA==", + "dev": true, + "requires": { + "@jest/console": "^26.1.0", + "@jest/environment": "^26.1.0", + "@jest/fake-timers": "^26.1.0", + "@jest/globals": "^26.1.0", + "@jest/source-map": "^26.1.0", + "@jest/test-result": "^26.1.0", + "@jest/transform": "^26.1.0", + "@jest/types": "^26.1.0", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^26.1.0", + "jest-haste-map": "^26.1.0", + "jest-message-util": "^26.1.0", + "jest-mock": "^26.1.0", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.1.0", + "jest-snapshot": "^26.1.0", + "jest-util": "^26.1.0", + "jest-validate": "^26.1.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.3.1" + } + }, + "jest-serializer": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.1.0.tgz", + "integrity": "sha512-eqZOQG/0+MHmr25b2Z86g7+Kzd5dG9dhCiUoyUNJPgiqi38DqbDEOlHcNijyfZoj74soGBohKBZuJFS18YTJ5w==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4" + } + }, + "jest-snapshot": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.1.0.tgz", + "integrity": "sha512-YhSbU7eMTVQO/iRbNs8j0mKRxGp4plo7sJ3GzOQ0IYjvsBiwg0T1o0zGQAYepza7lYHuPTrG5J2yDd0CE2YxSw==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0", + "@jest/types": "^26.1.0", + "@types/prettier": "^2.0.0", + "chalk": "^4.0.0", + "expect": "^26.1.0", + "graceful-fs": "^4.2.4", + "jest-diff": "^26.1.0", + "jest-get-type": "^26.0.0", + "jest-haste-map": "^26.1.0", + "jest-matcher-utils": "^26.1.0", + "jest-message-util": "^26.1.0", + "jest-resolve": "^26.1.0", + "natural-compare": "^1.4.0", + "pretty-format": "^26.1.0", + "semver": "^7.3.2" + }, + "dependencies": { + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + } + } + }, + "jest-util": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.1.0.tgz", + "integrity": "sha512-rNMOwFQevljfNGvbzNQAxdmXQ+NawW/J72dmddsK0E8vgxXCMtwQ/EH0BiWEIxh0hhMcTsxwAxINt7Lh46Uzbg==", + "dev": true, + "requires": { + "@jest/types": "^26.1.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + } + }, + "jest-validate": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.1.0.tgz", + "integrity": "sha512-WPApOOnXsiwhZtmkDsxnpye+XLb/tUISP+H6cHjfUIXvlG+eKwP+isnivsxlHCPaO9Q5wvbhloIBkdF3qUn+Nw==", + "dev": true, + "requires": { + "@jest/types": "^26.1.0", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.0.0", + "leven": "^3.1.0", + "pretty-format": "^26.1.0" + } + }, + "jest-watcher": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.1.0.tgz", + "integrity": "sha512-ffEOhJl2EvAIki613oPsSG11usqnGUzIiK7MMX6hE4422aXOcVEG3ySCTDFLn1+LZNXGPE8tuJxhp8OBJ1pgzQ==", + "dev": true, + "requires": { + "@jest/test-result": "^26.1.0", + "@jest/types": "^26.1.0", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^26.1.0", + "string-length": "^4.0.1" + } + }, + "jest-worker": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.1.0.tgz", + "integrity": "sha512-Z9P5pZ6UC+kakMbNJn+tA2RdVdNX5WH1x+5UCBZ9MxIK24pjYtFt96fK+UwBTrjLYm232g1xz0L3eTh51OW+yQ==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "jsdom": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.2.2.tgz", + "integrity": "sha512-pDFQbcYtKBHxRaP55zGXCJWgFHkDAYbKcsXEK/3Icu9nKYZkutUXfLBwbD+09XDutkYSHcgfQLZ0qvpAAm9mvg==", + "dev": true, + "requires": { + "abab": "^2.0.3", + "acorn": "^7.1.1", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.2.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.0", + "domexception": "^2.0.1", + "escodegen": "^1.14.1", + "html-encoding-sniffer": "^2.0.1", + "is-potential-custom-element-name": "^1.0.0", + "nwsapi": "^2.2.0", + "parse5": "5.1.1", + "request": "^2.88.2", + "request-promise-native": "^1.0.8", + "saxes": "^5.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^3.0.1", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.0.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0", + "ws": "^7.2.3", + "xml-name-validator": "^3.0.0" + } + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "node-notifier": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-7.0.1.tgz", + "integrity": "sha512-VkzhierE7DBmQEElhTGJIoiZa1oqRijOtgOlsXg32KrJRXsPy0NXFBqWGW/wTswnJlDCs5viRYaqWguqzsKcmg==", + "dev": true, + "optional": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^2.1.1", + "semver": "^7.2.1", + "shellwords": "^0.1.1", + "uuid": "^7.0.3", + "which": "^2.0.2" + }, + "dependencies": { + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true, + "optional": true + } + } + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-each-series": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.1.0.tgz", + "integrity": "sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "pretty-format": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.1.0.tgz", + "integrity": "sha512-GmeO1PEYdM+non4BKCj+XsPJjFOJIPnsLewqhDVoqY1xo0yNmDas7tC2XwpMrRAHR3MaE2hPo37deX5OisJ2Wg==", + "dev": true, + "requires": { + "@jest/types": "^26.1.0", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^16.12.0" + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } + } + }, + "request-promise-core": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", + "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "request-promise-native": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", + "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", + "dev": true, + "requires": { + "request-promise-core": "1.1.3", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "dependencies": { + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + } + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "stack-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.2.tgz", + "integrity": "sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, + "string-length": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", + "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tough-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "dev": true, + "requires": { + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", + "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "uuid": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", + "dev": true, + "optional": true + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "requires": { + "xml-name-validator": "^3.0.0" + } + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true + }, + "whatwg-url": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.1.0.tgz", + "integrity": "sha512-vEIkwNi9Hqt4TV9RdnaBPNt+E2Sgmo3gePebCRgZ1R7g6d23+53zCTnuB0amKI4AXq6VM8jj2DUAa0S1vjJxkw==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^2.0.2", + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true + } + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.0.tgz", + "integrity": "sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w==", + "dev": true + } + } + }, + "jest-changed-files": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", + "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "execa": "^1.0.0", + "throat": "^4.0.0" + } + }, + "jest-config": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", + "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^24.9.0", + "@jest/types": "^24.9.0", + "babel-jest": "^24.9.0", + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^24.9.0", + "jest-environment-node": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "micromatch": "^3.1.10", + "pretty-format": "^24.9.0", + "realpath-native": "^1.1.0" + }, + "dependencies": { + "babel-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", + "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", + "dev": true, + "requires": { + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/babel__core": "^7.1.0", + "babel-plugin-istanbul": "^5.1.0", + "babel-preset-jest": "^24.9.0", + "chalk": "^2.4.2", + "slash": "^2.0.0" + } + } + } + }, + "jest-diff": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", + "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "diff-sequences": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-docblock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", + "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", + "dev": true, + "requires": { + "detect-newline": "^2.1.0" + } + }, + "jest-each": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", + "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-environment-jsdom": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", + "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0", + "jsdom": "^11.5.1" + } + }, + "jest-environment-jsdom-fifteen": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom-fifteen/-/jest-environment-jsdom-fifteen-1.0.2.tgz", + "integrity": "sha512-nfrnAfwklE1872LIB31HcjM65cWTh1wzvMSp10IYtPJjLDUbTTvDpajZgIxUnhRmzGvogdHDayCIlerLK0OBBg==", + "dev": true, + "requires": { + "@jest/environment": "^24.3.0", + "@jest/fake-timers": "^24.3.0", + "@jest/types": "^24.3.0", + "jest-mock": "^24.0.0", + "jest-util": "^24.0.0", + "jsdom": "^15.2.1" + }, + "dependencies": { + "acorn": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz", + "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==", + "dev": true + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } + } + }, + "jsdom": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz", + "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "acorn": "^7.1.0", + "acorn-globals": "^4.3.2", + "array-equal": "^1.0.0", + "cssom": "^0.4.1", + "cssstyle": "^2.0.0", + "data-urls": "^1.1.0", + "domexception": "^1.0.1", + "escodegen": "^1.11.1", + "html-encoding-sniffer": "^1.0.2", + "nwsapi": "^2.2.0", + "parse5": "5.1.0", + "pn": "^1.1.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.7", + "saxes": "^3.1.9", + "symbol-tree": "^3.2.2", + "tough-cookie": "^3.0.1", + "w3c-hr-time": "^1.0.1", + "w3c-xmlserializer": "^1.1.2", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^7.0.0", + "ws": "^7.0.0", + "xml-name-validator": "^3.0.0" + } + }, + "parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", + "dev": true + }, + "tough-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "dev": true, + "requires": { + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "ws": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.0.tgz", + "integrity": "sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w==", + "dev": true + } + } + }, + "jest-environment-node": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", + "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0" + } + }, + "jest-get-type": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", + "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", + "dev": true + }, + "jest-haste-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", + "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "anymatch": "^2.0.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.7", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", + "micromatch": "^3.1.10", + "sane": "^4.0.3", + "walker": "^1.0.7" + } + }, + "jest-jasmine2": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", + "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^24.9.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0", + "throat": "^4.0.0" + } + }, + "jest-leak-detector": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", + "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", + "dev": true, + "requires": { + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-matcher-utils": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", + "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-message-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", + "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^2.0.1", + "micromatch": "^3.1.10", + "slash": "^2.0.0", + "stack-utils": "^1.0.1" + } + }, + "jest-mock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", + "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true + }, + "jest-regex-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", + "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", + "dev": true + }, + "jest-resolve": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" + } + }, + "jest-resolve-dependencies": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", + "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-snapshot": "^24.9.0" + } + }, + "jest-runner": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", + "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.4.2", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-config": "^24.9.0", + "jest-docblock": "^24.3.0", + "jest-haste-map": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-leak-detector": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.6.0", + "source-map-support": "^0.5.6", + "throat": "^4.0.0" + } + }, + "jest-runtime": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", + "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.9.0", + "@jest/source-map": "^24.3.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "strip-bom": "^3.0.0", + "yargs": "^13.3.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "jest-serializer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", + "dev": true + }, + "jest-serializer-vue": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jest-serializer-vue/-/jest-serializer-vue-2.0.2.tgz", + "integrity": "sha1-sjjvKGNX7GtIBCG9RxRQUJh9WbM=", + "dev": true, + "requires": { + "pretty": "2.0.0" + } + }, + "jest-snapshot": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", + "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "expect": "^24.9.0", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^24.9.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "jest-transform-stub": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jest-transform-stub/-/jest-transform-stub-2.0.0.tgz", + "integrity": "sha512-lspHaCRx/mBbnm3h4uMMS3R5aZzMwyNpNIJLXj4cEsV0mIUtS4IjYJLSoyjRCtnxb6RIGJ4NL2quZzfIeNhbkg==", + "dev": true + }, + "jest-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", + "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", + "dev": true, + "requires": { + "@jest/console": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/source-map": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "callsites": "^3.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.15", + "is-ci": "^2.0.0", + "mkdirp": "^0.5.1", + "slash": "^2.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "jest-validate": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", + "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "camelcase": "^5.3.1", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "leven": "^3.1.0", + "pretty-format": "^24.9.0" + } + }, + "jest-watch-typeahead": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.4.2.tgz", + "integrity": "sha512-f7VpLebTdaXs81rg/oj4Vg/ObZy2QtGzAmGLNsqUS5G5KtSN68tFcIsbvNODfNyQxU78g7D8x77o3bgfBTR+2Q==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^2.4.1", + "jest-regex-util": "^24.9.0", + "jest-watcher": "^24.3.0", + "slash": "^3.0.0", + "string-length": "^3.1.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "dev": true, + "requires": { + "type-fest": "^0.11.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "string-length": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", + "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", + "dev": true, + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^5.2.0" + } + }, + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true + } + } + }, + "jest-watcher": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", + "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", + "dev": true, + "requires": { + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "jest-util": "^24.9.0", + "string-length": "^2.0.0" + } + }, + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jquery": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.0.0.tgz", + "integrity": "sha1-laKpVBKRqfgZ4Bb4W6JHEW0D5Ks=" + }, + "js-base64": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.2.tgz", + "integrity": "sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ==", + "dev": true + }, + "js-beautify": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.11.0.tgz", + "integrity": "sha512-a26B+Cx7USQGSWnz9YxgJNMmML/QG2nqIaL7VVYPCXbqiKz8PN0waSNvroMtvAK6tY7g/wPdNWGEP+JTNIBr6A==", + "dev": true, + "requires": { + "config-chain": "^1.1.12", + "editorconfig": "^0.15.3", + "glob": "^7.1.3", + "mkdirp": "~1.0.3", + "nopt": "^4.0.3" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + } + } + }, + "js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "dev": true + }, + "js-message": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.5.tgz", + "integrity": "sha1-IwDSSxrwjondCVvBpMnJz8uJLRU=", + "dev": true + }, + "js-queue": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/js-queue/-/js-queue-2.0.0.tgz", + "integrity": "sha1-NiITz4YPRo8BJfxslqvBdCUx+Ug=", + "dev": true, + "requires": { + "easy-stack": "^1.0.0" + } + }, + "js-sha256": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "js-sha512": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", + "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "jsdom": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", + "dev": true, + "requires": { + "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": "^1.0.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.1", + "escodegen": "^1.9.1", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "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.1", + "ws": "^5.2.0", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, + "ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" + }, + "json5": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", + "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "known-css-properties": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.16.0.tgz", + "integrity": "sha512-0g5vDDPvNnQk7WM/aE92dTDxXJoOE0biiIcUb3qkn/F6h/ZQZPlZIbE2XSXH2vFPfphkgCxuR2vH6HHnobEOaQ==", + "dev": true + }, + "launch-editor": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.2.1.tgz", + "integrity": "sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw==", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "shell-quote": "^1.6.1" + } + }, + "launch-editor-middleware": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz", + "integrity": "sha512-s0UO2/gEGiCgei3/2UN3SMuUj1phjQN8lcpnvgLSz26fAzNWPQ6Nf/kF5IFClnfU2ehp6LrmKdMU/beveO+2jg==", + "dev": true, + "requires": { + "launch-editor": "^2.2.1" + } + }, + "lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha1-eZllXoZGwX8In90YfRUNMyTVRRM=", + "dev": true + }, + "leaflet": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.6.0.tgz", + "integrity": "sha512-CPkhyqWUKZKFJ6K8umN5/D2wrJ2+/8UIpXppY7QDnUZW5bZL5+SEI2J7GBpwh4LIupOKqbNSQXgqmrEJopHVNQ==" + }, + "leaflet.markercluster": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.4.1.tgz", + "integrity": "sha512-ZSEpE/EFApR0bJ1w/dUGwTSUvWlpalKqIzkaYdYB7jaftQA/Y2Jav+eT4CMtEYFj+ZK4mswP13Q2acnPBnhGOw==" + }, + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "dev": true + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "listr": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/listr/-/listr-0.12.0.tgz", + "integrity": "sha1-a84sD1YD+klYDqF81qAMwOX6RRo=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "figures": "^1.7.0", + "indent-string": "^2.1.0", + "is-promise": "^2.1.0", + "is-stream": "^1.1.0", + "listr-silent-renderer": "^1.1.1", + "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.0.0-beta.11", + "stream-to-observable": "^0.1.0", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "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" + } + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "^1.0.1" + } + }, + "cli-spinners": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz", + "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=", + "dev": true + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "^1.0.0" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "ora": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", + "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", + "dev": true, + "requires": { + "chalk": "^1.1.1", + "cli-cursor": "^1.0.2", + "cli-spinners": "^0.1.2", + "object-assign": "^4.0.1" + } + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + } + }, + "rxjs": { + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "dev": true, + "requires": { + "symbol-observable": "1.0.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "listr-silent-renderer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", + "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", + "dev": true + }, + "listr-update-renderer": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz", + "integrity": "sha1-yoDhd5tOcCZoB+ju0a1qvjmFUPk=", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "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" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "^1.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "listr-verbose-renderer": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz", + "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "cli-cursor": "^1.0.2", + "date-fns": "^1.27.2", + "figures": "^1.7.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "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" + } + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "^1.0.1" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "loader-fs-cache": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", + "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", + "dev": true, + "requires": { + "find-cache-dir": "^0.1.1", + "mkdirp": "^0.5.1" + }, + "dependencies": { + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "^1.0.0" + } + } + } + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" + }, + "lodash.defaultsdeep": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", + "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", + "dev": true + }, + "lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=", + "dev": true + }, + "lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "lodash.transform": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", + "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "log-update": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz", + "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", + "dev": true, + "requires": { + "ansi-escapes": "^1.0.0", + "cli-cursor": "^1.0.2" + }, + "dependencies": { + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "^1.0.1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + } + } + } + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "longest-streak": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.3.tgz", + "integrity": "sha512-9lz5IVdpwsKLMzQi0MQ+oD9EA0mIGcWYP7jXMTZVXP8D42PwuAk+M/HBFYQoxt1G5OR8m7aSIgb1UymfWGBWEw==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "requires": { + "tmpl": "1.0.x" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "markdown-escapes": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.3.tgz", + "integrity": "sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw==", + "dev": true + }, + "markdown-table": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", + "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", + "dev": true + }, + "math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", + "optional": true + }, + "mathml-tag-names": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.1.tgz", + "integrity": "sha512-pWB896KPGSGkp1XtyzRBftpTzwSOL0Gfk0wLvxt4f2mgzjY19o0LxJ3U25vNWTzsh7da+KTbuXQoQ3lOJZ8WHw==", + "dev": true + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdast-util-compact": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz", + "integrity": "sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg==", + "dev": true, + "requires": { + "unist-util-visit": "^1.1.0" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.4.tgz", + "integrity": "sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A==", + "dev": true + }, + "merkle-lib": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/merkle-lib/-/merkle-lib-2.0.10.tgz", + "integrity": "sha1-grjbrnXieneFOItz+ddyXQ9vMyY=" + }, + "merkletreejs": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.2.9.tgz", + "integrity": "sha512-MgpwiIHrTu0YQAZ7GVTTqC+BzBVdD7JstN3cFRUUIijHOPII3iCWgSc9XgRP5vCIkQLCkRaTAbTMOXUebwOhFQ==", + "requires": { + "buffer-reverse": "^1.0.1", + "crypto-js": "^3.1.9-1", + "is-buffer": "^2.0.3", + "merkle-lib": "^2.0.10", + "treeify": "^1.1.0" + }, + "dependencies": { + "crypto-js": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz", + "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==" + }, + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" + } + } + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } + } + }, + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "dev": true + }, + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "requires": { + "mime-db": "1.40.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.2.tgz", + "integrity": "sha512-a3Y4of27Wz+mqK3qrcd3VhYz6cU0iW5x3Sgvqzbj+XmlrSizmvu8QQMl5oMYJjgHOC4iyt+w7l4umP+dQeW3bw==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "minimist-options": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", + "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "moment": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + }, + "moment-timezone": { + "version": "0.5.28", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.28.tgz", + "integrity": "sha512-TDJkZvAyKIVWg5EtVqRzU97w0Rb0YVbfpqyjgu6GwXCAohVRqwZjf4fOzDE6p1Ch98Sro/8hQQi65WDXW5STPw==", + "requires": { + "moment": ">= 2.9.0" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "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-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "nem-sdk": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/nem-sdk/-/nem-sdk-1.6.8.tgz", + "integrity": "sha512-xmv/rwA2kiadJ1SGP0DLVDvO4qsxt31MbDHMqzMn90HCyWO6MnqNCvBvsXeekWGu4axk1dsytylaL3U3B5m5LQ==", + "requires": { + "babel-cli": "^6.6.5", + "babel-core": "^6.7.2", + "babel-plugin-transform-inline-environment-variables": "^6.8.0", + "babel-preset-es2015": "^6.6.0", + "crypto-js": "3.1.9-1", + "jquery": "3.0.0", + "request": "2.81.0", + "sockjs-client": "1.1.4" + }, + "dependencies": { + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "requires": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + } + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" + }, + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "requires": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + } + }, + "crypto-js": { + "version": "3.1.9-1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.9-1.tgz", + "integrity": "sha1-/aGedh/Ad+Af+/3G6f38WeiAbNg=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "eventsource": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "requires": { + "original": ">=0.0.5" + } + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" + } + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "requires": { + "ajv": "^4.9.1", + "har-schema": "^1.0.5" + } + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "requires": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "requires": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "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", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + }, + "sockjs-client": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", + "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", + "requires": { + "debug": "^2.6.6", + "eventsource": "0.1.6", + "faye-websocket": "~0.11.0", + "inherits": "^2.0.1", + "json3": "^3.3.2", + "url-parse": "^1.1.8" + } + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "requires": { + "punycode": "^1.4.1" + } + } + } + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "^1.1.1" + } + }, + "node-cache": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-4.2.1.tgz", + "integrity": "sha512-BOb67bWg2dTyax5kdef5WfU3X8xu4wPg+zHzkvls0Q/QpYycIFRLEEIdAx9Wma43DxG6Qzn4illdZoYseKWa4A==", + "dev": true, + "requires": { + "clone": "2.x", + "lodash": "^4.17.15" + }, + "dependencies": { + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + } + } + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true + }, + "node-gyp": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "dev": true, + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + } + } + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-ipc": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.1.1.tgz", + "integrity": "sha512-FAyICv0sIRJxVp3GW5fzgaf9jwwRQxAKDJlmNFUL5hOy+W4X/I5AypyHoq0DXXbo9o/gt79gj++4cMr4jVWE/w==", + "dev": true, + "requires": { + "event-pubsub": "4.3.0", + "js-message": "1.0.5", + "js-queue": "2.0.0" + } + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, + "node-notifier": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", + "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, + "node-releases": { + "version": "1.1.26", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.26.tgz", + "integrity": "sha512-fZPsuhhUHMTlfkhDLGtfY80DSJTjOcx+qD1j5pqPkuhUHVS7xHZIg9EE4DHK8O3f0zTxXHX5VIkDG8pu98/wfQ==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "node-sass": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz", + "integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==", + "dev": true, + "requires": { + "async-foreach": "^0.1.3", + "chalk": "^1.1.1", + "cross-spawn": "^3.0.0", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "in-publish": "^2.0.0", + "lodash": "^4.17.15", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "nan": "^2.13.2", + "node-gyp": "^3.8.0", + "npmlog": "^4.0.0", + "request": "^2.88.0", + "sass-graph": "2.2.5", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "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" + } + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-selector": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", + "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", + "dev": true + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-hash": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", + "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", + "dev": true + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + }, + "object-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz", + "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", + "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + } + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "optional": true, + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", + "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "opener": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", + "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", + "dev": true + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "requires": { + "url-parse": "^1.4.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "output-file-sync": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", + "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", + "requires": { + "graceful-fs": "^4.1.4", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.0" + } + }, + "p-each-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", + "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", + "dev": true, + "requires": { + "p-reduce": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true + }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "dev": true + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "requires": { + "retry": "^0.12.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "requires": { + "no-case": "^2.2.0" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + } + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-entities": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", + "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", + "dev": true, + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "optional": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "optional": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "optional": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "parse5-htmlparser2-tree-adapter": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-5.1.1.tgz", + "integrity": "sha512-CF+TKjXqoqyDwHqBhFQ+3l5t83xYi6fVT1tQNg+Ye0JRLnTxWvIroCjEp1A0k4lneHNBGnICUf0cfYVYGEazqw==", + "dev": true, + "requires": { + "parse5": "^5.1.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "pbkdf2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "pdfjs-dist": { + "version": "2.6.347", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.6.347.tgz", + "integrity": "sha512-QC+h7hG2su9v/nU1wEI3SnpPIrqJODL7GTDFvR74ANKGq1AFJW16PH8VWnhpiTi9YcLSFV9xLeWSgq+ckHLdVQ==" + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picomatch": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz", + "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + } + } + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true, + "optional": true + }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "popper.js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" + }, + "portal-vue": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/portal-vue/-/portal-vue-2.1.7.tgz", + "integrity": "sha512-+yCno2oB3xA7irTt0EU5Ezw22L2J51uKAacE/6hMPMoO/mx3h4rXFkkBkT4GFsMDv/vEe8TNKC3ujJJ0PTwb6g==" + }, + "portfinder": { + "version": "1.0.25", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz", + "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.1" + }, + "dependencies": { + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "postcss": { + "version": "7.0.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.17.tgz", + "integrity": "sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-calc": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz", + "integrity": "sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==", + "dev": true, + "requires": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + }, + "dependencies": { + "postcss": { + "version": "7.0.27", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz", + "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-html": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz", + "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==", + "dev": true, + "requires": { + "htmlparser2": "^3.10.0" + } + }, + "postcss-jsx": { + "version": "0.36.3", + "resolved": "https://registry.npmjs.org/postcss-jsx/-/postcss-jsx-0.36.3.tgz", + "integrity": "sha512-yV8Ndo6KzU8eho5mCn7LoLUGPkXrRXRjhMpX4AaYJ9wLJPv099xbtpbRQ8FrPnzVxb/cuMebbPR7LweSt+hTfA==", + "dev": true, + "requires": { + "@babel/core": ">=7.2.2" + } + }, + "postcss-less": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz", + "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==", + "dev": true, + "requires": { + "postcss": "^7.0.14" + } + }, + "postcss-load-config": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", + "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + } + }, + "postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" + } + }, + "postcss-markdown": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/postcss-markdown/-/postcss-markdown-0.36.0.tgz", + "integrity": "sha512-rl7fs1r/LNSB2bWRhyZ+lM/0bwKv9fhl38/06gF6mKMo/NPnp55+K1dSTosSVjFZc0e1ppBlu+WT91ba0PMBfQ==", + "dev": true, + "requires": { + "remark": "^10.0.1", + "unist-util-find-all-after": "^1.0.2" + } + }, + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", + "dev": true + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "dot-prop": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", + "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "dot-prop": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", + "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", + "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", + "dev": true, + "requires": { + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "dev": true, + "requires": { + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dev": true, + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-reporter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-6.0.1.tgz", + "integrity": "sha512-LpmQjfRWyabc+fRygxZjpRxfhRf9u/fdlKf4VHG4TSPbV2XNsuISzYW1KL+1aQzx53CAppa1bKG4APIB/DOXXw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "lodash": "^4.17.11", + "log-symbols": "^2.2.0", + "postcss": "^7.0.7" + } + }, + "postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", + "dev": true + }, + "postcss-safe-parser": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz", + "integrity": "sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-sass": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz", + "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", + "dev": true, + "requires": { + "gonzales-pe": "^4.3.0", + "postcss": "^7.0.21" + }, + "dependencies": { + "postcss": { + "version": "7.0.27", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz", + "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-scss": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.0.0.tgz", + "integrity": "sha512-um9zdGKaDZirMm+kZFKKVsnKPF7zF7qBAtIfTSnZXD1jZ0JNZIxdB6TxQOjCnlSzLRInVl2v3YdBh/M881C4ug==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", + "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "postcss-svgo": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", + "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "dev": true, + "requires": { + "is-svg": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-syntax": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz", + "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==", + "dev": true + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-value-parser": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz", + "integrity": "sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg==", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "optional": true + }, + "prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "dev": true + }, + "pretty": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz", + "integrity": "sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU=", + "dev": true, + "requires": { + "condense-newlines": "^0.2.1", + "extend-shallow": "^2.0.1", + "js-beautify": "^1.6.12" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "pretty-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "dev": true, + "requires": { + "renderkid": "^2.0.1", + "utila": "~0.4" + } + }, + "pretty-format": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" + } + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "prompts": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz", + "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.4" + } + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz", + "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" + }, + "quick-lru": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", + "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", + "dev": true + }, + "ramda": { + "version": "0.24.1", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.24.1.tgz", + "integrity": "sha1-w7d1UZfzW43DUCIoJixMkd22uFc=", + "dev": true + }, + "randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "optional": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "optional": true + } + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "raw-loader": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", + "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "requires": { + "minimist": "^1.2.5" + } + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "parse-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", + "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" + } + } + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "dependencies": { + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "realpath-native": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", + "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", + "dev": true, + "requires": { + "util.promisify": "^1.0.0" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + }, + "dependencies": { + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + } + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", + "dev": true + }, + "regenerator-transform": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", + "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4", + "private": "^0.1.8" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "optional": true, + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", + "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + } + } + }, + "regexpp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true, + "optional": true + }, + "regexpu-core": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", + "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + } + }, + "regjsgen": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", + "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==", + "dev": true + }, + "regjsparser": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remark": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/remark/-/remark-10.0.1.tgz", + "integrity": "sha512-E6lMuoLIy2TyiokHprMjcWNJ5UxfGQjaMSMhV+f4idM625UjjK4j798+gPs5mfjzDE6vL0oFKVeZM6gZVSVrzQ==", + "dev": true, + "requires": { + "remark-parse": "^6.0.0", + "remark-stringify": "^6.0.0", + "unified": "^7.0.0" + } + }, + "remark-parse": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-6.0.3.tgz", + "integrity": "sha512-QbDXWN4HfKTUC0hHa4teU463KclLAnwpn/FBn87j9cKYJWWawbiLgMfP2Q4XwhxxuuuOxHlw+pSN0OKuJwyVvg==", + "dev": true, + "requires": { + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^1.1.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^1.0.0", + "vfile-location": "^2.0.0", + "xtend": "^4.0.1" + } + }, + "remark-stringify": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-6.0.4.tgz", + "integrity": "sha512-eRWGdEPMVudijE/psbIDNcnJLRVx3xhfuEsTDGgH4GsFF91dVhw5nhmnBppafJ7+NWINW6C7ZwWbi30ImJzqWg==", + "dev": true, + "requires": { + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^1.1.0", + "mdast-util-compact": "^1.0.0", + "parse-entities": "^1.0.2", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^1.0.1", + "unherit": "^1.0.4", + "xtend": "^4.0.1" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "renderkid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", + "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", + "dev": true, + "requires": { + "css-select": "^1.1.0", + "dom-converter": "^0.2", + "htmlparser2": "^3.3.0", + "strip-ansi": "^3.0.0", + "utila": "^0.4.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "dev": true + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "requires": { + "is-finite": "^1.0.0" + } + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4=", + "dev": true, + "requires": { + "throttleit": "^1.0.0" + } + }, + "request-promise-core": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", + "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", + "dev": true, + "requires": { + "lodash": "^4.17.11" + } + }, + "request-promise-native": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", + "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", + "dev": true, + "requires": { + "request-promise-core": "1.1.2", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "optional": true, + "requires": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "reselect": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-3.0.1.tgz", + "integrity": "sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=", + "dev": true + }, + "resolve": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", + "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true, + "optional": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true, + "optional": true + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "optional": true, + "requires": { + "rx-lite": "*" + } + }, + "rxjs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", + "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "rxjs-compat": { + "version": "6.6.6", + "resolved": "https://registry.npmjs.org/rxjs-compat/-/rxjs-compat-6.6.6.tgz", + "integrity": "sha512-P6JOpjCYUBdXLMktko0a6JHltGaktFJA2W3DWDIjc+I9x9IwRQprOrHQf/fIykY3wAaSbbZIt6GASGMVC1mGfQ==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "dev": true, + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + } + }, + "sass-graph": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz", + "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^13.3.2" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "sass-loader": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", + "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "loader-utils": "^1.2.3", + "neo-async": "^2.6.1", + "schema-utils": "^2.6.1", + "semver": "^6.3.0" + }, + "dependencies": { + "schema-utils": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.4.tgz", + "integrity": "sha512-VNjcaUxVnEeun6B2fiiUDjXXBtD4ZSH7pdbfIu1pOFwgptDPLMo/z9jr4sUfsjFVPqDCEin/F7IYlq7/E6yDbQ==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "saxes": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", + "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", + "dev": true, + "requires": { + "xmlchars": "^2.1.1" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "requires": { + "js-base64": "^2.1.8", + "source-map": "^0.4.2" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", + "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", + "dev": true, + "requires": { + "node-forge": "^0.10.0" + } + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "dev": true + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + } + } + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "requires": { + "hoek": "2.x.x" + } + }, + "sockjs-client": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "dev": true, + "requires": { + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "specificity": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", + "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "stack-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", + "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", + "dev": true + }, + "stackframe": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.1.1.tgz", + "integrity": "sha512-0PlYhdKh6AfFxRyK/v+6/k+/mMfyiEBbTM5L94D0ZytQnJ166wuwoTYLHFWGbs2dpA8Rgq763KGWmN1EQEYHRQ==", + "dev": true + }, + "state-toggle": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.2.tgz", + "integrity": "sha512-8LpelPGR0qQM4PnfLiplOQNJcIN1/r2Gy0xKB2zKnIW2YzPMt2sR4I/+gtPjhN7Svh9kw+zqEg2SFwpBO9iNiw==", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "stream-to-observable": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.1.0.tgz", + "integrity": "sha1-Rb8dny19wJvtgfHDB8Qw5ouEz/4=", + "dev": true + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string-length": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", + "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "dev": true, + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string.prototype.padend": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz", + "integrity": "sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", + "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + } + } + }, + "string.prototype.padstart": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.1.0.tgz", + "integrity": "sha512-envqZvUp2JItI+OeQ5UAh1ihbAV5G/2bixTojvlIa090GGqF+NQRxbWb2nv9fTGrZABv6+pE6jXoAZhhS2k4Hw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", + "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + } + } + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringify-entities": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz", + "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==", + "dev": true, + "requires": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "stringstream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==" + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=", + "dev": true + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "dot-prop": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", + "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "stylelint": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-11.1.1.tgz", + "integrity": "sha512-Vx6TAJsxG6qksiFvxQTKriQhp1CqUWdpTDITEkAjTR+l+8Af7qNlvrUDXfpuFJgXh/ayF8xdMSKE+SstcsPmMA==", + "dev": true, + "requires": { + "autoprefixer": "^9.5.1", + "balanced-match": "^1.0.0", + "chalk": "^2.4.2", + "cosmiconfig": "^5.2.0", + "debug": "^4.1.1", + "execall": "^2.0.0", + "file-entry-cache": "^5.0.1", + "get-stdin": "^7.0.0", + "global-modules": "^2.0.0", + "globby": "^9.2.0", + "globjoin": "^0.1.4", + "html-tags": "^3.0.0", + "ignore": "^5.0.6", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "known-css-properties": "^0.16.0", + "leven": "^3.1.0", + "lodash": "^4.17.14", + "log-symbols": "^3.0.0", + "mathml-tag-names": "^2.1.0", + "meow": "^5.0.0", + "micromatch": "^4.0.0", + "normalize-selector": "^0.2.0", + "postcss": "^7.0.14", + "postcss-html": "^0.36.0", + "postcss-jsx": "^0.36.3", + "postcss-less": "^3.1.4", + "postcss-markdown": "^0.36.0", + "postcss-media-query-parser": "^0.2.3", + "postcss-reporter": "^6.0.1", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^4.0.1", + "postcss-sass": "^0.4.1", + "postcss-scss": "^2.0.0", + "postcss-selector-parser": "^3.1.0", + "postcss-syntax": "^0.36.2", + "postcss-value-parser": "^4.0.2", + "resolve-from": "^5.0.0", + "signal-exit": "^3.0.2", + "slash": "^3.0.0", + "specificity": "^0.4.1", + "string-width": "^4.1.0", + "strip-ansi": "^5.2.0", + "style-search": "^0.1.0", + "sugarss": "^2.0.0", + "svg-tags": "^1.0.0", + "table": "^5.2.3", + "v8-compile-cache": "^2.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "camelcase-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "get-stdin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", + "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", + "dev": true + }, + "html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "dev": true + }, + "ignore": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", + "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", + "dev": true + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2" + } + }, + "map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "dev": true + }, + "meow": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", + "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==", + "dev": true, + "requires": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0", + "yargs-parser": "^10.0.0" + } + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "dependencies": { + "dot-prop": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", + "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + } + } + }, + "postcss-value-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", + "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + }, + "redent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", + "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "dev": true, + "requires": { + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + } + } + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "trim-newlines": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", + "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", + "dev": true + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "stylelint-config-recommended": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-3.0.0.tgz", + "integrity": "sha512-F6yTRuc06xr1h5Qw/ykb2LuFynJ2IxkKfCMf+1xqPffkxh0S09Zc902XCffcsw/XMFq/OzQ1w54fLIDtmRNHnQ==", + "dev": true + }, + "stylelint-config-standard": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-19.0.0.tgz", + "integrity": "sha512-VvcODsL1PryzpYteWZo2YaA5vU/pWfjqBpOvmeA8iB2MteZ/ZhI1O4hnrWMidsS4vmEJpKtjdhLdfGJmmZm6Cg==", + "dev": true, + "requires": { + "stylelint-config-recommended": "^3.0.0" + } + }, + "stylelint-processor-html": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stylelint-processor-html/-/stylelint-processor-html-1.0.0.tgz", + "integrity": "sha1-aJK2soVaRfApHNhFGR1pCBMKKRg=", + "dev": true, + "requires": { + "htmlparser2": "^3.9.1" + } + }, + "sugarss": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", + "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.2" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-hyperlinks": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", + "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "dev": true + }, + "svg.draggable.js": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz", + "integrity": "sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==", + "requires": { + "svg.js": "^2.0.1" + } + }, + "svg.easing.js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/svg.easing.js/-/svg.easing.js-2.0.0.tgz", + "integrity": "sha1-iqmUawqOJ4V6XEChDrpAkeVpHxI=", + "requires": { + "svg.js": ">=2.3.x" + } + }, + "svg.filter.js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/svg.filter.js/-/svg.filter.js-2.0.2.tgz", + "integrity": "sha1-kQCOFROJ3ZIwd5/L5uLJo2LRwgM=", + "requires": { + "svg.js": "^2.2.5" + } + }, + "svg.js": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/svg.js/-/svg.js-2.7.1.tgz", + "integrity": "sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==" + }, + "svg.pathmorphing.js": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz", + "integrity": "sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==", + "requires": { + "svg.js": "^2.4.0" + } + }, + "svg.resize.js": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/svg.resize.js/-/svg.resize.js-1.4.3.tgz", + "integrity": "sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==", + "requires": { + "svg.js": "^2.6.5", + "svg.select.js": "^2.1.2" + }, + "dependencies": { + "svg.select.js": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-2.1.2.tgz", + "integrity": "sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==", + "requires": { + "svg.js": "^2.2.5" + } + } + } + }, + "svg.select.js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-3.0.1.tgz", + "integrity": "sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==", + "requires": { + "svg.js": "^2.6.5" + } + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + }, + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true + }, + "symbol-openapi-typescript-fetch-client": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/symbol-openapi-typescript-fetch-client/-/symbol-openapi-typescript-fetch-client-0.11.2.tgz", + "integrity": "sha512-A1MAN8/UWlaCEibBf6zxkduZwDNSvWwLPp6JB0GeYI/FAOrw/9nLyuS/NJQ3siGAUclnuejH1wG7KdUg0/4RSw==" + }, + "symbol-sdk": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/symbol-sdk/-/symbol-sdk-1.0.0.tgz", + "integrity": "sha512-j7HR5288sNXLHAMRWc6VgXiVBiyY6FJ0b+ug//cJPg63beKF+ZJkAZbzcrQqdrMTuGhIy80jG9HFodQIthLoUg==", + "requires": { + "@js-joda/core": "^3.2.0", + "bluebird": "^3.7.2", + "catbuffer-typescript": "0.1.1", + "crypto-js": "^4.0.0", + "diff": "^4.0.2", + "futoin-hkdf": "^1.3.2", + "js-sha256": "^0.9.0", + "js-sha3": "^0.8.0", + "js-sha512": "^0.8.0", + "long": "^4.0.0", + "merkletreejs": "^0.2.9", + "minimist": "^1.2.5", + "node-fetch": "^2.6.0", + "ripemd160": "^2.0.2", + "rxjs": "^6.6.3", + "rxjs-compat": "^6.6.3", + "symbol-openapi-typescript-fetch-client": "0.11.2", + "tweetnacl": "^1.0.3", + "ws": "^7.3.1" + }, + "dependencies": { + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "rxjs": { + "version": "6.6.6", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.6.tgz", + "integrity": "sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg==", + "requires": { + "tslib": "^1.9.0" + } + }, + "tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "ws": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", + "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==" + } + } + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "dev": true, + "optional": true, + "requires": { + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", + "slice-ansi": "1.0.0", + "string-width": "^2.1.1" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "optional": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "dev": true, + "optional": true + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true, + "optional": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true, + "optional": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "optional": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0" + } + } + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "tar": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "dev": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + } + }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "dev": true, + "requires": { + "type-fest": "^0.11.0" + } + }, + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true + } + } + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "dev": true, + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "thenify": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", + "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "thread-loader": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-2.1.3.tgz", + "integrity": "sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg==", + "dev": true, + "requires": { + "loader-runner": "^2.3.1", + "loader-utils": "^1.1.0", + "neo-async": "^2.6.0" + } + }, + "throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", + "dev": true + }, + "throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "toposort": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", + "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", + "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "treeify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==" + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", + "dev": true + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" + }, + "trim-trailing-lines": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.2.tgz", + "integrity": "sha512-MUjYItdrqqj2zpcHFTkMa9WAv4JHTI6gnRQGPFLrt5L9a6tRMiDnIqYl8JBvu2d2Tc3lWJKQwlGCp0K8AvCM+Q==", + "dev": true + }, + "trough": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.4.tgz", + "integrity": "sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q==", + "dev": true + }, + "true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "dev": true, + "requires": { + "glob": "^7.1.2" + } + }, + "tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "dev": true + }, + "ts-jest": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.3.0.tgz", + "integrity": "sha512-Hb94C/+QRIgjVZlJyiWwouYUF+siNJHJHknyspaOcZ+OQAIdFG/UrdQVXw/0B8Z3No34xkUXZJpOTy9alOWdVQ==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "mkdirp": "0.x", + "resolve": "1.x", + "semver": "^5.5", + "yargs-parser": "10.x" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "tsconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", + "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", + "dev": true, + "requires": { + "@types/strip-bom": "^3.0.0", + "@types/strip-json-comments": "0.0.30", + "strip-bom": "^3.0.0", + "strip-json-comments": "^2.0.0" + } + }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "dev": true, + "requires": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "unherit": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.2.tgz", + "integrity": "sha512-W3tMnpaMG7ZY6xe/moK04U9fBhi6wEiCYHUW5Mop/wQHf12+79EQGwxYejNdhEz2mkqkBlGwm7pxmgBKMVUj0w==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "xtend": "^4.0.1" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "dev": true + }, + "unified": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-7.1.0.tgz", + "integrity": "sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "@types/vfile": "^3.0.0", + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^1.1.0", + "trough": "^1.0.0", + "vfile": "^3.0.0", + "x-is-string": "^0.1.0" + } + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unist-util-find-all-after": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-1.0.5.tgz", + "integrity": "sha512-lWgIc3rrTMTlK1Y0hEuL+k+ApzFk78h+lsaa2gHf63Gp5Ww+mt11huDniuaoq1H+XMK2lIIjjPkncxXcDp3QDw==", + "dev": true, + "requires": { + "unist-util-is": "^3.0.0" + } + }, + "unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "dev": true + }, + "unist-util-remove-position": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", + "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", + "dev": true, + "requires": { + "unist-util-visit": "^1.1.0" + } + }, + "unist-util-stringify-position": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.2.tgz", + "integrity": "sha512-nK5n8OGhZ7ZgUwoUbL8uiVRwAbZyzBsB/Ddrlbu6jwwubFza4oe15KlyEaLNMXQW1svOQq4xesUeqA85YrIUQA==", + "dev": true, + "requires": { + "@types/unist": "^2.0.2" + } + }, + "unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "dev": true, + "requires": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "dev": true, + "requires": { + "unist-util-is": "^3.0.0" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } + }, + "untildify": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.3.tgz", + "integrity": "sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==", + "dev": true + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-loader": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz", + "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "mime": "^2.0.3", + "schema-utils": "^1.0.0" + } + }, + "url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "user-home": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=" + }, + "utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", + "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + } + } + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "v8-compile-cache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", + "dev": true + }, + "v8-to-istanbul": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz", + "integrity": "sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "v8flags": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", + "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "requires": { + "user-home": "^1.1.1" + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz", + "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==", + "dev": true, + "requires": { + "is-buffer": "^2.0.0", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^1.0.0", + "vfile-message": "^1.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "dev": true + }, + "unist-util-stringify-position": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", + "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==", + "dev": true + }, + "vfile-message": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", + "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", + "dev": true, + "requires": { + "unist-util-stringify-position": "^1.1.1" + } + } + } + }, + "vfile-location": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", + "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==", + "dev": true + }, + "vfile-message": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.2.tgz", + "integrity": "sha512-gNV2Y2fDvDOOqq8bEe7cF3DXU6QgV4uA9zMR2P8tix11l1r7zju3zry3wZ8sx+BEfuO6WQ7z2QzfWTvqHQiwsA==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "vue": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.11.tgz", + "integrity": "sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ==" + }, + "vue-apexcharts": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/vue-apexcharts/-/vue-apexcharts-1.6.0.tgz", + "integrity": "sha512-sT6tuVTLBwfH3TA7azecDNS/W70bmz14ZJI7aE7QIqcG9I6OywyH7x3hcOeY1v1DxttI8Svc5RuYj4Dd+A5F4g==" + }, + "vue-eslint-parser": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz", + "integrity": "sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==", + "dev": true, + "optional": true, + "requires": { + "debug": "^3.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.2", + "esquery": "^1.0.0", + "lodash": "^4.17.4" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", + "dev": true, + "optional": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + } + } + }, + "vue-functional-data-merge": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vue-functional-data-merge/-/vue-functional-data-merge-3.1.0.tgz", + "integrity": "sha512-leT4kdJVQyeZNY1kmnS1xiUlQ9z1B/kdBFCILIjYYQDqZgLqCLa0UhjSSeRX6c3mUe6U5qYeM8LrEqkHJ1B4LA==" + }, + "vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", + "dev": true + }, + "vue-infinite-loading": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/vue-infinite-loading/-/vue-infinite-loading-2.4.5.tgz", + "integrity": "sha512-xhq95Mxun060bRnsOoLE2Be6BR7jYwuC89kDe18+GmCLVrRA/dU0jrGb12Xu6NjmKs+iTW0AA6saSEmEW4cR7g==" + }, + "vue-jest": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/vue-jest/-/vue-jest-3.0.5.tgz", + "integrity": "sha512-xWDxde91pDqYBGDlODENZ3ezPgw+IQFoVDtf+5Awlg466w3KvMSqWzs8PxcTeTr+wmAHi0j+a+Lm3R7aUJa1jA==", + "dev": true, + "requires": { + "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": { + "version": "15.9.1", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.1.tgz", + "integrity": "sha512-IaPU2KOPjs/QjMlxFs/TiTtQUSbftQ7lsAvoxe21rtcQohsMhx+1AltXCNhZIpIn46PtODiAgz+o8RbMpKtmJw==", + "dev": true, + "requires": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + } + }, + "vue-material-design-icons": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/vue-material-design-icons/-/vue-material-design-icons-4.4.0.tgz", + "integrity": "sha512-5SkO9ijY2jIjVmypliBWBMUB6i4ovbX2BwLqSNozRBcY7lb32+GzHrDkumoDwEMOHxe8gO6tIZimOYfBySQ+LQ==" + }, + "vue-pdf": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/vue-pdf/-/vue-pdf-4.2.0.tgz", + "integrity": "sha512-GpAbZfM48Hom1R8f4XL5ZzoVBLlbyy+4z0VYmTQORVOSieVIIu+XtnNl0RY6EXg60Qni6T6nIgrmsCcCkWv39A==", + "requires": { + "babel-plugin-syntax-dynamic-import": "^6.18.0", + "loader-utils": "^1.4.0", + "pdfjs-dist": "^2.5.207", + "raw-loader": "^4.0.1", + "vue-resize-sensor": "^2.0.0", + "worker-loader": "^2.0.0" + }, + "dependencies": { + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "vue-resize-sensor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vue-resize-sensor/-/vue-resize-sensor-2.0.0.tgz", + "integrity": "sha512-W+y2EAI/BxS4Vlcca9scQv8ifeBFck56DRtSwWJ2H4Cw1GLNUYxiZxUHHkuzuI5JPW/cYtL1bPO5xPyEXx4LmQ==" + }, + "vue-router": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.1.6.tgz", + "integrity": "sha512-GYhn2ynaZlysZMkFE5oCHRUTqE8BWs/a9YbKpNLi0i7xD6KG1EzDqpHQmv1F5gXjr8kL5iIVS8EOtRaVUEXTqA==" + }, + "vue-slim-tabs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/vue-slim-tabs/-/vue-slim-tabs-0.3.0.tgz", + "integrity": "sha512-0KaQRcql5ihRHTwvguWw1vxYnxuChLkhXu6AEp0TEHKm2Ax4Y5HL58AhVHZCyNXhRwDK3J+Fh0jzoOR0VI7j7Q==" + }, + "vue-style-loader": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.2.tgz", + "integrity": "sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ==", + "dev": true, + "requires": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + } + }, + "vue-template-compiler": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz", + "integrity": "sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA==", + "dev": true, + "requires": { + "de-indent": "^1.0.2", + "he": "^1.1.0" + } + }, + "vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "dev": true + }, + "vuex": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.1.3.tgz", + "integrity": "sha512-k8vZqNMSNMgKelVZAPYw5MNb2xWSmVgCKtYKAptvm9YtZiOXnRXFWu//Y9zQNORTrm3dNj1n/WaZZI26tIX6Mw==" + }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", + "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", + "dev": true, + "requires": { + "domexception": "^1.0.1", + "webidl-conversions": "^4.0.2", + "xml-name-validator": "^3.0.0" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "requires": { + "makeerror": "1.0.x" + } + }, + "watchpack": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", + "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", + "dev": true, + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.0" + }, + "dependencies": { + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "optional": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true, + "optional": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "optional": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", + "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "optional": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "optional": true + }, + "readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "optional": true, + "requires": { + "picomatch": "^2.2.1" + }, + "dependencies": { + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true, + "optional": true + } + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "optional": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "watchpack-chokidar2": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", + "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "dev": true, + "optional": true, + "requires": { + "chokidar": "^2.1.8" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "webpack": { + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.1.tgz", + "integrity": "sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.3.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + } + }, + "webpack-bundle-analyzer": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.7.0.tgz", + "integrity": "sha512-mETdjZ30a3Yf+NTB/wqTgACK7rAYQl5uxKK0WVTNmF0sM3Uv8s3R58YZMW7Rhu0Lk2Rmuhdj5dcH5Q76zCDVdA==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1", + "bfj": "^6.1.1", + "chalk": "^2.4.1", + "commander": "^2.18.0", + "ejs": "^2.6.1", + "express": "^4.16.3", + "filesize": "^3.6.1", + "gzip-size": "^5.0.0", + "lodash": "^4.17.15", + "mkdirp": "^0.5.1", + "opener": "^1.5.1", + "ws": "^6.0.0" + }, + "dependencies": { + "acorn": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", + "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", + "dev": true + }, + "acorn-walk": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.1.1.tgz", + "integrity": "sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ==", + "dev": true + } + } + }, + "webpack-chain": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-4.12.1.tgz", + "integrity": "sha512-BCfKo2YkDe2ByqkEWe1Rw+zko4LsyS75LVr29C6xIrxAg9JHJ4pl8kaIZ396SUSNp6b4815dRZPSTAS8LlURRQ==", + "dev": true, + "requires": { + "deepmerge": "^1.5.2", + "javascript-stringify": "^1.6.0" + } + }, + "webpack-dev-middleware": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "dev": true, + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + } + }, + "webpack-dev-server": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", + "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.7", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "0.3.20", + "sockjs-client": "1.4.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "html-entities": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", + "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", + "dev": true + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "loglevel": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", + "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "portfinder": { + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz", + "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.1" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "sockjs": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", + "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", + "dev": true, + "requires": { + "faye-websocket": "^0.10.0", + "uuid": "^3.4.0", + "websocket-driver": "0.6.5" + } + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "websocket-driver": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "dev": true, + "requires": { + "websocket-extensions": ">=0.1.1" + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "websocket-driver": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", + "requires": { + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-fetch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.1.0.tgz", + "integrity": "sha512-pgmbsVWKpH9GxLXZmtdowDIqtb/rvPyjjQv3z9wLcmgWKFHilKnZD3ldgrOlwJoPGOUluQsRPWd52yVkPfmI1A==", + "dev": true + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "worker-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/worker-loader/-/worker-loader-2.0.0.tgz", + "integrity": "sha512-tnvNp4K3KQOpfRnD20m8xltE3eWh89Ye+5oj7wXEEHKac1P4oZ6p9oTj8/8ExqoSBnk9nu5Pr4nKfQ1hn2APJw==", + "requires": { + "loader-utils": "^1.0.0", + "schema-utils": "^0.4.0" + }, + "dependencies": { + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "optional": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", + "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "x-is-string": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", + "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", + "dev": true + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yargs": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", + "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + }, + "dependencies": { + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + } + } + }, + "yorkie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz", + "integrity": "sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==", + "dev": true, + "requires": { + "execa": "^0.8.0", + "is-ci": "^1.0.10", + "normalize-path": "^1.0.0", + "strip-indent": "^2.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", + "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", + "dev": true, + "requires": { + "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" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "normalize-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", + "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..c5fd784 --- /dev/null +++ b/package.json @@ -0,0 +1,93 @@ +{ + "name": "dhealth-explorer", + "description": "dHealth Explorer: Public Blockchain Infrastructure for Healthcare", + "homepage": "https://github.com/dhealthproject/dhealth-explorer", + "version": "1.0.0", + "author": { + "name": "Using Blockchain Ltd", + "email": "info@ubc.digital", + "url": "https://using-blockchain.org" + }, + "contributors": [ + { + "name": "Grégory Saive", + "email": "greg@ubc.digital", + "url": "https://ubc.digital" + }, + { + "name": "NEM Group", + "email": "support@nem.group" + } + ], + "repository": { + "type": "git", + "url": "https://github.com/dhealthproject/dhealth-explorer.git" + }, + "bugs": { + "url": "https://github.com/dhealthproject/dhealth-explorer/issues" + }, + "license": "Apache-2.0", + "scripts": { + "dev": "vue-cli-service serve", + "build": "vue-cli-service build", + "start": "node server.js", + "lint": "vue-cli-service lint", + "lint:css": "stylelint '**/*.vue' src/styles/main.scss --syntax scss", + "lint:all": "npm run lint && npm run lint:css", + "test:e2e": "vue-cli-service test:e2e --headless", + "test": "vue-cli-service test:unit", + "version": "echo $npm_package_version" + }, + "dependencies": { + "@babel/plugin-proposal-optional-chaining": "^7.8.3", + "@babel/plugin-proposal-pipeline-operator": "^7.8.3", + "@mdi/font": "^5.2.45", + "apexcharts": "^3.24.0", + "await-lock": "^2.0.1", + "axios": "^0.21.1", + "bootstrap": "^4.4.1", + "bootstrap-vue": "^2.7.0", + "chart.js": "^2.9.3", + "core-js": "^2.6.11", + "js-sha3": "^0.8.0", + "leaflet": "^1.6.0", + "leaflet.markercluster": "^1.4.1", + "merkletreejs": "^0.2.9", + "moment-timezone": "^0.5.28", + "nem-sdk": "^1.6.8", + "symbol-sdk": "^1.0.0", + "url-parse": "^1.4.7", + "utf8": "^3.0.0", + "vue": "^2.6.11", + "vue-apexcharts": "^1.6.0", + "vue-infinite-loading": "^2.4.5", + "vue-material-design-icons": "^4.4.0", + "vue-pdf": "^4.2.0", + "vue-router": "^3.1.6", + "vue-slim-tabs": "^0.3.0", + "vuex": "^3.1.3" + }, + "devDependencies": { + "@babel/plugin-proposal-export-default-from": "^7.8.3", + "@vue/cli-plugin-babel": "^3.12.1", + "@vue/cli-plugin-e2e-cypress": "^4.2.3", + "@vue/cli-plugin-eslint": "^3.12.1", + "@vue/cli-plugin-unit-jest": "^4.4.4", + "@vue/cli-service": "^3.12.1", + "@vue/eslint-config-standard": "^4.0.0", + "babel-eslint": "^10.1.0", + "babel-jest": "^26.0.1", + "cypress": "^3.8.3", + "eslint": "^5.16.0", + "eslint-plugin-vue": "^5.0.0", + "isomorphic-fetch": "^2.2.1", + "jest": "^26.0.1", + "node-sass": "^4.14.1", + "sass-loader": "^8.0.2", + "stylelint": "^11.1.1", + "stylelint-config-standard": "^19.0.0", + "stylelint-processor-html": "^1.0.0", + "vue-jest": "^3.0.5", + "vue-template-compiler": "^2.6.11" + } +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..3080304 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,5 @@ +module.exports = { + plugins: { + autoprefixer: {} + } +}; diff --git a/public/config.js b/public/config.js new file mode 100644 index 0000000..357b17d --- /dev/null +++ b/public/config.js @@ -0,0 +1,4 @@ +// extension point to add a custom configuration by providing a: +// +// +// window.globalConfig = {} object diff --git a/public/icons/android-icon-144x144.png b/public/icons/android-icon-144x144.png new file mode 100644 index 0000000..cddaeee Binary files /dev/null and b/public/icons/android-icon-144x144.png differ diff --git a/public/icons/android-icon-192x192.png b/public/icons/android-icon-192x192.png new file mode 100644 index 0000000..04fab7a Binary files /dev/null and b/public/icons/android-icon-192x192.png differ diff --git a/public/icons/android-icon-36x36.png b/public/icons/android-icon-36x36.png new file mode 100644 index 0000000..f978487 Binary files /dev/null and b/public/icons/android-icon-36x36.png differ diff --git a/public/icons/android-icon-48x48.png b/public/icons/android-icon-48x48.png new file mode 100644 index 0000000..6ec7fc0 Binary files /dev/null and b/public/icons/android-icon-48x48.png differ diff --git a/public/icons/android-icon-72x72.png b/public/icons/android-icon-72x72.png new file mode 100644 index 0000000..71fc5e1 Binary files /dev/null and b/public/icons/android-icon-72x72.png differ diff --git a/public/icons/android-icon-96x96.png b/public/icons/android-icon-96x96.png new file mode 100644 index 0000000..cddaeee Binary files /dev/null and b/public/icons/android-icon-96x96.png differ diff --git a/public/icons/apple-icon-precomposed.png b/public/icons/apple-icon-precomposed.png new file mode 100644 index 0000000..04fab7a Binary files /dev/null and b/public/icons/apple-icon-precomposed.png differ diff --git a/public/icons/apple-icon.png b/public/icons/apple-icon.png new file mode 100644 index 0000000..04fab7a Binary files /dev/null and b/public/icons/apple-icon.png differ diff --git a/public/icons/favicon-16x16.png b/public/icons/favicon-16x16.png new file mode 100644 index 0000000..9c0aeee Binary files /dev/null and b/public/icons/favicon-16x16.png differ diff --git a/public/icons/favicon-32x32.png b/public/icons/favicon-32x32.png new file mode 100644 index 0000000..f978487 Binary files /dev/null and b/public/icons/favicon-32x32.png differ diff --git a/public/icons/favicon-96x96.png b/public/icons/favicon-96x96.png new file mode 100644 index 0000000..71fc5e1 Binary files /dev/null and b/public/icons/favicon-96x96.png differ diff --git a/public/icons/ms-icon-144x144.png b/public/icons/ms-icon-144x144.png new file mode 100644 index 0000000..cddaeee Binary files /dev/null and b/public/icons/ms-icon-144x144.png differ diff --git a/public/icons/ms-icon-150x150.png b/public/icons/ms-icon-150x150.png new file mode 100644 index 0000000..cddaeee Binary files /dev/null and b/public/icons/ms-icon-150x150.png differ diff --git a/public/icons/ms-icon-310x310.png b/public/icons/ms-icon-310x310.png new file mode 100644 index 0000000..8a41abf Binary files /dev/null and b/public/icons/ms-icon-310x310.png differ diff --git a/public/icons/ms-icon-70x70.png b/public/icons/ms-icon-70x70.png new file mode 100644 index 0000000..71fc5e1 Binary files /dev/null and b/public/icons/ms-icon-70x70.png differ diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..e117f66 --- /dev/null +++ b/public/index.html @@ -0,0 +1,28 @@ + + + + + + + dHealth Explorer + + + + + + + + +
+ +
+ + + + diff --git a/public/manifest.json b/public/manifest.json new file mode 100644 index 0000000..ec8261b --- /dev/null +++ b/public/manifest.json @@ -0,0 +1,44 @@ +{ + "name": "dHealth Explorer", + "short_name": "dHealth Explorer", + "icons": [ + { + "src": "icons/android-icon-36x36.png", + "sizes": "36x36", + "type": "image\/png", + "density": "0.75" + }, + { + "src": "icons/android-icon-48x48.png", + "sizes": "48x48", + "type": "image\/png", + "density": "1.0" + }, + { + "src": "icons/android-icon-72x72.png", + "sizes": "72x72", + "type": "image\/png", + "density": "1.5" + }, + { + "src": "icons/android-icon-96x96.png", + "sizes": "96x96", + "type": "image\/png", + "density": "2.0" + }, + { + "src": "icons/android-icon-144x144.png", + "sizes": "144x144", + "type": "image\/png", + "density": "3.0" + }, + { + "src": "icons/android-icon-192x192.png", + "sizes": "192x192", + "type": "image\/png", + "density": "4.0" + } + ], + "start_url": "./index.html", + "display": "standalone" +} \ No newline at end of file diff --git a/public/service-worker.js b/public/service-worker.js new file mode 100644 index 0000000..e69de29 diff --git a/server.js b/server.js new file mode 100644 index 0000000..b2f33ba --- /dev/null +++ b/server.js @@ -0,0 +1,93 @@ +const fs = require('fs'); +const http = require('http'); + +const PORT = 80; +const CONFIG_ROUTE = '/config'; +const DEFAULT_CONFIG_PATH = '/src/config/default.json'; +const STATIC_FOLDER = '/www'; +const INDEX_HTML = '/index.html'; + +let ENV; + + +const readConfig = (callback) => { + const ENV = process.env; + + fs.readFile(__dirname + DEFAULT_CONFIG_PATH, (err, data) => { + if (err) throw Error('Failed to read default config. ' + err); + else { + const defaultConfig = JSON.parse(data); + const parsedENV = {}; + Object.keys(ENV).forEach(key => { + try { + if (defaultConfig[key]) { + parsedENV[key] = JSON.parse(ENV[key]); + } + } + catch(e) { + parsedENV[key] = ENV[key]; + } + }); + const mergedConfig = { + ...defaultConfig, + ...parsedENV + }; + + callback(mergedConfig); + } + }); +}; + +const getFile = (url, errCallback, callback) => { + fs.readFile(__dirname + STATIC_FOLDER + url, (err, data) => { + if (err) { + if(typeof errCallback === 'function') + errCallback(err); + } + else + if(typeof callback === 'function') + callback(data); + }); +}; + +const send = (res, data) => { + res.writeHead(200); + res.end(data); +}; + +const sendJSON = (res, data) => { + res.setHeader('Content-Type', 'application/json'); + send(res, JSON.stringify(data)); +} + +const sendError = (res, err, code) => { + res.writeHead(code); + res.end(JSON.stringify(err)); + return; +}; + +readConfig(res => { + ENV = res; + + http.createServer((req, res) => { + if(req.url === '/') + req.url = INDEX_HTML; + + if(req.url === CONFIG_ROUTE) { + sendJSON(res, ENV); + } + else { + getFile(req.url, + () => { + getFile(INDEX_HTML, + err => sendError(res, err, 404), + data => send(res, data) + ); + }, + data => send(res, data) + ); + } + }).listen(ENV.PORT || PORT); + + console.log('dHealth Explorer is running. Listening on port: ' + PORT); +}); diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..ab3e984 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,130 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + + + + + diff --git a/src/components/AggregateTransaction.vue b/src/components/AggregateTransaction.vue new file mode 100644 index 0000000..677727e --- /dev/null +++ b/src/components/AggregateTransaction.vue @@ -0,0 +1,50 @@ + + + diff --git a/src/components/Chart.vue b/src/components/Chart.vue new file mode 100644 index 0000000..5bf2660 --- /dev/null +++ b/src/components/Chart.vue @@ -0,0 +1,218 @@ + + + diff --git a/src/components/Loading.vue b/src/components/Loading.vue new file mode 100644 index 0000000..ff8bd72 --- /dev/null +++ b/src/components/Loading.vue @@ -0,0 +1,198 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + + + + diff --git a/src/components/MetadataEntries.vue b/src/components/MetadataEntries.vue new file mode 100644 index 0000000..24c98c8 --- /dev/null +++ b/src/components/MetadataEntries.vue @@ -0,0 +1,58 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + + + diff --git a/src/components/NemCopyright.vue b/src/components/NemCopyright.vue new file mode 100644 index 0000000..a33818a --- /dev/null +++ b/src/components/NemCopyright.vue @@ -0,0 +1,67 @@ +/* + * + * Copyright (c) 2019-present for NEM + * Copyright 2021-present [Using Blockchain Ltd](https://using-blockchain.org), All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + + + + + diff --git a/src/components/NemDescription.vue b/src/components/NemDescription.vue new file mode 100644 index 0000000..4fa4931 --- /dev/null +++ b/src/components/NemDescription.vue @@ -0,0 +1,65 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + + + diff --git a/src/components/NodesMap.vue b/src/components/NodesMap.vue new file mode 100644 index 0000000..3cf1f06 --- /dev/null +++ b/src/components/NodesMap.vue @@ -0,0 +1,263 @@ + + + + + diff --git a/src/components/TimeSince.vue b/src/components/TimeSince.vue new file mode 100644 index 0000000..b03b094 --- /dev/null +++ b/src/components/TimeSince.vue @@ -0,0 +1,74 @@ + + diff --git a/src/components/containers/Card.vue b/src/components/containers/Card.vue new file mode 100644 index 0000000..3f76e40 --- /dev/null +++ b/src/components/containers/Card.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/src/components/containers/CardTable.vue b/src/components/containers/CardTable.vue new file mode 100644 index 0000000..21c4290 --- /dev/null +++ b/src/components/containers/CardTable.vue @@ -0,0 +1,240 @@ + + + diff --git a/src/components/containers/Modal.vue b/src/components/containers/Modal.vue new file mode 100644 index 0000000..b28997a --- /dev/null +++ b/src/components/containers/Modal.vue @@ -0,0 +1,32 @@ + + + diff --git a/src/components/controls/ButtonLess.vue b/src/components/controls/ButtonLess.vue new file mode 100644 index 0000000..25a89b4 --- /dev/null +++ b/src/components/controls/ButtonLess.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/src/components/controls/ButtonMore.vue b/src/components/controls/ButtonMore.vue new file mode 100644 index 0000000..0df132f --- /dev/null +++ b/src/components/controls/ButtonMore.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/src/components/controls/Dropdown.vue b/src/components/controls/Dropdown.vue new file mode 100644 index 0000000..2035639 --- /dev/null +++ b/src/components/controls/Dropdown.vue @@ -0,0 +1,98 @@ + + + diff --git a/src/components/controls/DropdownFilter.vue b/src/components/controls/DropdownFilter.vue new file mode 100644 index 0000000..c2d1295 --- /dev/null +++ b/src/components/controls/DropdownFilter.vue @@ -0,0 +1,98 @@ + + + diff --git a/src/components/controls/LanguageSelector.vue b/src/components/controls/LanguageSelector.vue new file mode 100644 index 0000000..6cf4e90 --- /dev/null +++ b/src/components/controls/LanguageSelector.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/src/components/controls/NodeSelector.vue b/src/components/controls/NodeSelector.vue new file mode 100644 index 0000000..8481ffe --- /dev/null +++ b/src/components/controls/NodeSelector.vue @@ -0,0 +1,59 @@ + + + + + diff --git a/src/components/controls/Pagination.vue b/src/components/controls/Pagination.vue new file mode 100644 index 0000000..68620b7 --- /dev/null +++ b/src/components/controls/Pagination.vue @@ -0,0 +1,119 @@ + + + + + diff --git a/src/components/controls/SearchBox.vue b/src/components/controls/SearchBox.vue new file mode 100644 index 0000000..c6126f6 --- /dev/null +++ b/src/components/controls/SearchBox.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/src/components/extend-graphic-value/ExtendAccountAddressRestrictionValue.vue b/src/components/extend-graphic-value/ExtendAccountAddressRestrictionValue.vue new file mode 100644 index 0000000..25c2abb --- /dev/null +++ b/src/components/extend-graphic-value/ExtendAccountAddressRestrictionValue.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/src/components/extend-graphic-value/ExtendAccountMosaicRestrictionValue.vue b/src/components/extend-graphic-value/ExtendAccountMosaicRestrictionValue.vue new file mode 100644 index 0000000..4ba19a8 --- /dev/null +++ b/src/components/extend-graphic-value/ExtendAccountMosaicRestrictionValue.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/src/components/extend-graphic-value/ExtendAccountOperationRestrictionValue.vue b/src/components/extend-graphic-value/ExtendAccountOperationRestrictionValue.vue new file mode 100644 index 0000000..2a996e0 --- /dev/null +++ b/src/components/extend-graphic-value/ExtendAccountOperationRestrictionValue.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/src/components/extend-graphic-value/ExtendAliasValue.vue b/src/components/extend-graphic-value/ExtendAliasValue.vue new file mode 100644 index 0000000..349f824 --- /dev/null +++ b/src/components/extend-graphic-value/ExtendAliasValue.vue @@ -0,0 +1,43 @@ + + + diff --git a/src/components/extend-graphic-value/ExtendHashLockValue.vue b/src/components/extend-graphic-value/ExtendHashLockValue.vue new file mode 100644 index 0000000..7c5ed54 --- /dev/null +++ b/src/components/extend-graphic-value/ExtendHashLockValue.vue @@ -0,0 +1,70 @@ + + + diff --git a/src/components/extend-graphic-value/ExtendKeyLinkValue.vue b/src/components/extend-graphic-value/ExtendKeyLinkValue.vue new file mode 100644 index 0000000..aa18df0 --- /dev/null +++ b/src/components/extend-graphic-value/ExtendKeyLinkValue.vue @@ -0,0 +1,43 @@ + + + diff --git a/src/components/extend-graphic-value/ExtendMetadataValue.vue b/src/components/extend-graphic-value/ExtendMetadataValue.vue new file mode 100644 index 0000000..268437b --- /dev/null +++ b/src/components/extend-graphic-value/ExtendMetadataValue.vue @@ -0,0 +1,43 @@ + + + diff --git a/src/components/extend-graphic-value/ExtendMosaicDefinitionValue.vue b/src/components/extend-graphic-value/ExtendMosaicDefinitionValue.vue new file mode 100644 index 0000000..b456dde --- /dev/null +++ b/src/components/extend-graphic-value/ExtendMosaicDefinitionValue.vue @@ -0,0 +1,57 @@ + + + diff --git a/src/components/extend-graphic-value/ExtendMosaicGlobalRestrictionValue.vue b/src/components/extend-graphic-value/ExtendMosaicGlobalRestrictionValue.vue new file mode 100644 index 0000000..732a2b7 --- /dev/null +++ b/src/components/extend-graphic-value/ExtendMosaicGlobalRestrictionValue.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/src/components/extend-graphic-value/ExtendMosaicSupplyChangeValue.vue b/src/components/extend-graphic-value/ExtendMosaicSupplyChangeValue.vue new file mode 100644 index 0000000..582c58c --- /dev/null +++ b/src/components/extend-graphic-value/ExtendMosaicSupplyChangeValue.vue @@ -0,0 +1,42 @@ + + + diff --git a/src/components/extend-graphic-value/ExtendNamespaceRegistrationValue.vue b/src/components/extend-graphic-value/ExtendNamespaceRegistrationValue.vue new file mode 100644 index 0000000..0750e19 --- /dev/null +++ b/src/components/extend-graphic-value/ExtendNamespaceRegistrationValue.vue @@ -0,0 +1,56 @@ + + + diff --git a/src/components/extend-graphic-value/ExtendSecretLockValue.vue b/src/components/extend-graphic-value/ExtendSecretLockValue.vue new file mode 100644 index 0000000..b43f6c4 --- /dev/null +++ b/src/components/extend-graphic-value/ExtendSecretLockValue.vue @@ -0,0 +1,41 @@ + + + diff --git a/src/components/extend-graphic-value/ExtendSecretProofValue.vue b/src/components/extend-graphic-value/ExtendSecretProofValue.vue new file mode 100644 index 0000000..e656758 --- /dev/null +++ b/src/components/extend-graphic-value/ExtendSecretProofValue.vue @@ -0,0 +1,41 @@ + + + diff --git a/src/components/extend-graphic-value/ExtendTransferValue.vue b/src/components/extend-graphic-value/ExtendTransferValue.vue new file mode 100644 index 0000000..f893f1b --- /dev/null +++ b/src/components/extend-graphic-value/ExtendTransferValue.vue @@ -0,0 +1,162 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + + + + + diff --git a/src/components/fields/Age.vue b/src/components/fields/Age.vue new file mode 100644 index 0000000..ff08f0c --- /dev/null +++ b/src/components/fields/Age.vue @@ -0,0 +1,47 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + + diff --git a/src/components/fields/ArrayField.vue b/src/components/fields/ArrayField.vue new file mode 100644 index 0000000..7ea2e2c --- /dev/null +++ b/src/components/fields/ArrayField.vue @@ -0,0 +1,65 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + + + diff --git a/src/components/fields/BlockHeightWithFinalizedStatusField.vue b/src/components/fields/BlockHeightWithFinalizedStatusField.vue new file mode 100644 index 0000000..4902ad4 --- /dev/null +++ b/src/components/fields/BlockHeightWithFinalizedStatusField.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/src/components/fields/Boolean.vue b/src/components/fields/Boolean.vue new file mode 100644 index 0000000..64deffb --- /dev/null +++ b/src/components/fields/Boolean.vue @@ -0,0 +1,68 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + + + + diff --git a/src/components/fields/ChainInfo.vue b/src/components/fields/ChainInfo.vue new file mode 100644 index 0000000..2ca7a41 --- /dev/null +++ b/src/components/fields/ChainInfo.vue @@ -0,0 +1,110 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + + + + + diff --git a/src/components/fields/DateField.vue b/src/components/fields/DateField.vue new file mode 100644 index 0000000..ee43271 --- /dev/null +++ b/src/components/fields/DateField.vue @@ -0,0 +1,56 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + + + + diff --git a/src/components/fields/Decimal.vue b/src/components/fields/Decimal.vue new file mode 100644 index 0000000..50ebae3 --- /dev/null +++ b/src/components/fields/Decimal.vue @@ -0,0 +1,43 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + + + + diff --git a/src/components/fields/ExtendGraphicValueField.vue b/src/components/fields/ExtendGraphicValueField.vue new file mode 100644 index 0000000..21eae3c --- /dev/null +++ b/src/components/fields/ExtendGraphicValueField.vue @@ -0,0 +1,115 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + + + diff --git a/src/components/fields/MessageField.vue b/src/components/fields/MessageField.vue new file mode 100644 index 0000000..43095d6 --- /dev/null +++ b/src/components/fields/MessageField.vue @@ -0,0 +1,93 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + + + + + diff --git a/src/components/fields/MosaicsField.vue b/src/components/fields/MosaicsField.vue new file mode 100644 index 0000000..696914f --- /dev/null +++ b/src/components/fields/MosaicsField.vue @@ -0,0 +1,110 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + + + + + diff --git a/src/components/fields/RestrictionField.vue b/src/components/fields/RestrictionField.vue new file mode 100644 index 0000000..ea56506 --- /dev/null +++ b/src/components/fields/RestrictionField.vue @@ -0,0 +1,76 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + + + + + diff --git a/src/components/fields/RewardPrograms.vue b/src/components/fields/RewardPrograms.vue new file mode 100644 index 0000000..9abc245 --- /dev/null +++ b/src/components/fields/RewardPrograms.vue @@ -0,0 +1,73 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + + + + + diff --git a/src/components/fields/TransactionDirection.vue b/src/components/fields/TransactionDirection.vue new file mode 100644 index 0000000..4b1176f --- /dev/null +++ b/src/components/fields/TransactionDirection.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/src/components/fields/TransactionType.vue b/src/components/fields/TransactionType.vue new file mode 100644 index 0000000..b908b50 --- /dev/null +++ b/src/components/fields/TransactionType.vue @@ -0,0 +1,159 @@ + + + + + diff --git a/src/components/fields/Truncate.vue b/src/components/fields/Truncate.vue new file mode 100644 index 0000000..e730881 --- /dev/null +++ b/src/components/fields/Truncate.vue @@ -0,0 +1,33 @@ + + + diff --git a/src/components/graphics/AccountCircle.vue b/src/components/graphics/AccountCircle.vue new file mode 100644 index 0000000..d096f54 --- /dev/null +++ b/src/components/graphics/AccountCircle.vue @@ -0,0 +1,88 @@ + + + diff --git a/src/components/graphics/AccountIcon.vue b/src/components/graphics/AccountIcon.vue new file mode 100644 index 0000000..162f898 --- /dev/null +++ b/src/components/graphics/AccountIcon.vue @@ -0,0 +1,186 @@ + + + + + diff --git a/src/components/graphics/AccountListItem.vue b/src/components/graphics/AccountListItem.vue new file mode 100644 index 0000000..2002440 --- /dev/null +++ b/src/components/graphics/AccountListItem.vue @@ -0,0 +1,64 @@ + + + + + diff --git a/src/components/graphics/AccountListPopover.vue b/src/components/graphics/AccountListPopover.vue new file mode 100644 index 0000000..06f454a --- /dev/null +++ b/src/components/graphics/AccountListPopover.vue @@ -0,0 +1,48 @@ + + + + + diff --git a/src/components/graphics/AccountRemoveCircle.vue b/src/components/graphics/AccountRemoveCircle.vue new file mode 100644 index 0000000..36a727f --- /dev/null +++ b/src/components/graphics/AccountRemoveCircle.vue @@ -0,0 +1,86 @@ + + + diff --git a/src/components/graphics/AddCircle.vue b/src/components/graphics/AddCircle.vue new file mode 100644 index 0000000..ebab05a --- /dev/null +++ b/src/components/graphics/AddCircle.vue @@ -0,0 +1,79 @@ + + + diff --git a/src/components/graphics/Arrow.vue b/src/components/graphics/Arrow.vue new file mode 100644 index 0000000..edb3993 --- /dev/null +++ b/src/components/graphics/Arrow.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/src/components/graphics/EditCircle.vue b/src/components/graphics/EditCircle.vue new file mode 100644 index 0000000..b749c08 --- /dev/null +++ b/src/components/graphics/EditCircle.vue @@ -0,0 +1,80 @@ + + + diff --git a/src/components/graphics/GraphicComponent.vue b/src/components/graphics/GraphicComponent.vue new file mode 100644 index 0000000..f0d8a2f --- /dev/null +++ b/src/components/graphics/GraphicComponent.vue @@ -0,0 +1,268 @@ + + + diff --git a/src/components/graphics/KeyCircle.vue b/src/components/graphics/KeyCircle.vue new file mode 100644 index 0000000..2a7cb77 --- /dev/null +++ b/src/components/graphics/KeyCircle.vue @@ -0,0 +1,80 @@ + + + diff --git a/src/components/graphics/KeyUnlinkCircle.vue b/src/components/graphics/KeyUnlinkCircle.vue new file mode 100644 index 0000000..8a0c594 --- /dev/null +++ b/src/components/graphics/KeyUnlinkCircle.vue @@ -0,0 +1,81 @@ + + + diff --git a/src/components/graphics/LockCircle.vue b/src/components/graphics/LockCircle.vue new file mode 100644 index 0000000..069bc0f --- /dev/null +++ b/src/components/graphics/LockCircle.vue @@ -0,0 +1,77 @@ + + + diff --git a/src/components/graphics/LockIcon.vue b/src/components/graphics/LockIcon.vue new file mode 100644 index 0000000..e5323a2 --- /dev/null +++ b/src/components/graphics/LockIcon.vue @@ -0,0 +1,112 @@ + + + + + diff --git a/src/components/graphics/MessageCircle.vue b/src/components/graphics/MessageCircle.vue new file mode 100644 index 0000000..914b123 --- /dev/null +++ b/src/components/graphics/MessageCircle.vue @@ -0,0 +1,121 @@ + + + diff --git a/src/components/graphics/MessagePopover.vue b/src/components/graphics/MessagePopover.vue new file mode 100644 index 0000000..62a55ae --- /dev/null +++ b/src/components/graphics/MessagePopover.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/src/components/graphics/MetadataCircle.vue b/src/components/graphics/MetadataCircle.vue new file mode 100644 index 0000000..e1bc59f --- /dev/null +++ b/src/components/graphics/MetadataCircle.vue @@ -0,0 +1,80 @@ + + + diff --git a/src/components/graphics/MosaicIcon.vue b/src/components/graphics/MosaicIcon.vue new file mode 100644 index 0000000..d78a9db --- /dev/null +++ b/src/components/graphics/MosaicIcon.vue @@ -0,0 +1,155 @@ + + + + + diff --git a/src/components/graphics/MosaicListItem.vue b/src/components/graphics/MosaicListItem.vue new file mode 100644 index 0000000..41b2426 --- /dev/null +++ b/src/components/graphics/MosaicListItem.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/src/components/graphics/MosaicListPopover.vue b/src/components/graphics/MosaicListPopover.vue new file mode 100644 index 0000000..497d2c4 --- /dev/null +++ b/src/components/graphics/MosaicListPopover.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/src/components/graphics/MosaicRestrictionCircle.vue b/src/components/graphics/MosaicRestrictionCircle.vue new file mode 100644 index 0000000..31dd9f3 --- /dev/null +++ b/src/components/graphics/MosaicRestrictionCircle.vue @@ -0,0 +1,111 @@ + + + diff --git a/src/components/graphics/MosaicsCircle.vue b/src/components/graphics/MosaicsCircle.vue new file mode 100644 index 0000000..1465003 --- /dev/null +++ b/src/components/graphics/MosaicsCircle.vue @@ -0,0 +1,104 @@ + + + diff --git a/src/components/graphics/NamespaceCircle.vue b/src/components/graphics/NamespaceCircle.vue new file mode 100644 index 0000000..a276079 --- /dev/null +++ b/src/components/graphics/NamespaceCircle.vue @@ -0,0 +1,80 @@ + + + diff --git a/src/components/graphics/NamespaceIcon.vue b/src/components/graphics/NamespaceIcon.vue new file mode 100644 index 0000000..7e4c2b3 --- /dev/null +++ b/src/components/graphics/NamespaceIcon.vue @@ -0,0 +1,124 @@ + + + + + diff --git a/src/components/graphics/NamespaceListPopover.vue b/src/components/graphics/NamespaceListPopover.vue new file mode 100644 index 0000000..bf7e9c3 --- /dev/null +++ b/src/components/graphics/NamespaceListPopover.vue @@ -0,0 +1,59 @@ + + + + + diff --git a/src/components/graphics/NamespaceUnlinkCircle.vue b/src/components/graphics/NamespaceUnlinkCircle.vue new file mode 100644 index 0000000..f9dfb7b --- /dev/null +++ b/src/components/graphics/NamespaceUnlinkCircle.vue @@ -0,0 +1,81 @@ + + + diff --git a/src/components/graphics/NativeMosaicCircle.vue b/src/components/graphics/NativeMosaicCircle.vue new file mode 100644 index 0000000..0b4e6f1 --- /dev/null +++ b/src/components/graphics/NativeMosaicCircle.vue @@ -0,0 +1,113 @@ + + + + + diff --git a/src/components/graphics/NativeMosaicIcon.vue b/src/components/graphics/NativeMosaicIcon.vue new file mode 100644 index 0000000..17a8757 --- /dev/null +++ b/src/components/graphics/NativeMosaicIcon.vue @@ -0,0 +1,115 @@ + + + + + diff --git a/src/components/graphics/RestrictionAddressCircle.vue b/src/components/graphics/RestrictionAddressCircle.vue new file mode 100644 index 0000000..b224c77 --- /dev/null +++ b/src/components/graphics/RestrictionAddressCircle.vue @@ -0,0 +1,79 @@ + + + diff --git a/src/components/graphics/RestrictionAddressListPopover.vue b/src/components/graphics/RestrictionAddressListPopover.vue new file mode 100644 index 0000000..3dd8611 --- /dev/null +++ b/src/components/graphics/RestrictionAddressListPopover.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/src/components/graphics/RestrictionMosaicCircle.vue b/src/components/graphics/RestrictionMosaicCircle.vue new file mode 100644 index 0000000..5b1ab29 --- /dev/null +++ b/src/components/graphics/RestrictionMosaicCircle.vue @@ -0,0 +1,79 @@ + + + diff --git a/src/components/graphics/RestrictionMosaicListPopover.vue b/src/components/graphics/RestrictionMosaicListPopover.vue new file mode 100644 index 0000000..5fb7ac7 --- /dev/null +++ b/src/components/graphics/RestrictionMosaicListPopover.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/src/components/graphics/RestrictionOperationCircle.vue b/src/components/graphics/RestrictionOperationCircle.vue new file mode 100644 index 0000000..fbcf591 --- /dev/null +++ b/src/components/graphics/RestrictionOperationCircle.vue @@ -0,0 +1,79 @@ + + + diff --git a/src/components/graphics/RestrictionOperationListPopover.vue b/src/components/graphics/RestrictionOperationListPopover.vue new file mode 100644 index 0000000..3295600 --- /dev/null +++ b/src/components/graphics/RestrictionOperationListPopover.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/src/components/graphics/RestrictionPopover.vue b/src/components/graphics/RestrictionPopover.vue new file mode 100644 index 0000000..ff0076e --- /dev/null +++ b/src/components/graphics/RestrictionPopover.vue @@ -0,0 +1,120 @@ + + + + + diff --git a/src/components/graphics/TablePopover.vue b/src/components/graphics/TablePopover.vue new file mode 100644 index 0000000..33f0349 --- /dev/null +++ b/src/components/graphics/TablePopover.vue @@ -0,0 +1,64 @@ + + + + + diff --git a/src/components/graphics/TransactionTypeListItem.vue b/src/components/graphics/TransactionTypeListItem.vue new file mode 100644 index 0000000..d6a6168 --- /dev/null +++ b/src/components/graphics/TransactionTypeListItem.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/src/components/layout/Footer.vue b/src/components/layout/Footer.vue new file mode 100644 index 0000000..4567d45 --- /dev/null +++ b/src/components/layout/Footer.vue @@ -0,0 +1,168 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + + + + + diff --git a/src/components/layout/Header.vue b/src/components/layout/Header.vue new file mode 100644 index 0000000..e7c172b --- /dev/null +++ b/src/components/layout/Header.vue @@ -0,0 +1,177 @@ + + + + + diff --git a/src/components/menu/MobileMenu.vue b/src/components/menu/MobileMenu.vue new file mode 100644 index 0000000..6ca6f23 --- /dev/null +++ b/src/components/menu/MobileMenu.vue @@ -0,0 +1,251 @@ + + + + + diff --git a/src/components/menu/NavigationMenu.vue b/src/components/menu/NavigationMenu.vue new file mode 100644 index 0000000..bd68f8d --- /dev/null +++ b/src/components/menu/NavigationMenu.vue @@ -0,0 +1,166 @@ + + + + + diff --git a/src/components/tables/TableInfoView.vue b/src/components/tables/TableInfoView.vue new file mode 100644 index 0000000..99da364 --- /dev/null +++ b/src/components/tables/TableInfoView.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/src/components/tables/TableListView.vue b/src/components/tables/TableListView.vue new file mode 100644 index 0000000..801c758 --- /dev/null +++ b/src/components/tables/TableListView.vue @@ -0,0 +1,294 @@ + + + + + diff --git a/src/components/tables/TableView.vue b/src/components/tables/TableView.vue new file mode 100644 index 0000000..ea1a5da --- /dev/null +++ b/src/components/tables/TableView.vue @@ -0,0 +1,368 @@ + + + diff --git a/src/components/transaction-graphic/AccountAddressRestrictionGraphic.vue b/src/components/transaction-graphic/AccountAddressRestrictionGraphic.vue new file mode 100644 index 0000000..3cf8d86 --- /dev/null +++ b/src/components/transaction-graphic/AccountAddressRestrictionGraphic.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/src/components/transaction-graphic/AccountKeyLinkGraphic.vue b/src/components/transaction-graphic/AccountKeyLinkGraphic.vue new file mode 100644 index 0000000..8a757a6 --- /dev/null +++ b/src/components/transaction-graphic/AccountKeyLinkGraphic.vue @@ -0,0 +1,127 @@ + + + diff --git a/src/components/transaction-graphic/AccountMetadataGraphic.vue b/src/components/transaction-graphic/AccountMetadataGraphic.vue new file mode 100644 index 0000000..d25f584 --- /dev/null +++ b/src/components/transaction-graphic/AccountMetadataGraphic.vue @@ -0,0 +1,112 @@ + + + diff --git a/src/components/transaction-graphic/AccountMosaicRestrictionGraphic.vue b/src/components/transaction-graphic/AccountMosaicRestrictionGraphic.vue new file mode 100644 index 0000000..2dc0a88 --- /dev/null +++ b/src/components/transaction-graphic/AccountMosaicRestrictionGraphic.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/src/components/transaction-graphic/AccountOperationRestrictionGraphic.vue b/src/components/transaction-graphic/AccountOperationRestrictionGraphic.vue new file mode 100644 index 0000000..1783b68 --- /dev/null +++ b/src/components/transaction-graphic/AccountOperationRestrictionGraphic.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/src/components/transaction-graphic/AddressAliasGraphic.vue b/src/components/transaction-graphic/AddressAliasGraphic.vue new file mode 100644 index 0000000..d007bf1 --- /dev/null +++ b/src/components/transaction-graphic/AddressAliasGraphic.vue @@ -0,0 +1,124 @@ + + + diff --git a/src/components/transaction-graphic/HashLockGraphic.vue b/src/components/transaction-graphic/HashLockGraphic.vue new file mode 100644 index 0000000..3405da8 --- /dev/null +++ b/src/components/transaction-graphic/HashLockGraphic.vue @@ -0,0 +1,101 @@ + + + diff --git a/src/components/transaction-graphic/MosaicAddressRestrictionGraphic.vue b/src/components/transaction-graphic/MosaicAddressRestrictionGraphic.vue new file mode 100644 index 0000000..22d0b2f --- /dev/null +++ b/src/components/transaction-graphic/MosaicAddressRestrictionGraphic.vue @@ -0,0 +1,115 @@ + + + diff --git a/src/components/transaction-graphic/MosaicAliasGraphic.vue b/src/components/transaction-graphic/MosaicAliasGraphic.vue new file mode 100644 index 0000000..4509d27 --- /dev/null +++ b/src/components/transaction-graphic/MosaicAliasGraphic.vue @@ -0,0 +1,129 @@ + + + diff --git a/src/components/transaction-graphic/MosaicDefinitionGraphic.vue b/src/components/transaction-graphic/MosaicDefinitionGraphic.vue new file mode 100644 index 0000000..5a68ad9 --- /dev/null +++ b/src/components/transaction-graphic/MosaicDefinitionGraphic.vue @@ -0,0 +1,127 @@ + + + diff --git a/src/components/transaction-graphic/MosaicGlobalRestrictionGraphic.vue b/src/components/transaction-graphic/MosaicGlobalRestrictionGraphic.vue new file mode 100644 index 0000000..bad5778 --- /dev/null +++ b/src/components/transaction-graphic/MosaicGlobalRestrictionGraphic.vue @@ -0,0 +1,125 @@ + + + diff --git a/src/components/transaction-graphic/MosaicMetadataGraphic.vue b/src/components/transaction-graphic/MosaicMetadataGraphic.vue new file mode 100644 index 0000000..4fbee9d --- /dev/null +++ b/src/components/transaction-graphic/MosaicMetadataGraphic.vue @@ -0,0 +1,124 @@ + + + diff --git a/src/components/transaction-graphic/MosaicSupplyChangeGraphic.vue b/src/components/transaction-graphic/MosaicSupplyChangeGraphic.vue new file mode 100644 index 0000000..132d9ca --- /dev/null +++ b/src/components/transaction-graphic/MosaicSupplyChangeGraphic.vue @@ -0,0 +1,113 @@ + + + diff --git a/src/components/transaction-graphic/MultisigAccountModificationGraphic.vue b/src/components/transaction-graphic/MultisigAccountModificationGraphic.vue new file mode 100644 index 0000000..1fc5fdc --- /dev/null +++ b/src/components/transaction-graphic/MultisigAccountModificationGraphic.vue @@ -0,0 +1,132 @@ + + + diff --git a/src/components/transaction-graphic/NamespaceMetadataGraphic.vue b/src/components/transaction-graphic/NamespaceMetadataGraphic.vue new file mode 100644 index 0000000..59032ca --- /dev/null +++ b/src/components/transaction-graphic/NamespaceMetadataGraphic.vue @@ -0,0 +1,127 @@ + + + diff --git a/src/components/transaction-graphic/NamespaceRegistrationGraphic.vue b/src/components/transaction-graphic/NamespaceRegistrationGraphic.vue new file mode 100644 index 0000000..56dc634 --- /dev/null +++ b/src/components/transaction-graphic/NamespaceRegistrationGraphic.vue @@ -0,0 +1,108 @@ + + + diff --git a/src/components/transaction-graphic/NodeKeyLinkGraphic.vue b/src/components/transaction-graphic/NodeKeyLinkGraphic.vue new file mode 100644 index 0000000..e499370 --- /dev/null +++ b/src/components/transaction-graphic/NodeKeyLinkGraphic.vue @@ -0,0 +1,127 @@ + + + diff --git a/src/components/transaction-graphic/SecretLockGraphic.vue b/src/components/transaction-graphic/SecretLockGraphic.vue new file mode 100644 index 0000000..a3a72df --- /dev/null +++ b/src/components/transaction-graphic/SecretLockGraphic.vue @@ -0,0 +1,143 @@ + + + + + diff --git a/src/components/transaction-graphic/SecretProofGraphic.vue b/src/components/transaction-graphic/SecretProofGraphic.vue new file mode 100644 index 0000000..8f3fb62 --- /dev/null +++ b/src/components/transaction-graphic/SecretProofGraphic.vue @@ -0,0 +1,118 @@ + + + + + diff --git a/src/components/transaction-graphic/TransactionGraphic.vue b/src/components/transaction-graphic/TransactionGraphic.vue new file mode 100644 index 0000000..270b0fe --- /dev/null +++ b/src/components/transaction-graphic/TransactionGraphic.vue @@ -0,0 +1,103 @@ + + + diff --git a/src/components/transaction-graphic/TransferGraphic.vue b/src/components/transaction-graphic/TransferGraphic.vue new file mode 100644 index 0000000..a16739d --- /dev/null +++ b/src/components/transaction-graphic/TransferGraphic.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/src/components/transaction-graphic/VotingKeyLinkGraphic.vue b/src/components/transaction-graphic/VotingKeyLinkGraphic.vue new file mode 100644 index 0000000..5b5fb57 --- /dev/null +++ b/src/components/transaction-graphic/VotingKeyLinkGraphic.vue @@ -0,0 +1,135 @@ + + + diff --git a/src/components/transaction-graphic/VrfKeyGraphic.vue b/src/components/transaction-graphic/VrfKeyGraphic.vue new file mode 100644 index 0000000..3477fd3 --- /dev/null +++ b/src/components/transaction-graphic/VrfKeyGraphic.vue @@ -0,0 +1,127 @@ + + + diff --git a/src/components/widgets/AccountBalanceWidget.vue b/src/components/widgets/AccountBalanceWidget.vue new file mode 100644 index 0000000..d6d66dd --- /dev/null +++ b/src/components/widgets/AccountBalanceWidget.vue @@ -0,0 +1,200 @@ + + + + + diff --git a/src/components/widgets/BaseInfoWidget.vue b/src/components/widgets/BaseInfoWidget.vue new file mode 100644 index 0000000..4ee8851 --- /dev/null +++ b/src/components/widgets/BaseInfoWidget.vue @@ -0,0 +1,137 @@ + + + + + diff --git a/src/components/widgets/ChartBlockTimeDifference.vue b/src/components/widgets/ChartBlockTimeDifference.vue new file mode 100644 index 0000000..42c6c85 --- /dev/null +++ b/src/components/widgets/ChartBlockTimeDifference.vue @@ -0,0 +1,51 @@ + + + diff --git a/src/components/widgets/ChartTransactionPerBlock.vue b/src/components/widgets/ChartTransactionPerBlock.vue new file mode 100644 index 0000000..3bcc373 --- /dev/null +++ b/src/components/widgets/ChartTransactionPerBlock.vue @@ -0,0 +1,50 @@ + + + diff --git a/src/components/widgets/NetworkFeesWidget.vue b/src/components/widgets/NetworkFeesWidget.vue new file mode 100644 index 0000000..a907e47 --- /dev/null +++ b/src/components/widgets/NetworkFeesWidget.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/src/components/widgets/NetworkRentalFeesWidget.vue b/src/components/widgets/NetworkRentalFeesWidget.vue new file mode 100644 index 0000000..913d945 --- /dev/null +++ b/src/components/widgets/NetworkRentalFeesWidget.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/src/components/widgets/NodeStatsWidget.vue b/src/components/widgets/NodeStatsWidget.vue new file mode 100644 index 0000000..69e9746 --- /dev/null +++ b/src/components/widgets/NodeStatsWidget.vue @@ -0,0 +1,217 @@ + + + + + diff --git a/src/components/widgets/NodesMapWidget.vue b/src/components/widgets/NodesMapWidget.vue new file mode 100644 index 0000000..23682ff --- /dev/null +++ b/src/components/widgets/NodesMapWidget.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/src/components/widgets/PriceChartWidget.vue b/src/components/widgets/PriceChartWidget.vue new file mode 100644 index 0000000..e29c5d2 --- /dev/null +++ b/src/components/widgets/PriceChartWidget.vue @@ -0,0 +1,61 @@ + + + diff --git a/src/components/widgets/RecentBlocksWidget.vue b/src/components/widgets/RecentBlocksWidget.vue new file mode 100644 index 0000000..df0af99 --- /dev/null +++ b/src/components/widgets/RecentBlocksWidget.vue @@ -0,0 +1,149 @@ + + + + + diff --git a/src/components/widgets/RecentTransactionsWidget.vue b/src/components/widgets/RecentTransactionsWidget.vue new file mode 100644 index 0000000..21c9ba6 --- /dev/null +++ b/src/components/widgets/RecentTransactionsWidget.vue @@ -0,0 +1,150 @@ + + + + + diff --git a/src/components/widgets/TransactionGraphicWidget.vue b/src/components/widgets/TransactionGraphicWidget.vue new file mode 100644 index 0000000..b4ca678 --- /dev/null +++ b/src/components/widgets/TransactionGraphicWidget.vue @@ -0,0 +1,243 @@ + + + + + diff --git a/src/components/widgets/TransactionStatusWidget.vue b/src/components/widgets/TransactionStatusWidget.vue new file mode 100644 index 0000000..ae0062e --- /dev/null +++ b/src/components/widgets/TransactionStatusWidget.vue @@ -0,0 +1,150 @@ + + + + + diff --git a/src/config/constants.js b/src/config/constants.js new file mode 100644 index 0000000..6b47966 --- /dev/null +++ b/src/config/constants.js @@ -0,0 +1,205 @@ +import { + TransactionType, + MosaicSupplyChangeAction, + NamespaceRegistrationType, + AliasAction, + LinkAction, + AccountType, + AccountKeyTypeFlags, + LockHashAlgorithm, + NetworkType, + MetadataType, + ReceiptType, + ResolutionType, + AddressRestrictionFlag, + MosaicRestrictionFlag, + OperationRestrictionFlag, + MosaicRestrictionEntryType, + MosaicRestrictionType, + LockStatus, + BlockType +} from 'symbol-sdk'; + +class Constants { + static PageSize = 25 + + static Message = { + UNLIMITED: 'UNLIMITED', + UNAVAILABLE: 'N/A', + INFINITY: 'INFINITY', + MOSAIC: 'MOSAIC', + ADDRESS: 'ADDRESS', + NO_ALIAS: 'NO ALIAS', + ACTIVE: 'ACTIVE', + INACTIVE: 'INACTIVE', + UNKNOWN: 'UNKNOWN', + EXPIRED: 'EXPIRED' + } + + static TransactionType = { + [TransactionType.TRANSFER]: 'Transfer', + [TransactionType.NAMESPACE_REGISTRATION]: 'Namespace Registration', + [TransactionType.ADDRESS_ALIAS]: 'Address Alias', + [TransactionType.MOSAIC_ALIAS]: 'Mosaic Alias', + [TransactionType.MOSAIC_DEFINITION]: 'Mosaic Definition', + [TransactionType.MOSAIC_SUPPLY_CHANGE]: 'Mosaic Supply Change', + [TransactionType.MULTISIG_ACCOUNT_MODIFICATION]: 'Multisig Account Modification', + [TransactionType.AGGREGATE_COMPLETE]: 'Aggregate Complete', + [TransactionType.AGGREGATE_BONDED]: 'Aggregate Bonded', + [TransactionType.HASH_LOCK]: 'Hash Lock', + [TransactionType.SECRET_LOCK]: 'Secret Lock', + [TransactionType.SECRET_PROOF]: 'Secret Proof', + [TransactionType.ACCOUNT_ADDRESS_RESTRICTION]: 'Account Address Restriction', + [TransactionType.ACCOUNT_MOSAIC_RESTRICTION]: 'Account Mosaic Restriction', + [TransactionType.ACCOUNT_OPERATION_RESTRICTION]: 'Account Operation Restriction', + [TransactionType.ACCOUNT_KEY_LINK]: 'Account Key Link', + [TransactionType.MOSAIC_ADDRESS_RESTRICTION]: 'Mosaic Address Restriction', + [TransactionType.MOSAIC_GLOBAL_RESTRICTION]: 'Mosaic Global Restriction', + [TransactionType.ACCOUNT_METADATA]: 'Account Metadata', + [TransactionType.MOSAIC_METADATA]: 'Mosaic Metadata', + [TransactionType.NAMESPACE_METADATA]: 'Namespace Metadata', + [TransactionType.VRF_KEY_LINK]: 'VRF Key Link', + [TransactionType.VOTING_KEY_LINK]: 'Voting Key Link', + [TransactionType.NODE_KEY_LINK]: 'Node Key Link' + } + + static MosaicSupplyChangeAction = { + [MosaicSupplyChangeAction.Increase]: 'Increase', + [MosaicSupplyChangeAction.Decrease]: 'Decrease' + } + + static NamespaceRegistrationType = { + [NamespaceRegistrationType.RootNamespace]: 'rootNamespace', + [NamespaceRegistrationType.SubNamespace]: 'Sub Namespace' + } + + static AliasAction = { + [AliasAction.Link]: 'Link', + [AliasAction.Unlink]: 'Unlink' + } + + static LinkAction = { + [LinkAction.Link]: 'Link', + [LinkAction.Unlink]: 'Unlink' + } + + static AccountType = { + [AccountType.Unlinked]: 'Unlinked', + [AccountType.Main]: 'Main', + [AccountType.Remote]: 'Remote', + [AccountType.Remote_Unlinked]: 'Remote Unlinked' + } + + static AccountKeyTypeFlags = { + [AccountKeyTypeFlags.Unset]: 'Unset', + [AccountKeyTypeFlags.Linked]: 'Linked', + [AccountKeyTypeFlags.VRF]: 'VRF', + [AccountKeyTypeFlags.Node]: 'Node', + [AccountKeyTypeFlags.All]: 'All' + } + + static LockHashAlgorithm = { + [LockHashAlgorithm.Op_Sha3_256]: 'Sha3 256', + [LockHashAlgorithm.Op_Hash_160]: 'Hash 160', + [LockHashAlgorithm.Op_Hash_256]: 'Hash 256' + } + + static MetadataType = { + [MetadataType.Account]: 'Account', + [MetadataType.Mosaic]: 'Mosaic', + [MetadataType.Namespace]: 'Namespace' + } + + static ReceiptType = { + [ReceiptType.Harvest_Fee]: 'Harvest Fee', + [ReceiptType.LockHash_Created]: 'LockHash Created', + [ReceiptType.LockHash_Completed]: 'LockHash Completed', + [ReceiptType.LockHash_Expired]: 'LockHash Expired', + [ReceiptType.LockSecret_Created]: 'LockSecret Created', + [ReceiptType.LockSecret_Completed]: 'LockSecret Completed', + [ReceiptType.LockSecret_Expired]: 'LockSecret Expired', + [ReceiptType.Mosaic_Levy]: 'Mosaic Levy', + [ReceiptType.Mosaic_Rental_Fee]: 'Mosaic Rental Fee', + [ReceiptType.Namespace_Rental_Fee]: 'Namespace Rental Fee', + [ReceiptType.Mosaic_Expired]: 'Mosaic Expired', + [ReceiptType.Namespace_Expired]: 'Namespace Expired', + [ReceiptType.Namespace_Deleted]: 'Namespace Deleted', + [ReceiptType.Inflation]: 'Inflation' + } + + static ResolutionType = { + [ResolutionType.Address]: 'Address', + [ResolutionType.Mosaic]: 'Mosaic' + } + + static NetworkType = { + [NetworkType.MAIN_NET]: 'MAINNET', + [NetworkType.MIJIN]: 'MIJIN', + [NetworkType.MIJIN_TEST]: 'MIJIN TESTNET', + [NetworkType.TEST_NET]: 'TESTNET' + } + + static RoleType = { + 1: 'Peer node', + 2: 'Api node', + 3: 'Peer Api node', + 4: 'Voting node', + 5: 'Peer Voting node', + 6: 'Api Voting node', + 7: 'Peer Api Voting node' + } + + static AddressRestrictionFlag = { + [AddressRestrictionFlag.AllowIncomingAddress]: 'Allow Incoming Addresses', + [AddressRestrictionFlag.AllowOutgoingAddress]: 'Allow Outgoing Addresses', + [AddressRestrictionFlag.BlockIncomingAddress]: 'Block Incoming Addresses', + [AddressRestrictionFlag.BlockOutgoingAddress]: 'Block Outgoing Addresses' + } + + static MosaicRestrictionFlag = { + [MosaicRestrictionFlag.AllowMosaic]: 'Allow Mosaics', + [MosaicRestrictionFlag.BlockMosaic]: 'Block Mosaics' + } + + static OperationRestrictionFlag = { + [OperationRestrictionFlag.AllowOutgoingTransactionType]: 'Allow Outgoing Transactions', + [OperationRestrictionFlag.BlockOutgoingTransactionType]: 'Block Outgoing Transactions' + } + + static MosaicRestrictionEntryType = { + [MosaicRestrictionEntryType.ADDRESS]: 'Mosaic address restriction', + [MosaicRestrictionEntryType.GLOBAL]: 'Mosaic global restriction' + } + + static MosaicRestrictionType = { + [MosaicRestrictionType.EQ]: 'mosaicRestrictionType.EQ', + [MosaicRestrictionType.GE]: 'mosaicRestrictionType.GE', + [MosaicRestrictionType.GT]: 'mosaicRestrictionType.GT', + [MosaicRestrictionType.LE]: 'mosaicRestrictionType.LE', + [MosaicRestrictionType.LT]: 'mosaicRestrictionType.LT', + [MosaicRestrictionType.NE]: 'mosaicRestrictionType.NE', + [MosaicRestrictionType.NONE]: 'mosaicRestrictionType.NONE' + } + + static MerkleRootsOrder = ['AccountState', 'Namespace', 'Mosaic', 'Multisig', 'HashLockInfo', 'SecretLockInfo', 'AccountRestriction', 'MosaicRestriction', 'Metadata'] + + static ReceiptTransactionStatamentType = { + BalanceChangeReceipt: 'Balance Change Receipt', + BalanceTransferReceipt: 'Balance Transfer Receipt', + InflationReceipt: 'Inflation Receipt', + ArtifactExpiryReceipt: 'Artifact Expiry Receipt' + } + + static LockStatusType = { + [LockStatus.UNUSED]: 'Unused', + [LockStatus.USED]: 'Used' + } + + static BlockType = { + [BlockType.ImportanceBlock]: 'Importance Block', + [BlockType.NemesisBlock]: 'Nemesis Block', + [BlockType.NormalBlock]: 'Normal Block' + } +} + +export default Constants; diff --git a/src/config/default.dhealth.json b/src/config/default.dhealth.json new file mode 100644 index 0000000..d722063 --- /dev/null +++ b/src/config/default.dhealth.json @@ -0,0 +1,48 @@ +{ + "peersApi": { + "defaultNode": "http://dual-01.dhealth.cloud:3000", + "nodes": [ + "http://dual-01.dhealth.cloud:3000", + "http://dual-02.dhealth.cloud:3000", + "http://dual-03.dhealth.cloud:3000", + "http://api-01.dhealth.cloud:3000", + "http://api-02.dhealth.cloud:3000" + ] + }, + "apiNodePort": 3000, + "endpoints": { + "marketData": "https://min-api.cryptocompare.com/" + }, + "networkConfig": { + "namespaceName": "dhealth.dhp", + "mosaicId": "39E0C49FA322A459", + "namespaceId": "9D8930CDBB417337", + "divisibility": "6", + "networkIdentifier": 104 + }, + "footer": { + "link": [ + { + "href": "https://dhealth.network", + "text": "dHealth Network", + "icon": "IconNewspaper" + }, + { + "href": "https://ubc.digital", + "text": "UBC Digital Magazine", + "icon": "IconReddit" + }, + { + "href": "https://docs.yourdlt.tools", + "text": "YourDLT", + "icon": "IconForum" + }, + { + "href": "https://github.com/UsingBlockchain", + "text": "Github", + "icon": "IconGithub" + } + ] + } +} + diff --git a/src/config/default.json b/src/config/default.json new file mode 100644 index 0000000..d722063 --- /dev/null +++ b/src/config/default.json @@ -0,0 +1,48 @@ +{ + "peersApi": { + "defaultNode": "http://dual-01.dhealth.cloud:3000", + "nodes": [ + "http://dual-01.dhealth.cloud:3000", + "http://dual-02.dhealth.cloud:3000", + "http://dual-03.dhealth.cloud:3000", + "http://api-01.dhealth.cloud:3000", + "http://api-02.dhealth.cloud:3000" + ] + }, + "apiNodePort": 3000, + "endpoints": { + "marketData": "https://min-api.cryptocompare.com/" + }, + "networkConfig": { + "namespaceName": "dhealth.dhp", + "mosaicId": "39E0C49FA322A459", + "namespaceId": "9D8930CDBB417337", + "divisibility": "6", + "networkIdentifier": 104 + }, + "footer": { + "link": [ + { + "href": "https://dhealth.network", + "text": "dHealth Network", + "icon": "IconNewspaper" + }, + { + "href": "https://ubc.digital", + "text": "UBC Digital Magazine", + "icon": "IconReddit" + }, + { + "href": "https://docs.yourdlt.tools", + "text": "YourDLT", + "icon": "IconForum" + }, + { + "href": "https://github.com/UsingBlockchain", + "text": "Github", + "icon": "IconGithub" + } + ] + } +} + diff --git a/src/config/default.mainnet.json b/src/config/default.mainnet.json new file mode 100644 index 0000000..44db22a --- /dev/null +++ b/src/config/default.mainnet.json @@ -0,0 +1,40 @@ +{ + "peersApi": { + "defaultNode": "http://ngl-dual-001.symbolblockchain.io:3000", + "nodes": [ + "http://ngl-dual-001.symbolblockchain.io:3000", + "http://ngl-dual-101.symbolblockchain.io:3000" + ] + }, + "apiNodePort": 3000, + "endpoints": { + "marketData": "https://min-api.cryptocompare.com/" + }, + "networkConfig": { + "namespaceName": "symbol.xym", + "mosaicId": "6BED913FA20223F8", + "namespaceId": "E74B99BA41F4AFEE", + "divisibility": "6", + "networkIdentifier": 152 + }, + "footer": { + "link": [ + { + "href": "https://ubc.digital", + "text": "UBC Digital Magazine", + "icon": "IconNewspaper" + }, + { + "href": "https://docs.yourdlt.tools", + "text": "YourDLT", + "icon": "IconForum" + }, + { + "href": "https://github.com/UsingBlockchain", + "text": "Github", + "icon": "IconGithub" + } + ] + } +} + diff --git a/src/config/default.testnet.json b/src/config/default.testnet.json new file mode 100644 index 0000000..f584af9 --- /dev/null +++ b/src/config/default.testnet.json @@ -0,0 +1,45 @@ +{ + "peersApi": { + "defaultNode": "http://ngl-dual-001.testnet.symboldev.network:3000", + "nodes": [ + "http://ngl-dual-001.testnet.symboldev.network:3000", + "http://ngl-dual-101.testnet.symboldev.network:3000" + ] + }, + "apiNodePort": 3000, + "endpoints": { + "marketData": "https://min-api.cryptocompare.com/" + }, + "networkConfig": { + "namespaceName": "symbol.xym", + "mosaicId": "091F837E059AE13C", + "namespaceId": "E74B99BA41F4AFEE", + "divisibility": "6", + "networkIdentifier": 152 + }, + "footer": { + "link": [ + { + "href": "https://ubc.digital", + "text": "UBC Digital Magazine", + "icon": "IconNewspaper" + }, + { + "href": "https://docs.yourdlt.tools", + "text": "YourDLT", + "icon": "IconForum" + }, + { + "href": "https://github.com/UsingBlockchain", + "text": "Github", + "icon": "IconGithub" + }, + { + "href": "http://faucet.testnet.symboldev.network/", + "text": "Faucet", + "icon": "IconHomeCurrencyUsd" + } + ] + } +} + diff --git a/src/config/filters.js b/src/config/filters.js new file mode 100644 index 0000000..1a2e391 --- /dev/null +++ b/src/config/filters.js @@ -0,0 +1,422 @@ +import { + TransactionType, + TransactionGroup, + AliasType, + NamespaceRegistrationType, + MosaicId, + AccountOrderBy, + MetadataType, + MosaicRestrictionEntryType, + ReceiptType +} from 'symbol-sdk'; +import http from '../infrastructure/http'; +import Constants from '../config/constants'; + +const customTransactionReceiptFilter = { + balanceTransfer: { + receiptTypes: [ + ReceiptType.Mosaic_Rental_Fee, + ReceiptType.Namespace_Rental_Fee + ], + receiptTransactionStatementType: Constants.ReceiptTransactionStatamentType.BalanceTransferReceipt + }, + balanceChange: { + receiptTypes: [ + ReceiptType.Harvest_Fee, + ReceiptType.LockHash_Created, + ReceiptType.LockHash_Completed, + ReceiptType.LockHash_Expired, + ReceiptType.LockSecret_Created, + ReceiptType.LockSecret_Completed, + ReceiptType.LockSecret_Expired + ], + receiptTransactionStatementType: Constants.ReceiptTransactionStatamentType.BalanceChangeReceipt + }, + artifactExpiry: { + receiptTypes: [ + ReceiptType.Mosaic_Expired, + ReceiptType.Namespace_Expired, + ReceiptType.Namespace_Deleted + ], + receiptTransactionStatementType: Constants.ReceiptTransactionStatamentType.ArtifactExpiryReceipt + }, + inflation: { + receiptTypes: [ + ReceiptType.Inflation + ], + receiptTransactionStatementType: Constants.ReceiptTransactionStatamentType.InflationReceipt + } +}; + +export const transaction = [ + { + label: 'Recent', + icon: 'mdi-clock-outline', + value: {} + }, + { + label: 'Unconfirmed', + icon: 'mdi-dots-horizontal', + value: { group: TransactionGroup.Unconfirmed } + }, + { + label: 'Partial', + icon: 'mdi-dots-horizontal', + value: { group: TransactionGroup.Partial } + }, + { + label: 'Transfer', + icon: 'mdi-swap-vertical', + value: { type: [TransactionType.TRANSFER] } + }, + { + label: 'Account', + icon: 'mdi-account', + value: { + type: [ + TransactionType.ADDRESS_ALIAS, + TransactionType.MULTISIG_ACCOUNT_MODIFICATION, + TransactionType.ACCOUNT_ADDRESS_RESTRICTION, + TransactionType.ACCOUNT_MOSAIC_RESTRICTION, + TransactionType.ACCOUNT_OPERATION_RESTRICTION, + TransactionType.ACCOUNT_KEY_LINK, + TransactionType.ACCOUNT_METADATA, + TransactionType.VRF_KEY_LINK, + TransactionType.VOTING_KEY_LINK, + TransactionType.NODE_KEY_LINK + ] + } + }, + { + label: 'Aggregate', + icon: 'mdi-gamepad-circle', + value: { + type: [ + TransactionType.AGGREGATE_COMPLETE, + TransactionType.AGGREGATE_BONDED, + TransactionType.HASH_LOCK + ] + } + }, + { + label: 'Alias', + icon: 'mdi-comment-account', + value: { + type: [ + TransactionType.ADDRESS_ALIAS, + TransactionType.MOSAIC_ALIAS + ] + } + }, + { + label: 'Metadata', + icon: 'mdi-xml', + value: { + type: [ + TransactionType.ACCOUNT_METADATA, + TransactionType.MOSAIC_METADATA, + TransactionType.NAMESPACE_METADATA + ] + } + }, + { + label: 'Mosaic', + icon: 'mdi-circle', + value: { + type: [ + TransactionType.MOSAIC_ALIAS, + TransactionType.MOSAIC_DEFINITION, + TransactionType.MOSAIC_SUPPLY_CHANGE, + TransactionType.ACCOUNT_MOSAIC_RESTRICTION, + TransactionType.MOSAIC_ADDRESS_RESTRICTION, + TransactionType.MOSAIC_GLOBAL_RESTRICTION, + TransactionType.MOSAIC_METADATA + ] + } + }, + { + label: 'Namespace', + icon: 'mdi-tag', + value: { + type: [ + TransactionType.NAMESPACE_REGISTRATION, + TransactionType.NAMESPACE_METADATA + ] + } + }, + { + label: 'Restriction', + icon: 'mdi-alert', + value: { + type: [ + TransactionType.ACCOUNT_ADDRESS_RESTRICTION, + TransactionType.ACCOUNT_MOSAIC_RESTRICTION, + TransactionType.ACCOUNT_OPERATION_RESTRICTION, + TransactionType.MOSAIC_ADDRESS_RESTRICTION, + TransactionType.MOSAIC_GLOBAL_RESTRICTION + ] + } + }, + { + label: 'Secret', + icon: 'mdi-lock', + value: { + type: [ + TransactionType.SECRET_LOCK, + TransactionType.SECRET_PROOF + ] + } + }, + { + label: 'Key Link', + icon: 'mdi-link', + value: { + type: [ + TransactionType.VOTING_KEY_LINK, + TransactionType.VRF_KEY_LINK, + TransactionType.NODE_KEY_LINK, + TransactionType.ACCOUNT_KEY_LINK + ] + } + } +]; + +export const account = [ + { + label: 'Recent', + icon: 'mdi-clock-outline', + value: {} + }, + { + label: 'Rich List', + icon: 'mdi-circle', + value: { + orderBy: AccountOrderBy.Balance, + mosaicId: new MosaicId(http.networkCurrency.mosaicId) + } + } +]; + +export const namespace = [ + { + label: 'Recent', + icon: 'mdi-clock-outline', + value: {} + }, + { + label: 'Address Alias', + icon: 'mdi-account', + value: { + aliasType: AliasType.Address + } + }, + { + label: 'Mosaic Alias', + icon: 'mdi-circle', + value: { + aliasType: AliasType.Mosaic + } + }, + { + label: 'Root', + icon: 'mdi-tag', + value: { + registrationType: NamespaceRegistrationType.RootNamespace + } + }, + { + label: 'Sub', + icon: 'mdi-tag', + value: { + registrationType: NamespaceRegistrationType.SubNamespace + } + } +]; + +export const metadata = [ + { + label: 'Recent', + icon: 'mdi-clock-outline', + value: {} + }, + { + label: 'Address Alias', + icon: 'mdi-account', + value: { + metadataType: MetadataType.Account + } + }, + { + label: 'Mosaic Alias', + icon: 'mdi-circle', + value: { + metadataType: MetadataType.Mosaic + } + }, + { + label: 'Namespace', + icon: 'mdi-tag', + value: { + metadataType: MetadataType.Namespace + } + } +]; + +export const mosaicRestriction = [ + { + label: 'Mosaic Global Restriction', + icon: 'mdi-alert', + value: { + entryType: MosaicRestrictionEntryType.GLOBAL + } + }, + { + label: 'Mosaic Address Restriction', + icon: 'mdi-account', + value: { + entryType: MosaicRestrictionEntryType.ADDRESS + } + } +]; + +export const nodeRoles = [ + { + label: 'All Nodes', + icon: '', + value: { + rolesRaw: null + } + }, + { + label: Constants.RoleType[1], + icon: '', + value: { + rolesRaw: 1 + } + }, + { + label: Constants.RoleType[2], + icon: '', + value: { + rolesRaw: 2 + } + }, + { + label: Constants.RoleType[3], + icon: '', + value: { + rolesRaw: 3 + } + }, + { + label: Constants.RoleType[4], + icon: '', + value: { + rolesRaw: 4 + } + }, + { + label: Constants.RoleType[5], + icon: '', + value: { + rolesRaw: 5 + } + }, + { + label: Constants.RoleType[6], + icon: '', + value: { + rolesRaw: 6 + } + }, + { + label: Constants.RoleType[7], + icon: '', + value: { + rolesRaw: 7 + } + }, + { + label: 'RP - SuperNode', + icon: '', + value: { + rolesRaw: null, + rewardProgram: 'SuperNode' + } + }, + { + label: 'RP - EarlyAdoption', + icon: '', + value: { + rolesRaw: null, + rewardProgram: 'EarlyAdoption' + } + }, + { + label: 'RP - Ecosystem', + icon: '', + value: { + rolesRaw: null, + rewardProgram: 'Ecosystem' + } + } +]; + +export const payouts = [ + { + label: 'rounds', + value: 'rounds' + }, + { + label: 'voting', + value: 'voting' + } +]; + +export const accountTransactionReceipt = [ + { + label: Constants.ReceiptTransactionStatamentType.BalanceChangeReceipt, + icon: 'mdi-alert', + value: { + ...customTransactionReceiptFilter.balanceChange + } + }, + { + label: Constants.ReceiptTransactionStatamentType.BalanceTransferReceipt, + icon: 'mdi-alert', + value: { + ...customTransactionReceiptFilter.balanceTransfer + } + } +]; + +export const blockTransactionReceipt = [ + { + label: Constants.ReceiptTransactionStatamentType.BalanceChangeReceipt, + icon: 'mdi-alert', + value: { + ...customTransactionReceiptFilter.balanceChange + } + }, + { + label: Constants.ReceiptTransactionStatamentType.BalanceTransferReceipt, + icon: 'mdi-alert', + value: { + ...customTransactionReceiptFilter.balanceTransfer + } + }, + { + label: Constants.ReceiptTransactionStatamentType.ArtifactExpiryReceipt, + icon: 'mdi-alert', + value: { + ...customTransactionReceiptFilter.artifactExpiry + } + }, + { + label: Constants.ReceiptTransactionStatamentType.InflationReceipt, + icon: 'mdi-alert', + value: { + ...customTransactionReceiptFilter.inflation + } + } +]; diff --git a/src/config/globalConfig.js b/src/config/globalConfig.js new file mode 100644 index 0000000..c149858 --- /dev/null +++ b/src/config/globalConfig.js @@ -0,0 +1,5 @@ +import defaultConfig from './default.json'; + +const globalConfig = window.globalConfig || defaultConfig; + +export default globalConfig; diff --git a/src/config/i18n/en-us.json b/src/config/i18n/en-us.json new file mode 100644 index 0000000..b270254 --- /dev/null +++ b/src/config/i18n/en-us.json @@ -0,0 +1,392 @@ +{ + "langName": "en-us", + "errorNisAddressNotAllowed": "You entered a NEM NIS1 address in the dHealth Explorer. Please use NEM Explorer instead.", + "errorNothingFound": "Nothing found.", + "age": "Created", + "aliasAction": "Alias Action", + "linkAction": "Link Action", + "amount": "Amount", + "relativeAmount": "Supply", + "height": "Height", + "fee": "Fee", + "maxFee": "Max Fee", + "totalFee": "Total Fee", + "date": "Date", + "deadline": "Deadline", + "status": "Status", + "confirm": "Confirmation", + "signature": "Signature", + "harvester": "Harvester", + "datetime": "Date", + "difficulty": "Difficulty", + "address": "Address", + "account": "Account", + "block": "Block", + "mosaic": "Mosaic", + "namespace": "Namespace", + "namespaceName": "Name", + "transaction": "Transaction", + "transactionHash": "Transaction Hash", + "totalTransactions": "Total Transactions", + "transactionType": "Transaction Type", + "addressHeight": "Address height", + "publicKey": "Public key", + "publicKeyHeight": "PublicKey height", + "importance": "Importance", + "importanceHeight": "Importance height", + "accountType": "Account type", + "accountAliasNames": "Alias Namespace", + "lastActivity": "Last Activity", + "accounts": "Accounts", + "blocks": "Blocks", + "mosaics": "Mosaics", + "namespaces": "Namespaces", + "namespaceId": "Namespace ID", + "depth": "Depth", + "info": "Info", + "transactions": "Transactions", + "mosaicId": "Mosaic ID", + "blockHeight": "Block Height", + "blockHash": "Block Hash", + "signer": "Signer", + "recipient": "Recipient", + "registrationType": "Registration Type", + "parentId": "Parent ID", + "duration": "Duration", + "startHeight": "Height", + "endHeight": "End at Height", + "beforeEndHeight": "End at Height", + "divisibility": "Divisibility", + "supply": "Supply", + "ownerAddress": "Owner Address", + "revision": "Revision", + "supplyMutable": "Supply Mutable", + "transferable": "Transferable", + "restrictable": "Restrictable", + "active": "Active", + "alias": "Alias", + "aliasType": "Alias Type", + "hashAlgorithm": "Hash Algorithm", + "secret": "Secret", + "linkedNamespace": "Linked Namespace", + "minApproval": "Minimum Approval", + "minRemoval": "Minimum Removal", + "nothingToShow": "Nothing to show.", + "transactionBody": "Transaction Detail", + "name": "Name", + "message": "Message", + "totalFeesPaid": "Total Fees Paid", + "beneficiaryCount": "Beneficiary Count", + "importanceScore": "Importance Score", + "recalculationBlock": "Recalculation Block #", + "mosaicAliasNames": "Alias", + "aliasMosaic": "Alias", + "aliasAddress": "Alias", + "metadataId": "Metadata Id", + "compositeHash": "Composite Hash", + "metadataType": "Type", + "scopedMetadataKey": "Scoped Metadata Key", + "sourceAddress": "Sender Address", + "targetAddress": "Target Address", + "metadataValue": "Value", + "targetId": "Target Id", + "targetMosaicId": "Target Mosaic Id", + "targetNamespaceId": "Target Namespace Id", + "targetMosaicAliasNames": "Target Mosaic Alias", + "type": "Type", + "valueSizeDelta": "Value Size Delta", + "feeMultiplier": "Fee Multiplier", + "blockchainExplorerTitle": "dHealth Explorer", + "searchBoxTitle": "Search transactions, addresses, namespaces & mosaics on dHealth Public Network.", + "searchBoxPlaceholder": "Search block / tx hash / account address / mosaic id / namespace id", + "nodes": "Nodes", + "home": "Home", + "xemPrice": "XEM Price", + "baseInfo": "Base Info", + "price": "Price", + "marketCap": "Market Cap", + "recentBlocks": "Recent Blocks", + "recentTransactions": "Recent Transactions", + "viewAllBlocks": "View all blocks", + "viewAllTransactions": "View all transactions", + "sender": "Sender", + "more": "More", + "less": "Less", + "unableToFetchDataError": "Unable to fetch data", + "accountDetailTitle": "Account Detail", + "multisigCosignatoriesTitle": "Multisig Cosignatories", + "ownedMosaicsTitle": "Owned Mosaics", + "ownedNamespacesTitle": "Owned Namespaces", + "metadataEntriesTitle": "Metadata Entries", + "importanceHistoryTitle": "Importance History", + "blockDetailTitle": "Block Detail", + "blockTransactionsTitle": "Block Transactions", + "mosaicDetailTitle": "Mosaic Detail", + "namespaceDetailTitle": "Namespace Detail", + "namespaceLevelTitle": "Namespace Level", + "transactionInfoTitle": "Transaction Info", + "transactionDetailTitle": "Transaction Detail", + "merkleInfoTitle": "Merkle Info", + "aggregateInnerTransactionsTitle": "Aggregate Inner Transactions", + "aggregateCosignaturesTitle": "Aggregate Cosignatures", + "version":"Version", + "size":"Size", + "balanceChangeReceiptTitle":"Balance Change Receipt", + "balanceTransferReceiptTitle": "Balance Transfer Receipt", + "inflationReceiptTitle": "Inflation Receipt", + "artifactExpiryReceiptTitle": "Artifact Expiry Receipt", + "mosaicResolutionEntries": "Resolved Value", + "addressResolutionEntries": "Resolved Value", + "unresolved": "Unresolved", + "roles": "Roles", + "network": "Network", + "host": "IP / Hostname", + "port": "Port", + "friendlyName": "Friendly Name", + "approximateExpired": "Expiration Date", + "expiredInBlock": "Expired In Block", + "index": "No.", + "networkFees": "Recommended Fees Multiplier", + "networkRentalFees": "Effective Rental Fees (DHP)", + "highestFeeMultiplier": "Highest", + "averageFeeMultiplier": "Average", + "medianFeeMultiplier": "Median", + "lowestFeeMultiplier": "Lowest", + "rootNamespace": "Root Namespace", + "childNamespace": "Child Namespace", + "statistics": "Statistics", + "restrictionAddressValues": "Values", + "restrictionMosaicValues": "Values", + "restrictionValues": "Values", + "restrictionTransactionValues": "Values", + "restrictionType": "Restriction Type", + "accountRestrictionTitle": "Account Restrictions", + "mosaicAddressRestrictionTitle": "Mosaic Address Restrictions", + "restrictionAddressAdditions": "Additions", + "restrictionAddressDeletions": "Deletions", + "restrictionMosaicAdditions": "Additions", + "restrictionMosaicDeletions": "Deletions", + "restrictionOperationAdditions": "Additions", + "restrictionOperationDeletions": "Deletions", + "entryType": "Entry Type", + "restrictionKey": "Key", + "referenceMosaicId": "Reference MosaicId", + "restrictionValue": "Value", + "previousRestrictionType": "Previous Restriction Type", + "previousRestrictionValue": "Previous Restriction Value", + "newRestrictionType": "New Restriction Type", + "newRestrictionValue": "New Restriction Value", + "mosaicRestrictionType.EQ": "Equal", + "mosaicRestrictionType.GE": "Greater Than Or Equal", + "mosaicRestrictionType.GT": "Greater Than", + "mosaicRestrictionType.LE": "Less Than Or Equal", + "mosaicRestrictionType.LT": "Less Than", + "mosaicRestrictionType.NE": "Not Equal", + "mosaicRestrictionType.NONE": "No Restriction", + "proof": "Proof", + "minApprovalDelta": "Min. Approval", + "minRemovalDelta": "Min Removal", + "addressAdditions": "Added Cosigner", + "addressDeletions": "Deleted Cosigner", + "transactionAwaitingCosignatureTitle": "Transaction awaiting co-signature(s)", + "transactionAwaitingRemarkTitle": "This transaction needs multiple parties to approve by sending co-signatures.", + "cosignaturesReceivedTitle": "Co-signatures received", + "innerTransactionTitle": "Inner Transaction", + "accountPartialTitle": "Account Partial Transactions", + "balance": "Balance", + "effectiveRootNamespaceRentalFeePerBlock": "Root Namespace Rental Fee / Block", + "effectiveChildNamespaceRentalFee": "Child Namespace Rental Fee", + "effectiveMosaicRentalFee": "Mosaic Rental Fee", + "recipientAddress": "Recipient", + "senderAddress": "Sender", + "cosignatoryAddresses": "Cosignatories", + "multisigAddresses": "Multisig Accounts", + "effectiveFee": "Fee", + "linkedPublicKey": "Linked Public Key", + "linkedAccountAddress": "Linked Account Address", + "proofGamma": "Proof Gamma", + "proofScalar": "Proof Scalar", + "proofVerificationHash": "Proof Verification Hash", + "accountKeyType": "Type", + "key": "Key", + "supplementalKeys": "Supplemental Keys", + "expirationDuration": "Expiration", + "transactionDescriptor_16724": "Transfer", + "transactionDescriptor_16718": "Namespace registration", + "transactionDescriptor_16974": "Address alias", + "transactionDescriptor_17230": "Mosaic alias", + "transactionDescriptor_16717": "Mosaic definition", + "transactionDescriptor_16973": "Mosaic supply change", + "transactionDescriptor_16725": "Multisig account modification", + "transactionDescriptor_16705": "Aggregate complete", + "transactionDescriptor_16961": "Aggregate bonded", + "transactionDescriptor_16712": "Hash lock", + "transactionDescriptor_16722": "Secret lock", + "transactionDescriptor_16978": "Secret proof", + "transactionDescriptor_16720": "Account address restriction", + "transactionDescriptor_16976": "Account mosaic restriction", + "transactionDescriptor_17232": "Account operation restriction", + "transactionDescriptor_16716": "Account key link", + "transactionDescriptor_16977": "Mosaic address restriction", + "transactionDescriptor_16721": "Mosaic global restriction", + "transactionDescriptor_16708": "Account metadata", + "transactionDescriptor_16964": "Mosaic metadata", + "transactionDescriptor_17220": "Namespace metadata", + "transactionDescriptor_16963": "VRF key link", + "transactionDescriptor_16707": "Voting Key link", + "transactionDescriptor_16972": "Node Key link", + "checkTransactionStatus": "Check transaction status", + "showDetail": "Show detail", + "noDataProvided": "No data provided", + "blocksTitle": "Blocks", + "accountsTitle": "Accounts", + "namespacesTitle": "Namespaces", + "mosaicsTitle": "Mosaics", + "nodesTitle": "Nodes", + + "supplementalKeysTitle": "Supplemental Keys", + "accountTransactionsTitle": "Transactions", + "resolutionStatementTitle": "Resolution Statement", + "mosaicRestrictionTitle": "Mosaic Restriction", + "mosaicRestrictionListTitle": "Mosaic Restriction List", + "harvestedBlockTitle": "Harvested Blocks", + + "accountDetailError": "This account does not have a public key yet", + "multisigCosignatoriesError": "Address is not a multisig account.", + "ownedMosaicsError": "Account owned mosaics are not available.", + "ownedNamespacesError": "Account owned namespaces are not available.", + "supplementalKeysError": "Account supplemental keys are not available.", + "transactionsError": "Account transactions are not available.", + "accountPartialError":"Account partial transactions are not available.", + "metadataEntriesError": "Metadatas are not available.", + "importanceHistoryError":"Account importance history is not available.", + "accountRestrictionError": "Account restrictions are not available.", + + "blockDetailError": "Block does not exist.", + "blockTransactionsError": "Block transactions are not available.", + "balanceChangeReceiptError": "Block balance change receipts are not available.", + "balanceTransferReceiptError": "Block balance transfer receipts are not available.", + "inflationReceiptError": "Block inflation receipts are not available.", + "artifactExpiryReceiptError": "Block artifact expiry receipts are not available.", + "resolutionStatementError": "Block resolution statement are not available.", + + "mosaicDetailError": "Mosaic does not exist.", + "mosaicRestrictionError": "Mosaic restriction does not exist.", + "mosaicRestrictionListError": "Mosaic global restrictions are not available.", + + "namespaceDetailError": "Namespace does not exist.", + "namespaceLevelError": "Namespace levels are not available.", + + "transactionInfoError": "Transaction does not exist.", + "transactionDetailError": "Transaction detail does not exist.", + "transactionMosaicsError": "Transaction mosaic does not exist.", + "transactionHashLockError": "Transaction hash lock does not exist.", + + "secretLockError": "Secret locks are not available.", + "hashLockError": "Hash locks are not available.", + "mosaicAddressRestrictionError": "Mosaic address restrictions are not available.", + "aggregateInnerTransactionsError": "Aggregate inner transactions are not available.", + "aggregateCosignaturesError": "Cosignatures are not available.", + "accountBalanceTitle": "Account Balance", + "noAlias": "No alias", + "addressBeenCopied": "The address was copied to the clipboard", + "failedToCopy": "Failed to copy", + + "beneficiaryAddress": "Beneficiary Address", + "linked": "LINKED", + "node": "NODE", + "vrf": "VRF", + "voting": "VOTING", + "nonce": "Nonce", + "action": "Action", + "delta": "Delta", + "harvestedBlock": "Harvested blocks (all)", + "transactionGraphic": "Transaction Graphic", + "resolutionType": "Type", + "receiptType": "Type", + "stateHash": "State Hash", + "stateHashSubCacheMerkleRoots": "State Hash Sub Cache Merkle Roots", + "blockReceiptsHash": "Receipts Hash", + "blockTransactionsHash": "Transactions Hash", + "position": "Position", + "hash": "Hash", + "startEpoch": "Start Finalization Epoch", + "endEpoch": "End Finalization Epoch", + "checkMosaicAddressRestrictionStatus": "Check Mosaic Address Restriction", + "check": "Check", + "payloadSize": "Size (bytes)", + "chainHeight": "Chain Height", + "finalized": "Block Finalized", + "pending": "Block Pending Finalization", + "finalizedHeight": "Finalized Height", + "restrictions": "Restrictions (Allow If)", + "hashLockTitle": "Hash Lock", + "secretLockTitle": "Secret Lock", + "restrictionAdded": "Added", + "restrictionRemoved": "Removed", + "statements": "Statements", + "nodeDetailTitle": "Node Detail", + "nodeHostDetailTitle": "Host Detail", + "nodeLocationMapTitle": "Host Location", + "nodePublicKey": "Public Key", + "apiEndpoint": "API Endpoint", + "networkGenerationHashSeed": "Network Generation Hash Seed", + "networkIdentifier": "Network Identifier", + "location": "Location", + "ip": "IP", + "organization": "Organization", + "as": "AS", + "continent": "Continent", + "country": "Country", + "region": "Region", + "city": "City", + "district": "District", + "zip": "Zip", + "nodeStatusTitle": "Node Status", + "nodePeerStatusTitle": "Peer Node Status", + "nodeApiStatusTitle": "API Node Status", + "connectionStatus": "Connection", + "databaseStatus": "Data Base", + "apiNodeStatus": "API Node", + "isAvailable": "Available", + "lastStatusCheck": "Last Status Check", + "nodeChainInfoTitle": "Node Chain Info", + "scoreHigh": "Score High", + "scoreLow": "Score Low", + "finalizationEpoch": "Finalization Epoch", + "finalizationPoint": "Finalization Point", + "finalizedHash": "Finalized Hash", + "nodeDetailError": "Failed to fetch node details.", + "extendGraphicValue": "Info", + "mosaicArtifactId": "ArtifactId", + "namespaceArtifactId": "ArtifactId", + "receiptTitle": "Receipt", + "created": "Created", + "ago": "ago", + "messageTypeDescriptor_-1": "Raw message", + "messageTypeDescriptor_0": "Plain message", + "messageTypeDescriptor_1": "Encrypted message", + "messageTypeDescriptor_254": "Delegated Harvesting Persistent message", + "votingNode": "Voting Node", + "nonVotingNode": "Non Voting Node", + "votingNodeTooltips": "Sync ahead of common node.", + "nonVotingNodeTooltips": "Sync behind of Voting node.", + "blockType": "Type", + "totalVotingBalance": "Total Voting Balance", + "harvestingEligibleAccountsCount": "Total Harvesting Eligible Accounts", + "votingEligibleAccountsCount": "Total Voting Eligible Accounts", + "previousImportanceBlockHash": "Previous Importance Block Hash", + "rewardPrograms": "Reward Programs", + "rewardProgram": "Reward Program", + "lastTestPassed": "Last test passed", + "nodeStatsTitle": "Node Statistics", + "allNodes": "Total count", + "nodeCountByRoles": "Count By Roles", + "chainInfo": "Chain Info", + "nodeHeightStatsTitle": "Count of nodes by chain height", + "nodeFinalizedHeightStatsTitle": "Count of nodes by finalized height", + "viewMoreStatistics": "View More Statistics", + "nodeCountChartTitle": "Node count over time", + "timestamp": "Timestamp", + "symbolTime": "dHealth Time" +} diff --git a/src/config/i18n/es.json b/src/config/i18n/es.json new file mode 100644 index 0000000..317efcd --- /dev/null +++ b/src/config/i18n/es.json @@ -0,0 +1,387 @@ +{ + "langName": "es", + "errorNisAddressNotAllowed": "You entered a NEM NIS1 address in the dHealth Explorer. Please use NEM Explorer instead.", + "errorNothingFound": "Nothing found.", + "age": "Años", + "aliasAction": "Alias Action", + "linkAction": "Link Action", + "amount": "Cantidad", + "relativeAmount": "Cantidad relativa", + "height": "Altura", + "fee": "Cuota", + "maxFee": "Max Cuota", + "totalFee": "Total Fee", + "date": "Fecha", + "deadline": "Fecha tope", + "status": "Estatus", + "confirm": "Confirmados", + "signature": "Firma", + "harvester": "Harvester", + "datetime": "Fecha", + "difficulty": "Dificultad", + "address": "Dirección", + "account": "Cuentas", + "block": "Bloques", + "mosaic": "Mosaico", + "namespace": "Namespace", + "namespaceName": "Nombre", + "transaction": "Transacción", + "transactionHash": "Transacción Hash", + "totalTransactions": "Transacciónes totales", + "transactionType": "Transacciónes Tipo", + "addressHeight": "Dirección Altura", + "publicKey": "Llave pública", + "publicKeyHeight": "Llave pública Altura", + "importance": "Valor", + "importanceHeight": "Valor Altura", + "accountType": "Cuentas Tipo", + "accountAliasNames": "Alias Namespace", + "lastActivity": "Última actividad", + "accounts": "Cuentas", + "blocks": "Bloques", + "mosaics": "Mosaicos", + "namespaces": "Namespaces", + "namespaceId": "Namespace ID", + "depth": "Depth", + "info": "Info", + "transactions": "Transacciónes", + "mosaicId": "Mosaicos ID", + "blockHeight": "Bloques Altura", + "blockHash": "Bloques Hash", + "signer": "Signer", + "recipient": "recipiente", + "registrationType": "Tipo de registro", + "parentId": "Parent ID", + "duration": "Duración", + "startHeight": "Comienzo Altura", + "endHeight": "Fin Altura", + "beforeEndHeight": "Fin Altura", + "divisibility": "divisibilidad", + "supply": "Suministro", + "ownerAddress": "Dirección propiedad", + "revision": "Revisión", + "supplyMutable": "Supply Mutable", + "transferable": "Transferible", + "restrictable": "Restringible", + "active": "Activo", + "alias": "Alias", + "aliasType": "Alias Type", + "hashAlgorithm": "Hash Algorithm", + "secret": "Secreto", + "linkedNamespace": "Linked Namespace", + "minApproval": "Aprobación mínima", + "minRemoval": "Remoción mínima", + "nothingToShow": "Nada que mostrar..", + "transactionBody": "Transacciónes del Detalles", + "name": "Name", + "message": "Message", + "totalFeesPaid": "Tasas totales pagadas", + "beneficiaryCount": "Recuento de beneficiarios", + "importanceScore": "Puntuación de importancia", + "recalculationBlock": "Bloque de recálculo #", + "mosaicAliasNames": "Espacio de nombres de alias", + "aliasMosaic": "Alias", + "aliasAddress": "Alias", + "metadataId": "Metadata Id", + "compositeHash": "Composite Hash", + "metadataType": "Tipo", + "scopedMetadataKey": "Scoped Metadata Key", + "sourceAddress": "Dirección del remitente", + "targetAddress": "Dirección de destino", + "metadataValue": "Valor", + "targetId": "Target Id", + "targetMosaicId": "Target Mosaic Id", + "targetNamespaceId": "Target Namespace Id", + "targetMosaicAliasNames": "Target Mosaic Alias", + "type": "Type", + "valueSizeDelta": "Value Size Delta", + "feeMultiplier": "Fee Multiplier", + "blockchainExplorerTitle": "dHealth Explorer", + "searchBoxTitle": "Search transactions, addresses, namespaces & mosaics on the dHealth Public Network.", + "searchBoxPlaceholder": "Search block / tx hash / account address / mosaic id / namespace id", + "nodes": "Nodes", + "home": "Home", + "xemPrice": "XEM Price", + "baseInfo": "Base Info", + "price": "Price", + "marketCap": "Market Cap", + "recentBlocks": "Recent Blocks", + "recentTransactions": "Recent Transactions", + "viewAllBlocks": "View all blocks", + "viewAllTransactions": "View all transactions", + "sender": "Sender", + "more": "More", + "less": "Less", + "unableToFetchDataError": "Unable to fetch data", + "accountDetailTitle": "Account Detail", + "multisigCosignatoriesTitle": "Multisig Cosignatories", + "ownedMosaicsTitle": "Owned Mosaics", + "ownedNamespacesTitle": "Owned Namespaces", + "metadataEntriesTitle": "Metadata Entries", + "importanceHistoryTitle": "Importance History", + "blockDetailTitle": "Block Detail", + "blockTransactionsTitle": "Block Transactions", + "mosaicDetailTitle": "Mosaic Detail", + "namespaceDetailTitle": "Namespace Detail", + "namespaceLevelTitle": "Namespace Level", + "transactionInfoTitle": "Transaction Info", + "transactionDetailTitle": "Transaction Detail", + "merkleInfoTitle": "Merkle Info", + "aggregateInnerTransactionsTitle": "Aggregate Inner Transactions", + "aggregateCosignaturesTitle": "Aggregate Cosignatures", + "version":"Version", + "size":"Size", + "balanceChangeReceiptTitle":"Balance Change Receipt", + "balanceTransferReceiptTitle": "Balance Transfer Receipt", + "inflationReceiptTitle": "Inflation Receipt", + "artifactExpiryReceiptTitle": "Artifact Expiry Receipt", + "mosaicResolutionEntries": "Resolved Value", + "addressResolutionEntries": "Resolved Value", + "unresolved": "Unresolved", + "roles": "Roles", + "network": "Network", + "host": "IP / Hostname", + "port": "Port", + "friendlyName": "Friendly Name", + "approximateExpired": "Expiration Date", + "expiredInBlock": "Expired In Block", + "index": "No.", + "networkFees": "Recommended Fees Multiplier", + "networkRentalFees": "Effective Rental Fees (DHP)", + "highestFeeMultiplier": "Highest", + "averageFeeMultiplier": "Average", + "medianFeeMultiplier": "Median", + "lowestFeeMultiplier": "Lowest", + "rootNamespace": "Root Namespace", + "childNamespace": "Child Namespace", + "statistics": "Statistics", + "restrictionAddressValues": "Values", + "restrictionMosaicValues": "Values", + "restrictionValues": "Values", + "restrictionTransactionValues": "Values", + "restrictionType": "Restriction Type", + "accountRestrictionTitle": "Account Restrictions", + "mosaicAddressRestrictionTitle": "Mosaic Address Restrictions", + "restrictionAddressAdditions": "Additions", + "restrictionAddressDeletions": "Deletions", + "restrictionMosaicAdditions": "Additions", + "restrictionMosaicDeletions": "Deletions", + "restrictionOperationAdditions": "Additions", + "restrictionOperationDeletions": "Deletions", + "entryType": "Entry Type", + "restrictionKey": "Key", + "referenceMosaicId": "Reference MosaicId", + "restrictionValue": "Value", + "previousRestrictionType": "Previous Restriction Type", + "previousRestrictionValue": "Previous Restriction Value", + "newRestrictionType": "New Restriction Type", + "newRestrictionValue": "New Restriction Value", + "mosaicRestrictionType.EQ": "Equal", + "mosaicRestrictionType.GE": "Greater Than Or Equal", + "mosaicRestrictionType.GT": "Greater Than", + "mosaicRestrictionType.LE": "Less Than Or Equal", + "mosaicRestrictionType.LT": "Less Than", + "mosaicRestrictionType.NE": "Not Equal", + "mosaicRestrictionType.NONE": "No Restriction", + "proof": "Proof", + "minApprovalDelta": "Min. Approval", + "minRemovalDelta": "Min Removal", + "addressAdditions": "Added Cosigner", + "addressDeletions": "Deleted Cosigner", + "transactionAwaitingCosignatureTitle": "Transaction awaiting co-signature(s)", + "transactionAwaitingRemarkTitle": "This transaction needs multiple parties to approve by sending co-signature.", + "cosignaturesReceivedTitle": "Co-signatures received", + "innerTransactionTitle": "Inner Transaction", + "accountPartialTitle": "Account Partial Transactions", + "balance": "Balance", + "effectiveRootNamespaceRentalFeePerBlock": "Root Namespace Rental Fee / Block", + "effectiveChildNamespaceRentalFee": "Child Namespace Rental Fee", + "effectiveMosaicRentalFee": "Mosaic Rental Fee", + "recipientAddress": "Recipient", + "senderAddress": "Sender", + "cosignatoryAddresses": "Cosignatories", + "multisigAddresses": "Multisig Accounts", + "effectiveFee": "Fee", + "linkedPublicKey": "Linked Public Key", + "linkedAccountAddress": "Linked Account Address", + "proofGamma": "Proof Gamma", + "proofScalar": "Proof Scalar", + "proofVerificationHash": "Proof Verification Hash", + "accountKeyType": "Type", + "key": "Key", + "supplementalKeys": "Supplemental Keys", + "expirationDuration": "Expiration", + "transactionDescriptor_16724": "Transfer", + "transactionDescriptor_16718": "Namespace registration", + "transactionDescriptor_16974": "Address alias", + "transactionDescriptor_17230": "Mosaic alias", + "transactionDescriptor_16717": "Mosaic definition", + "transactionDescriptor_16973": "Mosaic supply change", + "transactionDescriptor_16725": "Multisig account modification", + "transactionDescriptor_16705": "Aggregate complete", + "transactionDescriptor_16961": "Aggregate bonded", + "transactionDescriptor_16712": "Hash lock", + "transactionDescriptor_16722": "Secret lock", + "transactionDescriptor_16978": "Secret proof", + "transactionDescriptor_16720": "Account address restriction", + "transactionDescriptor_16976": "Account mosaic restriction", + "transactionDescriptor_17232": "Account operation restriction", + "transactionDescriptor_16716": "Account key link", + "transactionDescriptor_16977": "Mosaic address restriction", + "transactionDescriptor_16721": "Mosaic global restriction", + "transactionDescriptor_16708": "Account metadata", + "transactionDescriptor_16964": "Mosaic metadata", + "transactionDescriptor_17220": "Namespace metadata", + "transactionDescriptor_16963": "VRF key link", + "transactionDescriptor_16707": "Voting Key link", + "transactionDescriptor_16972": "Node Key link", + "checkTransactionStatus": "Check transaction status", + "showDetail": "Show detail", + "noDataProvided": "No data provided", + "blocksTitle": "Blocks", + "accountsTitle": "Accounts", + "namespacesTitle": "Namespaces", + "mosaicsTitle": "Mosaics", + "nodesTitle": "Nodes", + + "supplementalKeysTitle": "Supplemental Keys", + "accountTransactionsTitle": "Transactions", + "resolutionStatementTitle": "Resolution Statement", + "mosaicRestrictionTitle": "Mosaic Restriction", + "mosaicRestrictionListTitle": "Mosaic Restriction List", + "harvestedBlockTitle": "Harvested Blocks", + + "accountDetailError": "This account does not have a public key yet", + "multisigCosignatoriesError": "Address is not a multisig account.", + "ownedMosaicsError": "Account owned mosaics are not available.", + "ownedNamespacesError": "Account owned namespaces are not available.", + "supplementalKeysError": "Account supplemental keys are not available.", + "transactionsError": "Account transactions are not available.", + "accountPartialError":"Account partial transactions not available.", + "metadataEntriesError": "Metadatas are not available.", + "importanceHistoryError":"Account importance history are not available.", + "accountRestrictionError": "Account restrictions are not available.", + + "blockDetailError": "Block does not exist.", + "blockTransactionsError": "Block transactions are not available.", + "balanceChangeReceiptError": "Block balance change receipts are not available.", + "balanceTransferReceiptError": "Block balance transfer receipts are not available.", + "inflationReceiptError": "Block inflation receipts are not available.", + "artifactExpiryReceiptError": "Block artifact expiry are not available.", + "resolutionStatementError": "Block resolution statement are not available.", + + "mosaicDetailError": "Mosaic does not exist.", + "mosaicRestrictionError": "Mosaic restriction does not exist.", + "mosaicRestrictionListError": "Mosaic global restrictions are not available.", + + "namespaceDetailError": "Namespace does not exist.", + "namespaceLevelError": "Namespace levels are not available.", + + "transactionInfoError": "Transaction does not exist.", + "transactionDetailError": "Transaction detail does not exist.", + "transactionMosaicsError": "Transaction mosaic does not exist.", + "transactionHashLockError": "Transaction hash lock does not exist.", + + "secretLockError": "Secret locks are not available.", + "hashLockError": "Hash locks are not available.", + "mosaicAddressRestrictionError": "Mosaic address restrictions are not available.", + "aggregateInnerTransactionsError": "Aggregate inner transactions are not available.", + "aggregateCosignaturesError": "Cosignatures are not available.", + + "beneficiaryAddress": "Beneficiary Address", + "linked": "LINKED", + "node": "NODE", + "vrf": "VRF", + "voting": "VOTING", + "nonce": "Nonce", + "action": "Action", + "delta": "Delta", + "harvestedBlock": "Harvested blocks (all)", + "transactionGraphic": "Transaction Graphic", + "resolutionType": "Type", + "receiptType": "Type", + "stateHash": "State Hash", + "stateHashSubCacheMerkleRoots": "State Hash Sub Cache Merkle Roots", + "blockReceiptsHash": "Receipts Hash", + "blockTransactionsHash": "Transactions Hash", + "position": "Position", + "hash": "Hash", + "startEpoch": "Start Finalization Epoch", + "endEpoch": "End Finalization Epoch", + "checkMosaicAddressRestrictionStatus": "Check Mosaic Address Restriction", + "check": "Check", + "payloadSize": "Size (bytes)", + "chainHeight": "Chain Height", + "finalized": "Block Finalized", + "pending": "Block Pending to Finalized", + "finalizedHeight": "Finalized Height", + "restrictions": "Restrictions (Allow If)", + "hashLockTitle": "Hash Lock", + "secretLockTitle": "Secret Lock", + "restrictionAdded": "Added", + "restrictionRemoved": "Removed", + "statements": "Statements", + "nodeDetailTitle": "Node Detail", + "nodeHostDetailTitle": "Host Detail", + "nodeLocationMapTitle": "Host Location", + "nodePublicKey": "Public Key", + "apiEndpoint": "API Endpoint", + "networkGenerationHashSeed": "Network Generation Hash Seed", + "networkIdentifier": "Network Identifier", + "location": "Location", + "ip": "IP", + "organization": "Organization", + "as": "AS", + "continent": "Continent", + "country": "Country", + "region": "Region", + "city": "City", + "district": "District", + "zip": "Zip", + "nodeStatusTitle": "Node Status", + "nodePeerStatusTitle": "Peer Node Status", + "nodeApiStatusTitle": "API Node Status", + "connectionStatus": "Connection", + "databaseStatus": "Data Base", + "apiNodeStatus": "API Node", + "isAvailable": "Available", + "lastStatusCheck": "Last Status Check", + "nodeChainInfoTitle": "Node Chain Info", + "scoreHigh": "Score High", + "scoreLow": "Score Low", + "finalizationEpoch": "Finalization Epoch", + "finalizationPoint": "Finalization Point", + "finalizedHash": "Finalized Hash", + "nodeDetailError": "Failed to fetch node detail.", + "extendGraphicValue": "Info", + "mosaicArtifactId": "ArtifactId", + "namespaceArtifactId": "ArtifactId", + "receiptTitle": "Receipt", + "created": "Created", + "ago": "ago", + "messageTypeDescriptor_-1": "Raw message", + "messageTypeDescriptor_0": "Plain message", + "messageTypeDescriptor_1": "Encrypted message", + "messageTypeDescriptor_254": "Delegated Harvesting Persistent message", + "votingNode": "Voting Node", + "nonVotingNode": "Non Voting Node", + "votingNodeTooltips": "Sync ahead of common node.", + "nonVotingNodeTooltips": "Sync behind of Voting node.", + "blockType": "Type", + "totalVotingBalance": "Total Voting Balance", + "harvestingEligibleAccountsCount": "Total Harvesting Eligible Accounts", + "votingEligibleAccountsCount": "Total Voting Eligible Accounts", + "previousImportanceBlockHash": "Previous Importance Block Hash", + "rewardPrograms": "Reward Programs", + "rewardProgram": "Reward Program", + "lastTestPassed": "Last test passed", + "nodeStatsTitle": "Node Statistics", + "allNodes": "Total count", + "nodeCountByRoles": "Count By Roles", + "chainInfo": "Chain Info", + "nodeHeightStatsTitle": "Count of nodes by chain height", + "nodeFinalizedHeightStatsTitle": "Count of nodes by finalized height", + "viewMoreStatistics": "View More Statistics", + "nodeCountChartTitle": "Node count over time", + "timestamp": "Timestamp" +} diff --git a/src/config/i18n/index.js b/src/config/i18n/index.js new file mode 100644 index 0000000..066adfe --- /dev/null +++ b/src/config/i18n/index.js @@ -0,0 +1,66 @@ +const languages = { + 'en-us': require('./en-us.json'), + '日本語': require('./ja.json') + // '中文': require('./zh.json'), + // 'Português': require('./pt.json'), + // 'Espanhol': require('./es.json'), + // 'Українська': require('./ua.json'), + // 'Русский': require('./ru.json') +}; + +const DEFAULT_LANGUAGE = 'en-us'; + +const getUserLanguage = () => { + let storedLang = localStorage.getItem('userLanguage'); + + if (storedLang != null && languages[storedLang] != null) + return languages[storedLang]; + else { + setCurrentLanguage(DEFAULT_LANGUAGE); + return languages[DEFAULT_LANGUAGE]; + } +}; + +const setCurrentLanguage = (lang) => { + if (lang != null && languages[lang] != null) { + localStorage.setItem('userLanguage', lang); + location.reload(); + } + else throw Error("I18n: Cannot set language '" + lang + "'"); +}; + +const getName = (language, key) => { + if ( + language[key] !== null && + language[key] !== void 0 + ) + return language[key]; + else { + console.warn("I18n: Cannot find name for '" + key + "' in language '" + language.langName + "'"); + return key; + } +}; + +class I18n { + constructor() { + this.language = getUserLanguage(); + console.log('Language:', this.language.langName); + } + + get languages() { + return Object.keys(languages); + } + + get currentLanguage() { + return getUserLanguage(); + } + setCurrentLanguage(lang) { + return setCurrentLanguage(lang); + } + + getName(key) { + return getName(this.language, key); + } +} + +export default new I18n(); diff --git a/src/config/i18n/ja.json b/src/config/i18n/ja.json new file mode 100644 index 0000000..c21cbd8 --- /dev/null +++ b/src/config/i18n/ja.json @@ -0,0 +1,391 @@ +{ + "langName": "ja", + "errorNisAddressNotAllowed": "You entered a NEM NIS1 address in the dHealth Explorer. Please use NEM Explorer instead.", + "errorNothingFound": "Nothing found.", + "age": "作成", + "aliasAction": "エイリアスアクション", + "linkAction": "リンクアクション", + "amount": "総量", + "relativeAmount": "相対量", + "height": "ブロック高", + "fee": "手数料", + "maxFee": "最大手数料", + "totalFee": "合計手数料", + "date": "日付", + "deadline": "期限", + "status": "ステータス", + "confirm": "承認", + "signature": "署名", + "harvester": "ハーベスタ", + "datetime": "日時", + "difficulty": "難易度", + "address": "アドレス", + "account": "アカウント", + "block": "ブロック", + "mosaic": "モザイク", + "namespace": "ネームスペース", + "namespaceName": "スペース名", + "transaction": "トランザクション", + "transactionHash": "トランザクションハッシュ", + "totalTransactions": "合計トランザクション", + "transactionType": "トランザクションタイプ", + "addressHeight": "アドレスのブロック高", + "publicKey": "公開鍵", + "publicKeyHeight": "公開鍵のブロック高", + "importance": "インポータンス", + "importanceHeight": "インポータンスのブロック高", + "accountType": "アカウントタイプ", + "accountAliasNames": "エイリアス名", + "lastActivity": "最新の活動", + "accounts": "アカウント", + "blocks": "ブロック", + "mosaics": "モザイク", + "namespaces": "ネームスペース", + "namespaceId": "ネームスペースID", + "depth": "深さ", + "info": "情報", + "transactions": "トランザクション", + "mosaicId": "モザイクID", + "blockHeight": "ブロック高", + "blockHash": "ブロックハッシュ", + "signer": "署名者", + "recipient": "受信者", + "registrationType": "タイプ", + "parentId": "親ID", + "duration": "期間", + "startHeight": "開始高", + "endHeight": "終了高", + "beforeEndHeight": "終了高", + "divisibility": "可分性", + "supply": "供給量", + "ownerAddress": "所有者アドレス", + "revision": "リビジョン", + "supplyMutable": "供給可変", + "transferable": "転送可能", + "restrictable": "制限可能", + "active": "アクティブ", + "alias": "エイリアス", + "aliasType": "エイリアスの種類", + "hashAlgorithm": "ハッシュアルゴリズム", + "secret": "シークレット", + "linkedNamespace": "リンク済みネームスペース", + "minApproval": "最小承認", + "minRemoval": "最小削除", + "nothingToShow": "情報がありません", + "transactionBody": "トランザクション詳細", + "name": "名前", + "message": "メッセージ", + "totalFeesPaid": "総支払手数料", + "beneficiaryCount": "受益数", + "importanceScore": "重要度スコア", + "recalculationBlock": "再計算ブロック #", + "mosaicAliasNames": "エイリアスネームスペース", + "aliasMosaic": "エイリアスモザイク", + "aliasAddress": "エイリアスアドレス", + "metadataId": "メタデータID", + "compositeHash": "複合ハッシュ", + "metadataType": "タイプ", + "scopedMetadataKey": "スコープメタデータキー", + "sourceAddress": "送信者アドレス", + "targetAddress": "対象アドレス", + "metadataValue": "値", + "targetId": "対象ID", + "targetMosaicId": "対象モザイクID", + "targetNamespaceId": "対象ネームスペースID", + "targetMosaicAliasNames": "対象エイリアスネームスペース", + "type": "タイプ", + "valueSizeDelta": "値サイズ増減値", + "feeMultiplier": "手数料乗数", + "blockchainExplorerTitle": "dHealth ブロックチェーンエクスプローラ", + "searchBoxTitle": "ネットワーク上のトランザクション/アドレス/ネームスペース/モザイクを検索", + "searchBoxPlaceholder": "ブロック / TXハッシュ / アドレス / モザイクID / ネームスペースID を検索", + "nodes": "ノード", + "home": "ホーム", + "xemPrice": "XEM相場", + "baseInfo": "基本情報", + "price": "相場", + "marketCap": "マーケットキャップ", + "recentBlocks": "直近ブロック", + "recentTransactions": "直近トランザクション", + "viewAllBlocks": "すべてのブロックを表示", + "viewAllTransactions": "すべてのトランザクションを表示", + "sender": "送信者", + "more": "さらに", + "less": "少なく", + "unableToFetchDataError": "データを取得できません", + "accountDetailTitle": "アカウント詳細", + "multisigCosignatoriesTitle": "マルチシグ連署者", + "ownedMosaicsTitle": "所有モザイク", + "ownedNamespacesTitle": "所有ネームスペース", + "metadataEntriesTitle": "メタデータエントリ", + "importanceHistoryTitle": "インポータンス履歴", + "blockDetailTitle": "ブロック詳細", + "blockTransactionsTitle": "ブロックトランザクション", + "mosaicDetailTitle": "モザイク詳細", + "namespaceDetailTitle": "ネームスペース詳細", + "namespaceLevelTitle": "ネームスペース階層", + "transactionInfoTitle": "トランザクション情報", + "transactionDetailTitle": "トランザクション詳細", + "merkleInfoTitle": "マークル情報", + "aggregateInnerTransactionsTitle": "アグリゲート内部トランザクション", + "aggregateCosignaturesTitle": "アグリゲート連署名", + "version":"バージョン", + "size":"サイズ", + "balanceChangeReceiptTitle":"残高変更レシート", + "balanceTransferReceiptTitle": "残高転送レシート", + "inflationReceiptTitle": "インフレレシート", + "artifactExpiryReceiptTitle": "アーティファクト期限切れレシート", + "mosaicResolutionEntries": "解決済み値", + "addressResolutionEntries": "解決済み値", + "unresolved": "未解決", + "roles": "ロール", + "network": "ネットワーク", + "host": "IP / DNS", + "port": "ポート", + "friendlyName": "Friendly Name", + "approximateExpired": "概算期限切れ", + "expiredInBlock": "ブロック以内に期限切れ", + "index": "No.", + "networkFees": "推奨手数料乗数", + "networkRentalFees": "実行レンタル手数料(DHP)", + "highestFeeMultiplier": "最高", + "averageFeeMultiplier": "平均", + "medianFeeMultiplier": "頻出", + "lowestFeeMultiplier": "最低", + "rootNamespace": "ルートネームスペース", + "childNamespace": "子ネームスペース", + "statistics": "統計情報", + "restrictionAddressValues": "値", + "restrictionMosaicValues": "値", + "restrictionValues": "値", + "restrictionTransactionValues": "値", + "restrictionType": "タイプ", + "accountRestrictionTitle": "アカウント制限", + "mosaicAddressRestrictionTitle": "モザイクアドレス制限", + "restrictionAddressAdditions": "追加", + "restrictionAddressDeletions": "削除", + "restrictionMosaicAdditions": "追加", + "restrictionMosaicDeletions": "削除", + "restrictionOperationAdditions": "追加", + "restrictionOperationDeletions": "削除", + "entryType": "エントリタイプ", + "restrictionKey": "キー", + "referenceMosaicId": "参照モザイクID", + "restrictionValue": "値", + "previousRestrictionType": "前制限タイプ", + "previousRestrictionValue": "前制限値", + "newRestrictionType": "新制限タイプ", + "newRestrictionValue": "新制限値", + "mosaicRestrictionType.EQ": "等号", + "mosaicRestrictionType.GE": "以上", + "mosaicRestrictionType.GT": "超", + "mosaicRestrictionType.LE": "以下", + "mosaicRestrictionType.LT": "未満", + "mosaicRestrictionType.NE": "不等号", + "mosaicRestrictionType.NONE": "制限無し", + "proof": "証明", + "minApprovalDelta": "最小承認増減値", + "minRemovalDelta": "最小削除増減値", + "addressAdditions": "追加署名者", + "addressDeletions": "削除署名者", + "transactionAwaitingCosignatureTitle": "連署名待機中のトランザクション", + "transactionAwaitingRemarkTitle": "このトランザクションは連署者による複数の承認が必要です。", + "cosignaturesReceivedTitle": "受信した連署者", + "innerTransactionTitle": "内部トランザクション", + "accountPartialTitle": "アカウントパーシャルトランザクション", + "balance": "残高", + "effectiveRootNamespaceRentalFeePerBlock": "ルートネームスペースレンタル手数料 / ブロック", + "effectiveChildNamespaceRentalFee": "子ネームスペースレンタル手数料", + "effectiveMosaicRentalFee": "モザイクレンタル手数料", + "recipientAddress": "受信者", + "senderAddress": "送信者", + "cosignatoryAddresses": "連署者", + "multisigAddresses": "マルチシグアカウント", + "effectiveFee": "手数料", + "linkedPublicKey": "リンク済み公開鍵", + "linkedAccountAddress": "リンク済みアカウントアドレス", + "proofGamma": "Proofガンマ", + "proofScalar": "Proofスカラ", + "proofVerificationHash": "証明検証ハッシュ", + "accountKeyType": "タイプ", + "key": "キー", + "supplementalKeys": "Supplementalキー", + "expirationDuration": "期限", + "transactionDescriptor_16724": "転送", + "transactionDescriptor_16718": "ネームスペース登録", + "transactionDescriptor_16974": "アドレスエイリアス", + "transactionDescriptor_17230": "モザイクエイリアス", + "transactionDescriptor_16717": "モザイク定義", + "transactionDescriptor_16973": "モザイク供給変更", + "transactionDescriptor_16725": "マルチシグアカウント変更", + "transactionDescriptor_16705": "アグリゲートコンプリート", + "transactionDescriptor_16961": "アグリゲートボンデッド", + "transactionDescriptor_16712": "ハッシュロック", + "transactionDescriptor_16722": "シークレットロック", + "transactionDescriptor_16978": "シークレットプルーフ", + "transactionDescriptor_16720": "アカウントアドレス制限", + "transactionDescriptor_16976": "アカウントモザイク制限", + "transactionDescriptor_17232": "アカウント操作制限", + "transactionDescriptor_16716": "アカウントキーリング", + "transactionDescriptor_16977": "モザイクアドレス制限", + "transactionDescriptor_16721": "モザイクグローバル制限", + "transactionDescriptor_16708": "アカウントメタデータ", + "transactionDescriptor_16964": "モザイクメタデータ", + "transactionDescriptor_17220": "ネームスペースメタデータ", + "transactionDescriptor_16963": "VRFキーリンク", + "transactionDescriptor_16707": "投票キーリンク", + "transactionDescriptor_16972": "ノードキーリンク", + "checkTransactionStatus": "トランザクションステータス確認", + "showDetail": "詳細を見る", + "noDataProvided": "提供されたデータはありません", + "blocksTitle": "ブロック", + "accountsTitle": "アカウント", + "namespacesTitle": "ネームスペース", + "mosaicsTitle": "モザイク", + "nodesTitle": "ノード", + + "supplementalKeysTitle": "Supplementalキー", + "accountTransactionsTitle": "トランザクション", + "resolutionStatementTitle": "解決ステートメント", + "mosaicRestrictionTitle": "モザイク制限", + "mosaicRestrictionListTitle": "モザイク制限リスト", + "harvestedBlockTitle": "ハーベスト済みブロック", + + "accountDetailError": "アカウントはネットワークに対して不明です。", + "multisigCosignatoriesError": "アドレスはマルチシグアカウントではありません", + "ownedMosaicsError": "アカウントの保有モザイクは有効ではありません.", + "ownedNamespacesError": "アカウント保有ネームスペースは有効ではありません。", + "supplementalKeysError": "アカウントsupplementalキーは有効ではありません。", + "transactionsError": "アカウントトランザクションは有効ではありません。", + "accountPartialError":"アカウントパーシャルトランザクションは有効ではありません。", + "metadataEntriesError": "メタデータは有効ではありません", + "importanceHistoryError":"アカウントインポータンス履歴は有効ではありません", + "accountRestrictionError": "アカウント制限は有効ではありません", + + "blockDetailError": "ブロックは存在しません", + "blockTransactionsError": "ブロックトランザクションは有効ではありません", + "balanceChangeReceiptError": "ブロックバランス変更レシートは有効ではありません", + "balanceTransferReceiptError": "ブロックバランス転送レシートは有効ではありません", + "inflationReceiptError": "ブロックインフレレシートは有効ではありません", + "artifactExpiryReceiptError": "ブロックアーティファクト期限切れは有効ではありません", + "resolutionStatementError": "ブロック解決状態は有効ではありません", + + "mosaicDetailError": "モザイクは存在しません", + "mosaicRestrictionError": "モザイクは存在しません", + "mosaicRestrictionListError": "モザイクグローバル制限が有効ではありません", + + "namespaceDetailError": "ネームスペースは存在しません", + "namespaceLevelError": "ネームスペース階層は有効ではありません", + + "transactionInfoError": "トランザクションは存在しません", + "transactionDetailError": "トランザクション詳細は存在しません", + "transactionMosaicsError": "トランザクションモザイクは存在しません", + "transactionHashLockError": "トランザクションハッシュロックは存在しません", + + "secretLockError": "シークレットロックは有効ではありません", + "hashLockError": "ハッシュロックは有効ではありません", + "mosaicAddressRestrictionError": "モザイクアドレス制限は有効ではありません", + "aggregateInnerTransactionsError": "アグリゲート内部トランザクションが有効ではありません", + "aggregateCosignaturesError": "連署者が有効ではありません", + "accountBalanceTitle": "アカウント残高", + "noAlias": "エイリアスなし", + "addressBeenCopied": "アドレスはクリップボードへコピーされました", + "failedToCopy": "コピーに失敗しました", + + "beneficiaryAddress": "受益者アドレス", + "linked": "リンク済み", + "node": "ノード", + "vrf": "VRF", + "voting": "投票", + "nonce": "ノンス", + "action": "アクション", + "delta": "デルタ", + "harvestedBlock": "ハーベスト済ブロック(すべて)", + "transactionGraphic": "トランザクショングラフィック", + "resolutionType": "タイプ", + "receiptType": "タイプ", + "stateHash": "ステートハッシュ", + "stateHashSubCacheMerkleRoots": "ステートハッシュサブキャッシュマークル木", + "blockReceiptsHash": "レシートハッシュ", + "blockTransactionsHash": "トランザクションハッシュ", + "position": "ポジション", + "hash": "ハッシュ", + "startEpoch": "ファイナライズ開始ポイント", + "endEpoch": "ファイナライズ終了ポイント", + "checkMosaicAddressRestrictionStatus": "モザイクアドレス制限チェック", + "check": "チェック", + "payloadSize": "サイズ (バイト)", + "chainHeight": "チェーン高", + "finalized": "ファイナライズ済みブロック", + "pending": "ファイナライズ待ちブロック", + "finalizedHeight": "ファイナライズ済み高", + "restrictions": "制限 (許可されている場合)", + "hashLockTitle": "ハッシュロック", + "secretLockTitle": "シークレットロック", + "restrictionAdded": "追加", + "restrictionRemoved": "削除", + "statements": "ステートメント", + "nodeDetailTitle": "ノード詳細", + "nodeHostDetailTitle": "ホスト詳細", + "nodeLocationMapTitle": "ホスト位置", + "nodePublicKey": "公開鍵", + "apiEndpoint": "APIエンドポイント", + "networkGenerationHashSeed": "ネットワークジェネレーションハッシュシード", + "networkIdentifier": "ネットワーク識別子", + "location": "位置", + "ip": "IP", + "organization": "組織", + "as": "AS", + "continent": "大陸", + "country": "国", + "region": "地域", + "city": "町", + "district": "区", + "zip": "郵便番号", + "nodeStatusTitle": "ノード状態", + "nodePeerStatusTitle": "Peer ノード状態", + "nodeApiStatusTitle": "API ノード状態", + "connectionStatus": "接続", + "databaseStatus": "データベース", + "apiNodeStatus": "API ノード", + "isAvailable": "有効", + "lastStatusCheck": "最終チェック", + "nodeChainInfoTitle": "ノードチェーン情報", + "scoreHigh": "最高スコア", + "scoreLow": "最低スコア", + "finalizationEpoch": "ファイナライズ Epoch", + "finalizationPoint": "ファイナライズ Point", + "finalizedHash": "ファイナライズ済みハッシュ", + "nodeDetailError": "ノード詳細の取得に失敗", + "extendGraphicValue": "情報", + "mosaicArtifactId": "ArtifactId", + "namespaceArtifactId": "ArtifactId", + "receiptTitle": "レシート", + "created": "作成", + "ago": "前", + "messageTypeDescriptor_-1": "生メッセージ", + "messageTypeDescriptor_0": "平文メッセージ", + "messageTypeDescriptor_1": "暗号済みメッセージ", + "messageTypeDescriptor_254": "Delegated Harvesting Persistent メッセージ", + "votingNode": "投票ノード", + "nonVotingNode": "非投票ノード", + "votingNodeTooltips": "Sync ahead of common node.", + "nonVotingNodeTooltips": "Sync behind of Voting node.", + "blockType": "タイプ", + "totalVotingBalance": "総投票残高", + "harvestingEligibleAccountsCount": "総ハーベスト適格アカウント", + "votingEligibleAccountsCount": "総投票適格アカウント", + "previousImportanceBlockHash": "前インポータンスブロックハッシュ", + "rewardPrograms": "Reward Programs", + "rewardProgram": "Reward Program", + "lastTestPassed": "Last test passed", + "nodeStatsTitle": "Node Statistics", + "allNodes": "Total count", + "nodeCountByRoles": "Count By Roles", + "chainInfo": "Chain Info", + "nodeHeightStatsTitle": "Count of nodes by chain height", + "nodeFinalizedHeightStatsTitle": "Count of nodes by finalized height", + "viewMoreStatistics": "View More Statistics", + "nodeCountChartTitle": "Node count over time", + "timestamp": "Timestamp" +} diff --git a/src/config/i18n/pt.json b/src/config/i18n/pt.json new file mode 100644 index 0000000..aa08712 --- /dev/null +++ b/src/config/i18n/pt.json @@ -0,0 +1,388 @@ +{ + "langName": "pt", + "errorNisAddressNotAllowed": "You entered a NEM NIS1 address in the dHealth Explorer. Please use NEM Explorer instead.", + "errorNothingFound": "Nothing found.", + "age": "Age", + "aliasAction": "Alias Action", + "linkAction": "Link Action", + "amount": "Montante", + "relativeAmount": "Quantidade relativa", + "height": "Altura", + "fee": "Taxas", + "maxFee": "Max Fee", + "totalFee": "Total Fee", + "date": "Date", + "deadline": "Deadline", + "status": "Estatus", + "confirm": "Confirmados", + "signature": "Assinatura", + "harvester": "Harvester", + "datetime": "Date", + "difficulty": "Dificuldade", + "address": "Endereço", + "account": "Account", + "block": "Blocos", + "mosaic": "Mosaico", + "namespace": "Namespace", + "namespaceName": "Name", + "transaction": "Transações", + "transactionHash": "Transações Hash", + "totalTransactions": "Total Transações", + "transactionType": "Transações Type", + "addressHeight": "Address height", + "publicKey": "Chave pública", + "publicKeyHeight": "Chave pública height", + "importance": "Valor", + "importanceHeight": "Valor height", + "accountType": "Account type", + "accountAliasNames": "Alias Namespace", + "lastActivity": "ultima atividade", + "accounts": "Accounts", + "blocks": "Blocos", + "mosaics": "Mosaicos", + "namespaces": "Namespaces", + "namespaceId": "Namespace ID", + "depth": "Depth", + "info": "Info", + "transactions": "Transações", + "mosaicId": "Mosaicos ID", + "blockHeight": "Block Height", + "blockHash": "Block Hash", + "signer": "Assinador", + "recipient": "Recipient", + "registrationType": "Registration Type", + "parentId": "Parent ID", + "duration": "Duração", + "startHeight": "Start Height", + "endHeight": "End Height", + "beforeEndHeight": "End Height", + "divisibility": "Divisibility", + "supply": "Fornecem", + "ownerAddress": "Owner Address", + "revision": "Revision", + "supplyMutable": "Mutável de fornecimento", + "transferable": "Transferível", + "restrictable": "Restringível", + "active": "Ativo", + "alias": "Alias", + "aliasType": "Alias Type", + "hashAlgorithm": "Hash Algorithm", + "secret": "segredo", + "linkedNamespace": "Linked Namespace", + "minApproval": "Aprovação mínima", + "minRemoval": "Remoção mínima", + "nothingToShow": "Nothing to show..", + "transactionBody": "Detalhe da transação", + "name": "Name", + "message": "Message", + "totalFeesPaid": "Total de taxas pagas", + "beneficiaryCount": "Contagem de Beneficiários", + "importanceScore": "Pontuação de importância", + "recalculationBlock": "Bloco de recálculo #", + "mosaicAliasNames": "Alias Namespace", + "aliasMosaic": "Alias", + "aliasAddress": "Alias", + "metadataId": "Metadata Id", + "compositeHash": "Composite Hash", + "metadataType": "Type", + "scopedMetadataKey": "Scoped Metadata Key", + "sourceAddress": "Sender Address", + "targetAddress": "Target Address", + "metadataValue": "Value", + "targetId": "Target Id", + "targetMosaicId": "Target Mosaic Id", + "targetNamespaceId": "Target Namespace Id", + "targetMosaicAliasNames": "Target Mosaic Alias", + + "type": "Type", + "valueSizeDelta": "Value Size Delta", + "feeMultiplier": "Fee Multiplier", + "blockchainExplorerTitle": "dHealth Explorer", + "searchBoxTitle": "Search transactions, addresses, namespaces & mosaics on the dHealth Public Network.", + "searchBoxPlaceholder": "Search block / tx hash / account address / mosaic id / namespace id", + "nodes": "Nodes", + "home": "Home", + "xemPrice": "XEM Price", + "baseInfo": "Base Info", + "price": "Price", + "marketCap": "Market Cap", + "recentBlocks": "Recent Blocks", + "recentTransactions": "Recent Transactions", + "viewAllBlocks": "View all blocks", + "viewAllTransactions": "View all transactions", + "sender": "Sender", + "more": "More", + "less": "Less", + "unableToFetchDataError": "Unable to fetch data", + "accountDetailTitle": "Account Detail", + "multisigCosignatoriesTitle": "Multisig Cosignatories", + "ownedMosaicsTitle": "Owned Mosaics", + "ownedNamespacesTitle": "Owned Namespaces", + "metadataEntriesTitle": "Metadata Entries", + "importanceHistoryTitle": "Importance History", + "blockDetailTitle": "Block Detail", + "blockTransactionsTitle": "Block Transactions", + "mosaicDetailTitle": "Mosaic Detail", + "namespaceDetailTitle": "Namespace Detail", + "namespaceLevelTitle": "Namespace Level", + "transactionInfoTitle": "Transaction Info", + "transactionDetailTitle": "Transaction Detail", + "merkleInfoTitle": "Merkle Info", + "aggregateInnerTransactionsTitle": "Aggregate Inner Transactions", + "aggregateCosignaturesTitle": "Aggregate Cosignatures", + "version":"Version", + "size":"Size", + "balanceChangeReceiptTitle":"Balance Change Receipt", + "balanceTransferReceiptTitle": "Balance Transfer Receipt", + "inflationReceiptTitle": "Inflation Receipt", + "artifactExpiryReceiptTitle": "Artifact Expiry Receipt", + "mosaicResolutionEntries": "Resolved Value", + "addressResolutionEntries": "Resolved Value", + "unresolved": "Unresolved", + "roles": "Roles", + "network": "Network", + "host": "IP / Hostname", + "port": "Port", + "friendlyName": "Friendly Name", + "approximateExpired": "Expiration Date", + "expiredInBlock": "Expired In Block", + "index": "No.", + "networkFees": "Recommended Fees Multiplier", + "networkRentalFees": "Effective Rental Fees (DHP)", + "highestFeeMultiplier": "Highest", + "averageFeeMultiplier": "Average", + "medianFeeMultiplier": "Median", + "lowestFeeMultiplier": "Lowest", + "rootNamespace": "Root Namespace", + "childNamespace": "Child Namespace", + "statistics": "Statistics", + "restrictionAddressValues": "Values", + "restrictionMosaicValues": "Values", + "restrictionValues": "Values", + "restrictionTransactionValues": "Values", + "restrictionType": "Restriction Type", + "accountRestrictionTitle": "Account Restrictions", + "mosaicAddressRestrictionTitle": "Mosaic Address Restrictions", + "restrictionAddressAdditions": "Additions", + "restrictionAddressDeletions": "Deletions", + "restrictionMosaicAdditions": "Additions", + "restrictionMosaicDeletions": "Deletions", + "restrictionOperationAdditions": "Additions", + "restrictionOperationDeletions": "Deletions", + "entryType": "Entry Type", + "restrictionKey": "Key", + "referenceMosaicId": "Reference MosaicId", + "restrictionValue": "Value", + "previousRestrictionType": "Previous Restriction Type", + "previousRestrictionValue": "Previous Restriction Value", + "newRestrictionType": "New Restriction Type", + "newRestrictionValue": "New Restriction Value", + "mosaicRestrictionType.EQ": "Equal", + "mosaicRestrictionType.GE": "Greater Than Or Equal", + "mosaicRestrictionType.GT": "Greater Than", + "mosaicRestrictionType.LE": "Less Than Or Equal", + "mosaicRestrictionType.LT": "Less Than", + "mosaicRestrictionType.NE": "Not Equal", + "mosaicRestrictionType.NONE": "No Restriction", + "proof": "Proof", + "minApprovalDelta": "Min. Approval", + "minRemovalDelta": "Min Removal", + "addressAdditions": "Added Cosigner", + "addressDeletions": "Deleted Cosigner", + "transactionAwaitingCosignatureTitle": "Transaction awaiting co-signature(s)", + "transactionAwaitingRemarkTitle": "This transaction needs multiple parties to approve by sending co-signature.", + "cosignaturesReceivedTitle": "Co-signatures received", + "innerTransactionTitle": "Inner Transaction", + "accountPartialTitle": "Account Partial Transactions", + "balance": "Balance", + "effectiveRootNamespaceRentalFeePerBlock": "Root Namespace Rental Fee / Block", + "effectiveChildNamespaceRentalFee": "Child Namespace Rental Fee", + "effectiveMosaicRentalFee": "Mosaic Rental Fee", + "recipientAddress": "Recipient", + "senderAddress": "Sender", + "cosignatoryAddresses": "Cosignatories", + "multisigAddresses": "Multisig Accounts", + "effectiveFee": "Fee", + "linkedPublicKey": "Linked Public Key", + "linkedAccountAddress": "Linked Account Address", + "proofGamma": "Proof Gamma", + "proofScalar": "Proof Scalar", + "proofVerificationHash": "Proof Verification Hash", + "accountKeyType": "Type", + "key": "Key", + "supplementalKeys": "Supplemental Keys", + "expirationDuration": "Expiration", + "transactionDescriptor_16724": "Transfer", + "transactionDescriptor_16718": "Namespace registration", + "transactionDescriptor_16974": "Address alias", + "transactionDescriptor_17230": "Mosaic alias", + "transactionDescriptor_16717": "Mosaic definition", + "transactionDescriptor_16973": "Mosaic supply change", + "transactionDescriptor_16725": "Multisig account modification", + "transactionDescriptor_16705": "Aggregate complete", + "transactionDescriptor_16961": "Aggregate bonded", + "transactionDescriptor_16712": "Hash lock", + "transactionDescriptor_16722": "Secret lock", + "transactionDescriptor_16978": "Secret proof", + "transactionDescriptor_16720": "Account address restriction", + "transactionDescriptor_16976": "Account mosaic restriction", + "transactionDescriptor_17232": "Account operation restriction", + "transactionDescriptor_16716": "Account key link", + "transactionDescriptor_16977": "Mosaic address restriction", + "transactionDescriptor_16721": "Mosaic global restriction", + "transactionDescriptor_16708": "Account metadata", + "transactionDescriptor_16964": "Mosaic metadata", + "transactionDescriptor_17220": "Namespace metadata", + "transactionDescriptor_16963": "VRF key link", + "transactionDescriptor_16707": "Voting Key link", + "transactionDescriptor_16972": "Node Key link", + "checkTransactionStatus": "Check transaction status", + "showDetail": "Show detail", + "noDataProvided": "No data provided", + "blocksTitle": "Blocks", + "accountsTitle": "Accounts", + "namespacesTitle": "Namespaces", + "mosaicsTitle": "Mosaics", + "nodesTitle": "Nodes", + + "supplementalKeysTitle": "Supplemental Keys", + "accountTransactionsTitle": "Transactions", + "resolutionStatementTitle": "Resolution Statement", + "mosaicRestrictionTitle": "Mosaic Restriction", + "mosaicRestrictionListTitle": "Mosaic Restriction List", + "harvestedBlockTitle": "Harvested Blocks", + + "accountDetailError": "This account does not have a public key yet", + "multisigCosignatoriesError": "Address is not a multisig account.", + "ownedMosaicsError": "Account owned mosaics are not available.", + "ownedNamespacesError": "Account owned namespaces are not available.", + "supplementalKeysError": "Account supplemental keys are not available.", + "transactionsError": "Account transactions are not available.", + "accountPartialError":"Account partial transactions not available.", + "metadataEntriesError": "Metadatas are not available.", + "importanceHistoryError":"Account importance history are not available.", + "accountRestrictionError": "Account restrictions are not available.", + + "blockDetailError": "Block does not exist.", + "blockTransactionsError": "Block transactions are not available.", + "balanceChangeReceiptError": "Block balance change receipts are not available.", + "balanceTransferReceiptError": "Block balance transfer receipts are not available.", + "inflationReceiptError": "Block inflation receipts are not available.", + "artifactExpiryReceiptError": "Block artifact expiry are not available.", + "resolutionStatementError": "Block resolution statement are not available.", + + "mosaicDetailError": "Mosaic does not exist.", + "mosaicRestrictionError": "Mosaic restriction does not exist.", + "mosaicRestrictionListError": "Mosaic global restrictions are not available.", + + "namespaceDetailError": "Namespace does not exist.", + "namespaceLevelError": "Namespace levels are not available.", + + "transactionInfoError": "Transaction does not exist.", + "transactionDetailError": "Transaction detail does not exist.", + "transactionMosaicsError": "Transaction mosaic does not exist.", + "transactionHashLockError": "Transaction hash lock does not exist.", + + "secretLockError": "Secret locks are not available.", + "hashLockError": "Hash locks are not available.", + "mosaicAddressRestrictionError": "Mosaic address restrictions are not available.", + "aggregateInnerTransactionsError": "Aggregate inner transactions are not available.", + "aggregateCosignaturesError": "Cosignatures are not available.", + + "beneficiaryAddress": "Beneficiary Address", + "linked": "LINKED", + "node": "NODE", + "vrf": "VRF", + "voting": "VOTING", + "nonce": "Nonce", + "action": "Action", + "delta": "Delta", + "harvestedBlock": "Harvested blocks (all)", + "transactionGraphic": "Transaction Graphic", + "resolutionType": "Type", + "receiptType": "Type", + "stateHash": "State Hash", + "stateHashSubCacheMerkleRoots": "State Hash Sub Cache Merkle Roots", + "blockReceiptsHash": "Receipts Hash", + "blockTransactionsHash": "Transactions Hash", + "position": "Position", + "hash": "Hash", + "startEpoch": "Start Finalization Epoch", + "endEpoch": "End Finalization Epoch", + "checkMosaicAddressRestrictionStatus": "Check Mosaic Address Restriction", + "check": "Check", + "payloadSize": "Size (bytes)", + "chainHeight": "Chain Height", + "finalized": "Block Finalized", + "pending": "Block Pending to Finalized", + "finalizedHeight": "Finalized Height", + "restrictions": "Restrictions (Allow If)", + "hashLockTitle": "Hash Lock", + "secretLockTitle": "Secret Lock", + "restrictionAdded": "Added", + "restrictionRemoved": "Removed", + "statements": "Statements", + "nodeDetailTitle": "Node Detail", + "nodeHostDetailTitle": "Host Detail", + "nodeLocationMapTitle": "Host Location", + "nodePublicKey": "Public Key", + "apiEndpoint": "API Endpoint", + "networkGenerationHashSeed": "Network Generation Hash Seed", + "networkIdentifier": "Network Identifier", + "location": "Location", + "ip": "IP", + "organization": "Organization", + "as": "AS", + "continent": "Continent", + "country": "Country", + "region": "Region", + "city": "City", + "district": "District", + "zip": "Zip", + "nodeStatusTitle": "Node Status", + "nodePeerStatusTitle": "Peer Node Status", + "nodeApiStatusTitle": "API Node Status", + "connectionStatus": "Connection", + "databaseStatus": "Data Base", + "apiNodeStatus": "API Node", + "isAvailable": "Available", + "lastStatusCheck": "Last Status Check", + "nodeChainInfoTitle": "Node Chain Info", + "scoreHigh": "Score High", + "scoreLow": "Score Low", + "finalizationEpoch": "Finalization Epoch", + "finalizationPoint": "Finalization Point", + "finalizedHash": "Finalized Hash", + "nodeDetailError": "Failed to fetch node detail.", + "extendGraphicValue": "Info", + "mosaicArtifactId": "ArtifactId", + "namespaceArtifactId": "ArtifactId", + "receiptTitle": "Receipt", + "created": "Created", + "ago": "ago", + "messageTypeDescriptor_-1": "Raw message", + "messageTypeDescriptor_0": "Plain message", + "messageTypeDescriptor_1": "Encrypted message", + "messageTypeDescriptor_254": "Delegated Harvesting Persistent message", + "votingNode": "Voting Node", + "nonVotingNode": "Non Voting Node", + "votingNodeTooltips": "Sync ahead of common node.", + "nonVotingNodeTooltips": "Sync behind of Voting node.", + "blockType": "Type", + "totalVotingBalance": "Total Voting Balance", + "harvestingEligibleAccountsCount": "Total Harvesting Eligible Accounts", + "votingEligibleAccountsCount": "Total Voting Eligible Accounts", + "previousImportanceBlockHash": "Previous Importance Block Hash", + "rewardPrograms": "Reward Programs", + "rewardProgram": "Reward Program", + "lastTestPassed": "Last test passed", + "nodeStatsTitle": "Node Statistics", + "allNodes": "Total count", + "nodeCountByRoles": "Count By Roles", + "chainInfo": "Chain Info", + "nodeHeightStatsTitle": "Count of nodes by chain height", + "nodeFinalizedHeightStatsTitle": "Count of nodes by finalized height", + "viewMoreStatistics": "View More Statistics", + "nodeCountChartTitle": "Node count over time", + "timestamp": "Timestamp" +} diff --git a/src/config/i18n/ru.json b/src/config/i18n/ru.json new file mode 100644 index 0000000..d827379 --- /dev/null +++ b/src/config/i18n/ru.json @@ -0,0 +1,387 @@ +{ + "langName": "Russian", + "errorNisAddressNotAllowed": "You entered a NEM NIS1 address in the dHealth Explorer. Please use NEM Explorer instead.", + "errorNothingFound": "Nothing found.", + "age": "Возраст", + "aliasAction": "Действие Псевдонима", + "linkAction": "Действие Связи", + "amount": "Сумма", + "relativeAmount": "Относительная Сумма", + "height": "Высота", + "fee": "Комиссия", + "maxFee": "Max Fee", + "totalFee": "Общая Комиссия", + "date": "Дата", + "deadline": "Дедлайн", + "status": "Статус", + "confirm": "Подтверждение", + "signature": "Подпись", + "harvester": "Харвестер", + "datetime": "Дата и Время", + "difficulty": "Трудность", + "address": "Адрес", + "account": "Аккаунт", + "block": "Блок", + "mosaic": "Мозаика", + "namespace": "Пространство имен", + "namespaceName": "Имя", + "transaction": "Транзакция", + "transactionHash": "Хэш Транзакции", + "totalTransactions": "Всего Транзакций", + "transactionType": "Тип Транзакции", + "addressHeight": "Высота Адреса", + "publicKey": "Публичный Ключ", + "publicKeyHeight": "Высота Публичного Ключа", + "importance": "Важность", + "importanceHeight": "Высота важности", + "accountType": "Тип аккаунта", + "accountAliasNames": "Пространство Имен Псевдонимов", + "lastActivity": "Последняя Активность", + "accounts": "Аккаунты", + "blocks": "Блоки", + "mosaics": "Мозаики", + "namespaces": "Пространства имен", + "namespaceId": "(ID)Идентификатор пространства имен", + "depth": "Глубина", + "info": "Информация", + "transactions": "Транзакции", + "mosaicId": "(ID)Идентификатор мозаики", + "blockHeight": "Высота Блока", + "blockHash": "Хэш Блока", + "signer": "Подписавший", + "recipient": "Реципиент (Получатель)", + "registrationType": "Тип Регистрации", + "parentId": "Родительский идентификатор (ID)", + "duration": "Продолжительность", + "startHeight": "Стартовая Высота", + "endHeight": "Конечная высота", + "beforeEndHeight": "Конечная высота", + "divisibility": "Делимость", + "supply": "Поставка", + "ownerAddress": "Адрес Владельца", + "revision": "Ревизия", + "supplyMutable": "Изменчивая Поставка", + "transferable": "Переносимый", + "restrictable": "Рестрикция", + "active": "Активный", + "alias": "Псевдоним", + "aliasType": "Тип псевдонима", + "hashAlgorithm": "Алгоритм Хеширования", + "secret": "Секрет", + "linkedNamespace": "Связанное Пространство имен", + "minApproval": "Минимальное Подтверждение", + "minRemoval": "Минимальное Удаление", + "nothingToShow": "Пусто.", + "transactionBody": "Детали транзакции", + "name": "Имя", + "message": "Сообщение", + "totalFeesPaid": "Сумма Уплаченных Сборов", + "beneficiaryCount": "Количество Бенефициаров", + "importanceScore": "Оценка важности", + "recalculationBlock": "Блок Пересчета #", + "mosaicAliasNames": "Псевдоним пространства имен", + "aliasMosaic": "Псевдоним", + "aliasAddress": "Псевдоним", + "metadataId": "Идентификатор метаданных", + "compositeHash": "Композитный хэш", + "metadataType": "Тип", + "scopedMetadataKey": "Объединенный ключ метаданных", + "sourceAddress": "Адрес отправителя", + "targetAddress": "Целевой адрес", + "metadataValue": "Важность", + "targetId": "Идентификатор Цели", + "targetMosaicId": "Идентификатор Целевой Мозаики", + "targetNamespaceId": "Идентификатор Целевого Пространства Имен", + "targetMosaicAliasNames": "Target Mosaic Alias", + "type": "Тип", + "valueSizeDelta": "Важность Размер Дельта", + "feeMultiplier": "Мультипликатор Комиссии", + "blockchainExplorerTitle": "Блокчейн Эксплорер Symbol", + "searchBoxTitle": "Поиск транзакций, адресов, пространств имен и мозаик в сети Symbol.", + "searchBoxPlaceholder": "Поиск Блока / транзакционный хэш / аккаунт / идентификатор мозаики / идентификатор пространства имен", + "nodes": "Узлы", + "home": "Домашняя", + "xemPrice": "XEM Цена", + "baseInfo": "Базовая информация", + "price": "Цена", + "marketCap": "Рыночная капитализация", + "recentBlocks": "Последние Блоки", + "recentTransactions": "Недавние Транзакции", + "viewAllBlocks": "Просмотр всех блоков", + "viewAllTransactions": "Просмотр всех транзакций", + "sender": "Отправитель", + "more": "Больше", + "less": "Меньше", + "unableToFetchDataError": "Невозможно получить данные", + "accountDetailTitle": "Детали Аккаунта", + "multisigCosignatoriesTitle": "Мультисиг Подписанты", + "ownedMosaicsTitle": "Собственные Мозаики", + "ownedNamespacesTitle": "Собственные пространства имен", + "metadataEntriesTitle": "Записи метаданных", + "importanceHistoryTitle": "История Важности", + "blockDetailTitle": "Детализация Блока", + "blockTransactionsTitle": "Транзакции Блока", + "mosaicDetailTitle": "Детали Мозаики", + "namespaceDetailTitle": "Детали Пространства имен", + "namespaceLevelTitle": "Уровень Пространства имен", + "transactionInfoTitle": "Информация о Транзакции", + "transactionDetailTitle": "Детали Транзакции", + "merkleInfoTitle": "Merkle Info", + "aggregateInnerTransactionsTitle": "Агрегированные Транзакции", + "aggregateCosignaturesTitle": "Агрегированные подписи", + "version":"Версия", + "size":"Размер", + "balanceChangeReceiptTitle":"Чек об изменении баланса", + "balanceTransferReceiptTitle": "Чек об отправке баланса", + "inflationReceiptTitle": "Инфляция", + "artifactExpiryReceiptTitle": "Истечение срока получения", + "mosaicResolutionEntries": "Стоимость", + "addressResolutionEntries": "Стоимость", + "unresolved": "Неразрешенный", + "roles": "Роли", + "network": "Сеть", + "host": "IP / Hostname", + "port": "Порт", + "friendlyName": "Дружественное имя", + "approximateExpired": "Приблизительный Срок Окончания", + "expiredInBlock": "Истечение Срока в Блоке", + "index": "No.", + "networkFees": "Рекомендуемый Множитель Комиссий", + "networkRentalFees": "Комиссия За Аренду Сети (DHP)", + "highestFeeMultiplier": "Highest", + "averageFeeMultiplier": "Average", + "medianFeeMultiplier": "Median", + "lowestFeeMultiplier": "Lowest", + "rootNamespace": "Root Namespace", + "childNamespace": "Child Namespace", + "statistics": "Statistics", + "restrictionAddressValues": "Values", + "restrictionMosaicValues": "Values", + "restrictionValues": "Values", + "restrictionTransactionValues": "Values", + "restrictionType": "Restriction Type", + "accountRestrictionTitle": "Account Restrictions", + "mosaicAddressRestrictionTitle": "Mosaic Address Restrictions", + "restrictionAddressAdditions": "Additions", + "restrictionAddressDeletions": "Deletions", + "restrictionMosaicAdditions": "Additions", + "restrictionMosaicDeletions": "Deletions", + "restrictionOperationAdditions": "Additions", + "restrictionOperationDeletions": "Deletions", + "entryType": "Entry Type", + "restrictionKey": "Key", + "referenceMosaicId": "Reference MosaicId", + "restrictionValue": "Value", + "previousRestrictionType": "Previous Restriction Type", + "previousRestrictionValue": "Previous Restriction Value", + "newRestrictionType": "New Restriction Type", + "newRestrictionValue": "New Restriction Value", + "mosaicRestrictionType.EQ": "Equal", + "mosaicRestrictionType.GE": "Greater Than Or Equal", + "mosaicRestrictionType.GT": "Greater Than", + "mosaicRestrictionType.LE": "Less Than Or Equal", + "mosaicRestrictionType.LT": "Less Than", + "mosaicRestrictionType.NE": "Not Equal", + "mosaicRestrictionType.NONE": "No Restriction", + "proof": "Proof", + "minApprovalDelta": "Min. Approval", + "minRemovalDelta": "Min Removal", + "addressAdditions": "Added Cosigner", + "addressDeletions": "Deleted Cosigner", + "transactionAwaitingCosignatureTitle": "Transaction awaiting co-signature(s)", + "transactionAwaitingRemarkTitle": "This transaction needs multiple parties to approve by sending co-signature.", + "cosignaturesReceivedTitle": "Co-signatures received", + "innerTransactionTitle": "Inner Transaction", + "accountPartialTitle": "Account Partial Transactions", + "balance": "Balance", + "effectiveRootNamespaceRentalFeePerBlock": "Root Namespace Rental Fee / Block", + "effectiveChildNamespaceRentalFee": "Child Namespace Rental Fee", + "effectiveMosaicRentalFee": "Mosaic Rental Fee", + "recipientAddress": "Recipient", + "senderAddress": "Sender", + "cosignatoryAddresses": "Cosignatories", + "multisigAddresses": "Multisig Accounts", + "effectiveFee": "Fee", + "linkedPublicKey": "Linked Public Key", + "linkedAccountAddress": "Linked Account Address", + "proofGamma": "Proof Gamma", + "proofScalar": "Proof Scalar", + "proofVerificationHash": "Proof Verification Hash", + "accountKeyType": "Type", + "key": "Key", + "supplementalKeys": "Supplemental Keys", + "expirationDuration": "Expiration", + "transactionDescriptor_16724": "Transfer", + "transactionDescriptor_16718": "Namespace registration", + "transactionDescriptor_16974": "Address alias", + "transactionDescriptor_17230": "Mosaic alias", + "transactionDescriptor_16717": "Mosaic definition", + "transactionDescriptor_16973": "Mosaic supply change", + "transactionDescriptor_16725": "Multisig account modification", + "transactionDescriptor_16705": "Aggregate complete", + "transactionDescriptor_16961": "Aggregate bonded", + "transactionDescriptor_16712": "Hash lock", + "transactionDescriptor_16722": "Secret lock", + "transactionDescriptor_16978": "Secret proof", + "transactionDescriptor_16720": "Account address restriction", + "transactionDescriptor_16976": "Account mosaic restriction", + "transactionDescriptor_17232": "Account operation restriction", + "transactionDescriptor_16716": "Account key link", + "transactionDescriptor_16977": "Mosaic address restriction", + "transactionDescriptor_16721": "Mosaic global restriction", + "transactionDescriptor_16708": "Account metadata", + "transactionDescriptor_16964": "Mosaic metadata", + "transactionDescriptor_17220": "Namespace metadata", + "transactionDescriptor_16963": "VRF key link", + "transactionDescriptor_16707": "Voting Key link", + "transactionDescriptor_16972": "Node Key link", + "checkTransactionStatus": "Check transaction status", + "showDetail": "Show detail", + "noDataProvided": "No data provided", + "blocksTitle": "Blocks", + "accountsTitle": "Accounts", + "namespacesTitle": "Namespaces", + "mosaicsTitle": "Mosaics", + "nodesTitle": "Nodes", + + "supplementalKeysTitle": "Supplemental Keys", + "accountTransactionsTitle": "Transactions", + "resolutionStatementTitle": "Resolution Statement", + "mosaicRestrictionTitle": "Mosaic Restriction", + "mosaicRestrictionListTitle": "Mosaic Restriction List", + "harvestedBlockTitle": "Harvested Blocks", + + "accountDetailError": "This account does not have a public key yet", + "multisigCosignatoriesError": "Address is not a multisig account.", + "ownedMosaicsError": "Account owned mosaics are not available.", + "ownedNamespacesError": "Account owned namespaces are not available.", + "supplementalKeysError": "Account supplemental keys are not available.", + "transactionsError": "Account transactions are not available.", + "accountPartialError":"Account partial transactions not available.", + "metadataEntriesError": "Metadatas are not available.", + "importanceHistoryError":"Account importance history are not available.", + "accountRestrictionError": "Account restrictions are not available.", + + "blockDetailError": "Block does not exist.", + "blockTransactionsError": "Block transactions are not available.", + "balanceChangeReceiptError": "Block balance change receipts are not available.", + "balanceTransferReceiptError": "Block balance transfer receipts are not available.", + "inflationReceiptError": "Block inflation receipts are not available.", + "artifactExpiryReceiptError": "Block artifact expiry are not available.", + "resolutionStatementError": "Block resolution statement are not available.", + + "mosaicDetailError": "Mosaic does not exist.", + "mosaicRestrictionError": "Mosaic restriction does not exist.", + "mosaicRestrictionListError": "Mosaic global restrictions are not available.", + + "namespaceDetailError": "Namespace does not exist.", + "namespaceLevelError": "Namespace levels are not available.", + + "transactionInfoError": "Transaction does not exist.", + "transactionDetailError": "Transaction detail does not exist.", + "transactionMosaicsError": "Transaction mosaic does not exist.", + "transactionHashLockError": "Transaction hash lock does not exist.", + + "secretLockError": "Secret locks are not available.", + "hashLockError": "Hash locks are not available.", + "mosaicAddressRestrictionError": "Mosaic address restrictions are not available.", + "aggregateInnerTransactionsError": "Aggregate inner transactions are not available.", + "aggregateCosignaturesError": "Cosignatures are not available.", + + "beneficiaryAddress": "Beneficiary Address", + "linked": "LINKED", + "node": "NODE", + "vrf": "VRF", + "voting": "VOTING", + "nonce": "Nonce", + "action": "Action", + "delta": "Delta", + "harvestedBlock": "Harvested blocks (all)", + "transactionGraphic": "Схема транзакции", + "resolutionType": "Тип", + "receiptType": "Тип", + "stateHash": "State Hash", + "stateHashSubCacheMerkleRoots": "State Hash Sub Cache Merkle Roots", + "blockReceiptsHash": "Receipts Hash", + "blockTransactionsHash": "Transactions Hash", + "position": "Position", + "hash": "Hash", + "startEpoch": "Start Finalization Epoch", + "endEpoch": "End Finalization Epoch", + "checkMosaicAddressRestrictionStatus": "Check Mosaic Address Restriction", + "check": "Check", + "payloadSize": "Size (bytes)", + "chainHeight": "Chain Height", + "finalized": "Block Finalized", + "pending": "Block Pending to Finalized", + "finalizedHeight": "Finalized Height", + "restrictions": "Restrictions (Allow If)", + "hashLockTitle": "Hash Lock", + "secretLockTitle": "Secret Lock", + "restrictionAdded": "Added", + "restrictionRemoved": "Removed", + "statements": "Statements", + "nodeDetailTitle": "Node Detail", + "nodeHostDetailTitle": "Host Detail", + "nodeLocationMapTitle": "Host Location", + "nodePublicKey": "Public Key", + "apiEndpoint": "API Endpoint", + "networkGenerationHashSeed": "Network Generation Hash Seed", + "networkIdentifier": "Network Identifier", + "location": "Location", + "ip": "IP", + "organization": "Organization", + "as": "AS", + "continent": "Continent", + "country": "Country", + "region": "Region", + "city": "City", + "district": "District", + "zip": "Zip", + "nodeStatusTitle": "Node Status", + "nodePeerStatusTitle": "Peer Node Status", + "nodeApiStatusTitle": "API Node Status", + "connectionStatus": "Connection", + "databaseStatus": "Data Base", + "apiNodeStatus": "API Node", + "isAvailable": "Available", + "lastStatusCheck": "Last Status Check", + "nodeChainInfoTitle": "Node Chain Info", + "scoreHigh": "Score High", + "scoreLow": "Score Low", + "finalizationEpoch": "Finalization Epoch", + "finalizationPoint": "Finalization Point", + "finalizedHash": "Finalized Hash", + "nodeDetailError": "Failed to fetch node detail.", + "extendGraphicValue": "Info", + "mosaicArtifactId": "ArtifactId", + "namespaceArtifactId": "ArtifactId", + "receiptTitle": "Receipt", + "created": "Created", + "ago": "ago", + "messageTypeDescriptor_-1": "Raw message", + "messageTypeDescriptor_0": "Plain message", + "messageTypeDescriptor_1": "Encrypted message", + "messageTypeDescriptor_254": "Delegated Harvesting Persistent message", + "votingNode": "Voting Node", + "nonVotingNode": "Non Voting Node", + "votingNodeTooltips": "Sync ahead of common node.", + "nonVotingNodeTooltips": "Sync behind of Voting node.", + "blockType": "Type", + "totalVotingBalance": "Total Voting Balance", + "harvestingEligibleAccountsCount": "Total Harvesting Eligible Accounts", + "votingEligibleAccountsCount": "Total Voting Eligible Accounts", + "previousImportanceBlockHash": "Previous Importance Block Hash", + "rewardPrograms": "Reward Programs", + "rewardProgram": "Reward Program", + "lastTestPassed": "Last test passed", + "nodeStatsTitle": "Node Statistics", + "allNodes": "Total count", + "nodeCountByRoles": "Count By Roles", + "chainInfo": "Chain Info", + "nodeHeightStatsTitle": "Count of nodes by chain height", + "nodeFinalizedHeightStatsTitle": "Count of nodes by finalized height", + "viewMoreStatistics": "View More Statistics", + "nodeCountChartTitle": "Node count over time", + "timestamp": "Timestamp" +} diff --git a/src/config/i18n/ua.json b/src/config/i18n/ua.json new file mode 100644 index 0000000..c248f88 --- /dev/null +++ b/src/config/i18n/ua.json @@ -0,0 +1,387 @@ +{ + "langName": "Ukrainian", + "errorNisAddressNotAllowed": "You entered a NEM NIS1 address in the dHealth Explorer. Please use NEM Explorer instead.", + "errorNothingFound": "Nothing found.", + "age": "Вік", + "aliasAction": "Дія псевдоніму", + "linkAction": "Дія зв’язку", + "amount": "Cума", + "relativeAmount": "Відносна сума", + "height": "Висота", + "fee": "Плата", + "maxFee": "Max Fee", + "totalFee": "Total Fee", + "date": "Дата", + "deadline": "Кінцевий термін", + "status": "Статус", + "confirm": "Підтвердження", + "signature": "Підпис", + "harvester": "Харвестер", + "datetime": "Дата", + "difficulty": "Складність", + "address": "Адреса", + "account": "Рахунок", + "block": "Блок", + "mosaic": "Мозаїка", + "namespace": "Простір імен", + "namespaceName": "Ім'я", + "transaction": "транзакція", + "transactionHash": "Хеш транзакції", + "totalTransactions": "Усього транзакцій", + "transactionType": "Тип транзакції", + "addressHeight": "Висота адреси", + "publicKey": "Публічний ключ", + "publicKeyHeight": "Висота публічного ключа", + "importance": "Важливість", + "importanceHeight": "Висота важливісті", + "accountType": "Тип рахунку", + "accountAliasNames": "Alias Namespace", + "lastActivity": "Остання активність", + "accounts": "Рахунки", + "blocks": "Блоки", + "mosaics": "Мозаїки", + "namespaces": "Простори імен", + "namespaceId": "ID простору імен", + "depth": "Глибина", + "info": "Інформація", + "transactions": "Транзакції", + "mosaicId": "ID мозаїки", + "blockHeight": "Висота блоку", + "blockHash": "Хеш блоку", + "signer": "Підписант", + "recipient": "Одержувач", + "registrationType": "Тип реєстрації", + "parentId": "Батьківський ідентифікатор", + "duration": "Тривалість", + "startHeight": "Стартова висота", + "endHeight": "Кінцева висота", + "beforeEndHeight": "Кінцева висота", + "divisibility": "Подільність", + "supply": "Постачання", + "ownerAddress": "Адреса власника", + "revision": "Ревізія", + "supplyMutable": "Supply Mutable", + "transferable": "Переносимий", + "restrictable": "Обмежений", + "active": "Активний", + "alias": "Псевдонім", + "aliasType": "Тип псевдоніма", + "hashAlgorithm": "Тип хешу", + "secret": "Секрет", + "linkedNamespace": "Зв'язаний простір імен", + "minApproval": "Мінімальне підтвердження", + "minRemoval": "Мінімальне видалення", + "nothingToShow": "Пусто", + "transactionBody": "Деталізація транзакції", + "name": "Ім'я", + "message": "Повідомлення", + "totalFeesPaid": "Сума сплачених зборів", + "beneficiaryCount": "Кількість бенефіціарів", + "importanceScore": "Оцінка важливості", + "recalculationBlock": "Блок перерахунку №", + "mosaicAliasNames": "Псевдонім пространства імен", + "aliasMosaic": "Псевдонім", + "aliasAddress": "Псевдонім", + "metadataId": "Id метаданих", + "compositeHash": "Композитний хеш", + "metadataType": "Тип", + "scopedMetadataKey": "Об'єднаний ключ метаданих", + "sourceAddress": "Адреса відправника", + "targetAddress": "Цільова адреса", + "metadataValue": "Значення", + "targetId": "Цільовий Id", + "targetMosaicId": "Цільовий Id мозаїки", + "targetNamespaceId": "Цільовий Id простору імен", + "targetMosaicAliasNames": "Target Mosaic Alias", + "type": "Тип", + "valueSizeDelta": "Розмір величини дельти", + "feeMultiplier": "Множник комісійного збіру", + "blockchainExplorerTitle": "Переглядач блокчейну Symbol", + "searchBoxTitle": "Шукайте транзакції, адреси, простори імен та мозаїки у мережі NEM.", + "searchBoxPlaceholder": "Шукати блок / хеш транзакції / адреса", + "nodes": "Вузли", + "home": "Домашня", + "xemPrice": "Ціна XEM", + "baseInfo": "Загальна інформація", + "price": "Ціна", + "marketCap": "Капіталізація ринку", + "recentBlocks": "Останні блоки", + "recentTransactions": "Останні транзакції", + "viewAllBlocks": "Переглянути всі блоки", + "viewAllTransactions": "Переглянути всі транзакції", + "sender": "Відправник", + "more": "Більше", + "less": "Меньше", + "unableToFetchDataError": "Дані не отримано", + "accountDetailTitle": "Деталі рахунку", + "multisigCosignatoriesTitle": "Мультисиг косигнатори", + "ownedMosaicsTitle": "Мозіїки", + "ownedNamespacesTitle": "Простори імен", + "metadataEntriesTitle": "Метадані", + "importanceHistoryTitle": "Історія важливості", + "blockDetailTitle": "Деталізація блоку", + "blockTransactionsTitle": "Транзакції блоку", + "mosaicDetailTitle": "Деталі мозаїки", + "namespaceDetailTitle": "Деталі простору імен", + "namespaceLevelTitle": "Рівень простору імен", + "transactionInfoTitle": "Інформація про транзакцію", + "transactionDetailTitle": "Деталі транзакції", + "merkleInfoTitle": "Merkle Info", + "aggregateInnerTransactionsTitle": "Сукупні внутрішні транзакції", + "aggregateCosignaturesTitle": "Сукупні косигнати", + "version":"Version", + "size":"Size", + "balanceChangeReceiptTitle":"Balance Change Receipt", + "balanceTransferReceiptTitle": "Balance Transfer Receipt", + "inflationReceiptTitle": "Inflation Receipt", + "artifactExpiryReceiptTitle": "Artifact Expiry Receipt", + "mosaicResolutionEntries": "Resolved Value", + "addressResolutionEntries": "Resolved Value", + "unresolved": "Unresolved", + "roles": "Roles", + "network": "Network", + "host": "IP / Hostname", + "port": "Port", + "friendlyName": "Friendly Name", + "approximateExpired": "Expiration Date", + "expiredInBlock": "Expired In Block", + "index": "No.", + "networkFees": "Recommended Fees Multiplier", + "networkRentalFees": "Effective Rental Fees (DHP)", + "highestFeeMultiplier": "Highest", + "averageFeeMultiplier": "Average", + "medianFeeMultiplier": "Median", + "lowestFeeMultiplier": "Lowest", + "rootNamespace": "Root Namespace", + "childNamespace": "Child Namespace", + "statistics": "Statistics", + "restrictionAddressValues": "Values", + "restrictionMosaicValues": "Values", + "restrictionValues": "Values", + "restrictionTransactionValues": "Values", + "restrictionType": "Restriction Type", + "accountRestrictionTitle": "Account Restrictions", + "mosaicAddressRestrictionTitle": "Mosaic Address Restrictions", + "restrictionAddressAdditions": "Additions", + "restrictionAddressDeletions": "Deletions", + "restrictionMosaicAdditions": "Additions", + "restrictionMosaicDeletions": "Deletions", + "restrictionOperationAdditions": "Additions", + "restrictionOperationDeletions": "Deletions", + "entryType": "Entry Type", + "restrictionKey": "Key", + "referenceMosaicId": "Reference MosaicId", + "restrictionValue": "Value", + "previousRestrictionType": "Previous Restriction Type", + "previousRestrictionValue": "Previous Restriction Value", + "newRestrictionType": "New Restriction Type", + "newRestrictionValue": "New Restriction Value", + "mosaicRestrictionType.EQ": "Equal", + "mosaicRestrictionType.GE": "Greater Than Or Equal", + "mosaicRestrictionType.GT": "Greater Than", + "mosaicRestrictionType.LE": "Less Than Or Equal", + "mosaicRestrictionType.LT": "Less Than", + "mosaicRestrictionType.NE": "Not Equal", + "mosaicRestrictionType.NONE": "No Restriction", + "proof": "Proof", + "minApprovalDelta": "Min. Approval", + "minRemovalDelta": "Min Removal", + "addressAdditions": "Added Cosigner", + "addressDeletions": "Deleted Cosigner", + "transactionAwaitingCosignatureTitle": "Transaction awaiting co-signature(s)", + "transactionAwaitingRemarkTitle": "This transaction needs multiple parties to approve by sending co-signature.", + "cosignaturesReceivedTitle": "Co-signatures received", + "innerTransactionTitle": "Inner Transaction", + "accountPartialTitle": "Account Partial Transactions", + "balance": "Balance", + "effectiveRootNamespaceRentalFeePerBlock": "Root Namespace Rental Fee / Block", + "effectiveChildNamespaceRentalFee": "Child Namespace Rental Fee", + "effectiveMosaicRentalFee": "Mosaic Rental Fee", + "recipientAddress": "Recipient", + "senderAddress": "Sender", + "cosignatoryAddresses": "Cosignatories", + "multisigAddresses": "Multisig Accounts", + "effectiveFee": "Fee", + "linkedPublicKey": "Linked Public Key", + "linkedAccountAddress": "Linked Account Address", + "proofGamma": "Proof Gamma", + "proofScalar": "Proof Scalar", + "proofVerificationHash": "Proof Verification Hash", + "accountKeyType": "Type", + "key": "Key", + "supplementalKeys": "Supplemental Keys", + "expirationDuration": "Expiration", + "transactionDescriptor_16724": "Transfer", + "transactionDescriptor_16718": "Namespace registration", + "transactionDescriptor_16974": "Address alias", + "transactionDescriptor_17230": "Mosaic alias", + "transactionDescriptor_16717": "Mosaic definition", + "transactionDescriptor_16973": "Mosaic supply change", + "transactionDescriptor_16725": "Multisig account modification", + "transactionDescriptor_16705": "Aggregate complete", + "transactionDescriptor_16961": "Aggregate bonded", + "transactionDescriptor_16712": "Hash lock", + "transactionDescriptor_16722": "Secret lock", + "transactionDescriptor_16978": "Secret proof", + "transactionDescriptor_16720": "Account address restriction", + "transactionDescriptor_16976": "Account mosaic restriction", + "transactionDescriptor_17232": "Account operation restriction", + "transactionDescriptor_16716": "Account key link", + "transactionDescriptor_16977": "Mosaic address restriction", + "transactionDescriptor_16721": "Mosaic global restriction", + "transactionDescriptor_16708": "Account metadata", + "transactionDescriptor_16964": "Mosaic metadata", + "transactionDescriptor_17220": "Namespace metadata", + "transactionDescriptor_16963": "VRF key link", + "transactionDescriptor_16707": "Voting Key link", + "transactionDescriptor_16972": "Node Key link", + "checkTransactionStatus": "Check transaction status", + "showDetail": "Show detail", + "noDataProvided": "No data provided", + "blocksTitle": "Blocks", + "accountsTitle": "Accounts", + "namespacesTitle": "Namespaces", + "mosaicsTitle": "Mosaics", + "nodesTitle": "Nodes", + + "supplementalKeysTitle": "Supplemental Keys", + "accountTransactionsTitle": "Transactions", + "resolutionStatementTitle": "Resolution Statement", + "mosaicRestrictionTitle": "Mosaic Restriction", + "mosaicRestrictionListTitle": "Mosaic Restriction List", + "harvestedBlockTitle": "Harvested Blocks", + + "accountDetailError": "This account does not have a public key yet", + "multisigCosignatoriesError": "Address is not a multisig account.", + "ownedMosaicsError": "Account owned mosaics are not available.", + "ownedNamespacesError": "Account owned namespaces are not available.", + "supplementalKeysError": "Account supplemental keys are not available.", + "transactionsError": "Account transactions are not available.", + "accountPartialError":"Account partial transactions not available.", + "metadataEntriesError": "Metadatas are not available.", + "importanceHistoryError":"Account importance history are not available.", + "accountRestrictionError": "Account restrictions are not available.", + + "blockDetailError": "Block does not exist.", + "blockTransactionsError": "Block transactions are not available.", + "balanceChangeReceiptError": "Block balance change receipts are not available.", + "balanceTransferReceiptError": "Block balance transfer receipts are not available.", + "inflationReceiptError": "Block inflation receipts are not available.", + "artifactExpiryReceiptError": "Block artifact expiry are not available.", + "resolutionStatementError": "Block resolution statement are not available.", + + "mosaicDetailError": "Mosaic does not exist.", + "mosaicRestrictionError": "Mosaic restriction does not exist.", + "mosaicRestrictionListError": "Mosaic global restrictions are not available.", + + "namespaceDetailError": "Namespace does not exist.", + "namespaceLevelError": "Namespace levels are not available.", + + "transactionInfoError": "Transaction does not exist.", + "transactionDetailError": "Transaction detail does not exist.", + "transactionMosaicsError": "Transaction mosaic does not exist.", + "transactionHashLockError": "Transaction hash lock does not exist.", + + "secretLockError": "Secret locks are not available.", + "hashLockError": "Hash locks are not available.", + "mosaicAddressRestrictionError": "Mosaic address restrictions are not available.", + "aggregateInnerTransactionsError": "Aggregate inner transactions are not available.", + "aggregateCosignaturesError": "Cosignatures are not available.", + + "beneficiaryAddress": "Beneficiary Address", + "linked": "LINKED", + "node": "NODE", + "vrf": "VRF", + "voting": "VOTING", + "nonce": "Nonce", + "action": "Action", + "delta": "Delta", + "harvestedBlock": "Harvested blocks (all)", + "transactionGraphic": "Схема транзакції", + "resolutionType": "Тип", + "receiptType": "Тип", + "stateHash": "State Hash", + "stateHashSubCacheMerkleRoots": "State Hash Sub Cache Merkle Roots", + "blockReceiptsHash": "Receipts Hash", + "blockTransactionsHash": "Transactions Hash", + "position": "Position", + "hash": "Hash", + "startEpoch": "Start Finalization Epoch", + "endEpoch": "End Finalization Epoch", + "checkMosaicAddressRestrictionStatus": "Check Mosaic Address Restriction", + "check": "Check", + "payloadSize": "Size (bytes)", + "chainHeight": "Chain Height", + "finalized": "Block Finalized", + "pending": "Block Pending to Finalized", + "finalizedHeight": "Finalized Height", + "restrictions": "Restrictions (Allow If)", + "hashLockTitle": "Hash Lock", + "secretLockTitle": "Secret Lock", + "restrictionAdded": "Added", + "restrictionRemoved": "Removed", + "statements": "Statements", + "nodeDetailTitle": "Node Detail", + "nodeHostDetailTitle": "Host Detail", + "nodeLocationMapTitle": "Host Location", + "nodePublicKey": "Public Key", + "apiEndpoint": "API Endpoint", + "networkGenerationHashSeed": "Network Generation Hash Seed", + "networkIdentifier": "Network Identifier", + "location": "Location", + "ip": "IP", + "organization": "Organization", + "as": "AS", + "continent": "Continent", + "country": "Country", + "region": "Region", + "city": "City", + "district": "District", + "zip": "Zip", + "nodeStatusTitle": "Node Status", + "nodePeerStatusTitle": "Peer Node Status", + "nodeApiStatusTitle": "API Node Status", + "connectionStatus": "Connection", + "databaseStatus": "Data Base", + "apiNodeStatus": "API Node", + "isAvailable": "Available", + "lastStatusCheck": "Last Status Check", + "nodeChainInfoTitle": "Node Chain Info", + "scoreHigh": "Score High", + "scoreLow": "Score Low", + "finalizationEpoch": "Finalization Epoch", + "finalizationPoint": "Finalization Point", + "finalizedHash": "Finalized Hash", + "nodeDetailError": "Failed to fetch node detail.", + "extendGraphicValue": "Info", + "mosaicArtifactId": "ArtifactId", + "namespaceArtifactId": "ArtifactId", + "receiptTitle": "Receipt", + "created": "Created", + "ago": "ago", + "messageTypeDescriptor_-1": "Raw message", + "messageTypeDescriptor_0": "Plain message", + "messageTypeDescriptor_1": "Encrypted message", + "messageTypeDescriptor_254": "Delegated Harvesting Persistent message", + "votingNode": "Voting Node", + "nonVotingNode": "Non Voting Node", + "votingNodeTooltips": "Sync ahead of common node.", + "nonVotingNodeTooltips": "Sync behind of Voting node.", + "blockType": "Type", + "totalVotingBalance": "Total Voting Balance", + "harvestingEligibleAccountsCount": "Total Harvesting Eligible Accounts", + "votingEligibleAccountsCount": "Total Voting Eligible Accounts", + "previousImportanceBlockHash": "Previous Importance Block Hash", + "rewardPrograms": "Reward Programs", + "rewardProgram": "Reward Program", + "lastTestPassed": "Last test passed", + "nodeStatsTitle": "Node Statistics", + "allNodes": "Total count", + "nodeCountByRoles": "Count By Roles", + "chainInfo": "Chain Info", + "nodeHeightStatsTitle": "Count of nodes by chain height", + "nodeFinalizedHeightStatsTitle": "Count of nodes by finalized height", + "viewMoreStatistics": "View More Statistics", + "nodeCountChartTitle": "Node count over time", + "timestamp": "Timestamp" +} diff --git a/src/config/i18n/zh.json b/src/config/i18n/zh.json new file mode 100644 index 0000000..394498b --- /dev/null +++ b/src/config/i18n/zh.json @@ -0,0 +1,387 @@ +{ + "langName": "zh", + "errorNisAddressNotAllowed": "You entered a NEM NIS1 address in the dHealth Explorer. Please use NEM Explorer instead.", + "errorNothingFound": "Nothing found.", + "age": "时间", + "aliasAction": "别名行动", + "linkAction": "绑定行动", + "amount": "量", + "relativeAmount": "相对金额", + "height": "高度", + "fee": "费用", + "maxFee": "Max Fee", + "totalFee": "Total Fee", + "date": "日期", + "deadline": "截止时间", + "status": "状态", + "confirm": "已确认块", + "signature": "签名", + "harvester": "收获者", + "datetime": "日期", + "difficulty": "难度", + "address": "地址", + "account": "账户", + "block": "块", + "mosaic": "马赛克", + "namespace": "命名空间", + "namespaceName": "命名空间的名字", + "transaction": "交易", + "transactionHash": "交易Hash", + "totalTransactions": "共交易", + "transactionType": "交易类型", + "addressHeight": "地址的高度", + "publicKey": "公钥", + "publicKeyHeight": "公钥的高度", + "importance": "重要性", + "importanceHeight": "重要性的高度", + "accountType": "账户类型", + "accountAliasNames": "Alias Namespace", + "lastActivity": "最后活动", + "accounts": "账户", + "blocks": "块", + "mosaics": "马赛克", + "namespaces": "命名空间", + "namespaceId": "命名空间ID", + "depth": "深度", + "info": "Info", + "transactions": "交易", + "mosaicId": "马赛克ID", + "blockHeight": "块高", + "blockHash": "块Hash", + "signer": "签人", + "recipient": "收款人", + "registrationType": "注册类型", + "parentId": "父命名空间ID", + "duration": "持续时间", + "startHeight": "开始高度", + "endHeight": "结束高度", + "beforeEndHeight": "结束高度", + "divisibility": "可分割性", + "supply": "供应量", + "ownerAddress": "属主地址", + "revision": "调整", + "supplyMutable": "可变供应量", + "transferable": "可传输", + "restrictable": "限制性", + "active": "活跃", + "alias": "别名", + "aliasType": "别名类型", + "hashAlgorithm": "Hash类型", + "secret": "密码", + "linkedNamespace": "已绑定命名空间", + "minApproval": "最小签名数", + "minRemoval": "最小删除数", + "nothingToShow": "没有资料可显示..", + "transactionBody": "交易详情", + "name": "Name", + "message": "Message", + "totalFeesPaid": "已付总费用", + "beneficiaryCount": "受益人计数", + "importanceScore": "重要性分数", + "recalculationBlock": "重新计算块 #", + "mosaicAliasNames": "别名命名空间", + "aliasMosaic": "别名", + "aliasAddress": "别名", + "metadataId": "元数据Id", + "compositeHash": "复合哈希", + "metadataType": "类型", + "scopedMetadataKey": "作用域元数据密钥", + "sourceAddress": "发送人地址", + "targetAddress": "目标地址", + "metadataValue": "值", + "targetId": "目标Id", + "targetMosaicId": "目标马赛克", + "targetNamespaceId": "目标命名空间", + "targetMosaicAliasNames": "Target Mosaic Alias", + "type": "类型", + "valueSizeDelta": "值大小增量", + "feeMultiplier": "费用乘数", + "blockchainExplorerTitle": "dHealth blockchain explorer", + "searchBoxTitle": "Search transactions, addresses, namespaces & mosaics on the dHealth Public Network.", + "searchBoxPlaceholder": "Search block / tx hash / account address / mosaic id / namespace id", + "nodes": "Nodes", + "home": "Home", + "xemPrice": "XEM Price", + "baseInfo": "Base Info", + "price": "Price", + "marketCap": "Market Cap", + "recentBlocks": "Recent Blocks", + "recentTransactions": "Recent Transactions", + "viewAllBlocks": "View all blocks", + "viewAllTransactions": "View all transactions", + "sender": "Sender", + "more": "More", + "less": "Less", + "unableToFetchDataError": "Unable to fetch data", + "accountDetailTitle": "Account Detail", + "multisigCosignatoriesTitle": "Multisig Cosignatories", + "ownedMosaicsTitle": "Owned Mosaics", + "ownedNamespacesTitle": "Owned Namespaces", + "metadataEntriesTitle": "Metadata Entries", + "importanceHistoryTitle": "Importance History", + "blockDetailTitle": "Block Detail", + "blockTransactionsTitle": "Block Transactions", + "mosaicDetailTitle": "Mosaic Detail", + "namespaceDetailTitle": "Namespace Detail", + "namespaceLevelTitle": "Namespace Level", + "transactionInfoTitle": "Transaction Info", + "transactionDetailTitle": "Transaction Detail", + "merkleInfoTitle": "Merkle Info", + "aggregateInnerTransactionsTitle": "Aggregate Inner Transactions", + "aggregateCosignaturesTitle": "Aggregate Cosignatures", + "version":"Version", + "size":"Size", + "balanceChangeReceiptTitle":"Balance Change Receipt", + "balanceTransferReceiptTitle": "Balance Transfer Receipt", + "inflationReceiptTitle": "Inflation Receipt", + "artifactExpiryReceiptTitle": "Artifact Expiry Receipt", + "mosaicResolutionEntries": "Resolved Value", + "addressResolutionEntries": "Resolved Value", + "unresolved": "Unresolved", + "roles": "Roles", + "network": "Network", + "host": "IP / Hostname", + "port": "Port", + "friendlyName": "Friendly Name", + "approximateExpired": "Expiration Date", + "expiredInBlock": "Expired In Block", + "index": "No.", + "networkFees": "Recommended Fees Multiplier", + "networkRentalFees": "Effective Rental Fees (DHP)", + "highestFeeMultiplier": "Highest", + "averageFeeMultiplier": "Average", + "medianFeeMultiplier": "Median", + "lowestFeeMultiplier": "Lowest", + "rootNamespace": "Root Namespace", + "childNamespace": "Child Namespace", + "statistics": "Statistics", + "restrictionAddressValues": "Values", + "restrictionMosaicValues": "Values", + "restrictionValues": "Values", + "restrictionTransactionValues": "Values", + "restrictionType": "Restriction Type", + "accountRestrictionTitle": "Account Restrictions", + "mosaicAddressRestrictionTitle": "Mosaic Address Restrictions", + "restrictionAddressAdditions": "Additions", + "restrictionAddressDeletions": "Deletions", + "restrictionMosaicAdditions": "Additions", + "restrictionMosaicDeletions": "Deletions", + "restrictionOperationAdditions": "Additions", + "restrictionOperationDeletions": "Deletions", + "entryType": "Entry Type", + "restrictionKey": "Key", + "referenceMosaicId": "Reference MosaicId", + "restrictionValue": "Value", + "previousRestrictionType": "Previous Restriction Type", + "previousRestrictionValue": "Previous Restriction Value", + "newRestrictionType": "New Restriction Type", + "newRestrictionValue": "New Restriction Value", + "mosaicRestrictionType.EQ": "Equal", + "mosaicRestrictionType.GE": "Greater Than Or Equal", + "mosaicRestrictionType.GT": "Greater Than", + "mosaicRestrictionType.LE": "Less Than Or Equal", + "mosaicRestrictionType.LT": "Less Than", + "mosaicRestrictionType.NE": "Not Equal", + "mosaicRestrictionType.NONE": "No Restriction", + "proof": "Proof", + "minApprovalDelta": "Min. Approval", + "minRemovalDelta": "Min Removal", + "addressAdditions": "Added Cosigner", + "addressDeletions": "Deleted Cosigner", + "transactionAwaitingCosignatureTitle": "Transaction awaiting co-signature(s)", + "transactionAwaitingRemarkTitle": "This transaction needs multiple parties to approve by sending co-signature.", + "cosignaturesReceivedTitle": "Co-signatures received", + "innerTransactionTitle": "Inner Transaction", + "accountPartialTitle": "Account Partial Transactions", + "balance": "Balance", + "effectiveRootNamespaceRentalFeePerBlock": "Root Namespace Rental Fee / Block", + "effectiveChildNamespaceRentalFee": "Child Namespace Rental Fee", + "effectiveMosaicRentalFee": "Mosaic Rental Fee", + "recipientAddress": "Recipient", + "senderAddress": "Sender", + "cosignatoryAddresses": "Cosignatories", + "multisigAddresses": "Multisig Accounts", + "effectiveFee": "Fee", + "linkedPublicKey": "Linked Public Key", + "linkedAccountAddress": "Linked Account Address", + "proofGamma": "Proof Gamma", + "proofScalar": "Proof Scalar", + "proofVerificationHash": "Proof Verification Hash", + "accountKeyType": "Type", + "key": "Key", + "supplementalKeys": "Supplemental Keys", + "expirationDuration": "Expiration", + "transactionDescriptor_16724": "Transfer", + "transactionDescriptor_16718": "Namespace registration", + "transactionDescriptor_16974": "Address alias", + "transactionDescriptor_17230": "Mosaic alias", + "transactionDescriptor_16717": "Mosaic definition", + "transactionDescriptor_16973": "Mosaic supply change", + "transactionDescriptor_16725": "Multisig account modification", + "transactionDescriptor_16705": "Aggregate complete", + "transactionDescriptor_16961": "Aggregate bonded", + "transactionDescriptor_16712": "Hash lock", + "transactionDescriptor_16722": "Secret lock", + "transactionDescriptor_16978": "Secret proof", + "transactionDescriptor_16720": "Account address restriction", + "transactionDescriptor_16976": "Account mosaic restriction", + "transactionDescriptor_17232": "Account operation restriction", + "transactionDescriptor_16716": "Account key link", + "transactionDescriptor_16977": "Mosaic address restriction", + "transactionDescriptor_16721": "Mosaic global restriction", + "transactionDescriptor_16708": "Account metadata", + "transactionDescriptor_16964": "Mosaic metadata", + "transactionDescriptor_17220": "Namespace metadata", + "transactionDescriptor_16963": "VRF key link", + "transactionDescriptor_16707": "Voting Key link", + "transactionDescriptor_16972": "Node Key link", + "checkTransactionStatus": "Check transaction status", + "showDetail": "Show detail", + "noDataProvided": "No data provided", + "blocksTitle": "Blocks", + "accountsTitle": "Accounts", + "namespacesTitle": "Namespaces", + "mosaicsTitle": "Mosaics", + "nodesTitle": "Nodes", + + "supplementalKeysTitle": "Supplemental Keys", + "accountTransactionsTitle": "Transactions", + "resolutionStatementTitle": "Resolution Statement", + "mosaicRestrictionTitle": "Mosaic Restriction", + "mosaicRestrictionListTitle": "Mosaic Restriction List", + "harvestedBlockTitle": "Harvested Blocks", + + "accountDetailError": "This account does not have a public key yet", + "multisigCosignatoriesError": "Address is not a multisig account.", + "ownedMosaicsError": "Account owned mosaics are not available.", + "ownedNamespacesError": "Account owned namespaces are not available.", + "supplementalKeysError": "Account supplemental keys are not available.", + "transactionsError": "Account transactions are not available.", + "accountPartialError":"Account partial transactions not available.", + "metadataEntriesError": "Metadatas are not available.", + "importanceHistoryError":"Account importance history are not available.", + "accountRestrictionError": "Account restrictions are not available.", + + "blockDetailError": "Block does not exist.", + "blockTransactionsError": "Block transactions are not available.", + "balanceChangeReceiptError": "Block balance change receipts are not available.", + "balanceTransferReceiptError": "Block balance transfer receipts are not available.", + "inflationReceiptError": "Block inflation receipts are not available.", + "artifactExpiryReceiptError": "Block artifact expiry are not available.", + "resolutionStatementError": "Block resolution statement are not available.", + + "mosaicDetailError": "Mosaic does not exist.", + "mosaicRestrictionError": "Mosaic restriction does not exist.", + "mosaicRestrictionListError": "Mosaic global restrictions are not available.", + + "namespaceDetailError": "Namespace does not exist.", + "namespaceLevelError": "Namespace levels are not available.", + + "transactionInfoError": "Transaction does not exist.", + "transactionDetailError": "Transaction detail does not exist.", + "transactionMosaicsError": "Transaction mosaic does not exist.", + "transactionHashLockError": "Transaction hash lock does not exist.", + + "secretLockError": "Secret locks are not available.", + "hashLockError": "Hash locks are not available.", + "mosaicAddressRestrictionError": "Mosaic address restrictions are not available.", + "aggregateInnerTransactionsError": "Aggregate inner transactions are not available.", + "aggregateCosignaturesError": "Cosignatures are not available.", + + "beneficiaryAddress": "Beneficiary Address", + "linked": "LINKED", + "node": "NODE", + "vrf": "VRF", + "voting": "VOTING", + "nonce": "Nonce", + "action": "Action", + "delta": "Delta", + "harvestedBlock": "Harvested blocks (all)", + "transactionGraphic": "Transaction Graphic", + "resolutionType": "类型", + "receiptType": "类型", + "stateHash": "State Hash", + "stateHashSubCacheMerkleRoots": "State Hash Sub Cache Merkle Roots", + "blockReceiptsHash": "Receipts Hash", + "blockTransactionsHash": "Transactions Hash", + "position": "Position", + "hash": "Hash", + "startEpoch": "Start Finalization Epoch", + "endEpoch": "End Finalization Epoch", + "checkMosaicAddressRestrictionStatus": "Check Mosaic Address Restriction", + "check": "Check", + "payloadSize": "Size (bytes)", + "chainHeight": "Chain Height", + "finalized": "Block Finalized", + "pending": "Block Pending to Finalized", + "finalizedHeight": "Finalized Height", + "restrictions": "Restrictions (Allow If)", + "hashLockTitle": "Hash Lock", + "secretLockTitle": "Secret Lock", + "restrictionAdded": "Added", + "restrictionRemoved": "Removed", + "statements": "Statements", + "nodeDetailTitle": "Node Detail", + "nodeHostDetailTitle": "Host Detail", + "nodeLocationMapTitle": "Host Location", + "nodePublicKey": "Public Key", + "apiEndpoint": "API Endpoint", + "networkGenerationHashSeed": "Network Generation Hash Seed", + "networkIdentifier": "Network Identifier", + "location": "Location", + "ip": "IP", + "organization": "Organization", + "as": "AS", + "continent": "Continent", + "country": "Country", + "region": "Region", + "city": "City", + "district": "District", + "zip": "Zip", + "nodeStatusTitle": "Node Status", + "nodePeerStatusTitle": "Peer Node Status", + "nodeApiStatusTitle": "API Node Status", + "connectionStatus": "Connection", + "databaseStatus": "Data Base", + "apiNodeStatus": "API Node", + "isAvailable": "Available", + "lastStatusCheck": "Last Status Check", + "nodeChainInfoTitle": "Node Chain Info", + "scoreHigh": "Score High", + "scoreLow": "Score Low", + "finalizationEpoch": "Finalization Epoch", + "finalizationPoint": "Finalization Point", + "finalizedHash": "Finalized Hash", + "nodeDetailError": "Failed to fetch node detail.", + "extendGraphicValue": "Info", + "mosaicArtifactId": "ArtifactId", + "namespaceArtifactId": "ArtifactId", + "receiptTitle": "Receipt", + "created": "Created", + "ago": "ago", + "messageTypeDescriptor_-1": "Raw message", + "messageTypeDescriptor_0": "Plain message", + "messageTypeDescriptor_1": "Encrypted message", + "messageTypeDescriptor_254": "Delegated Harvesting Persistent message", + "votingNode": "Voting Node", + "nonVotingNode": "Non Voting Node", + "votingNodeTooltips": "Sync ahead of common node.", + "nonVotingNodeTooltips": "Sync behind of Voting node.", + "blockType": "Type", + "totalVotingBalance": "Total Voting Balance", + "harvestingEligibleAccountsCount": "Total Harvesting Eligible Accounts", + "votingEligibleAccountsCount": "Total Voting Eligible Accounts", + "previousImportanceBlockHash": "Previous Importance Block Hash", + "rewardPrograms": "Reward Programs", + "rewardProgram": "Reward Program", + "lastTestPassed": "Last test passed", + "nodeStatsTitle": "Node Statistics", + "allNodes": "Total count", + "nodeCountByRoles": "Count By Roles", + "chainInfo": "Chain Info", + "nodeHeightStatsTitle": "Count of nodes by chain height", + "nodeFinalizedHeightStatsTitle": "Count of nodes by finalized height", + "viewMoreStatistics": "View More Statistics", + "nodeCountChartTitle": "Node count over time", + "timestamp": "Timestamp" +} diff --git a/src/config/index.js b/src/config/index.js new file mode 100644 index 0000000..db89b93 --- /dev/null +++ b/src/config/index.js @@ -0,0 +1,21 @@ +import pageMenu from './menu.json'; +import i18n from './i18n'; +import Constants from './constants'; +import keyRedirects from './key-redirects.json'; +import * as filters from './filters.js'; + +export { + pageMenu, + i18n, + Constants, + keyRedirects, + filters +}; + +export default { + pageMenu, + i18n, + Constants, + keyRedirects, + filters +}; diff --git a/src/config/key-redirects.json b/src/config/key-redirects.json new file mode 100644 index 0000000..0eb0e6d --- /dev/null +++ b/src/config/key-redirects.json @@ -0,0 +1,62 @@ +{ + "account": "accounts", + "harvester": "accounts", + "beneficiaryAddress": "accounts", + "address": "accounts", + "signer": "accounts", + "recipient": "accounts", + "senderAddress": "accounts", + "ownerAddress": "accounts", + "aliasAddress": "accounts", + "sourceAddress": "accounts", + "targetAddress": "accounts", + "addressResolutionEntries_": "accounts", + "restrictionAddressValues_": "accounts", + "restrictionAddressAdditions_": "accounts", + "restrictionAddressDeletions_": "accounts", + "cosignatoryAddresses_": "accounts", + "multisigAddresses_": "accounts", + "addressAdditions_": "accounts", + "addressDeletions_": "accounts", + "linkedAccountAddress": "accounts", + + "transaction": "transactions", + "transactionHash": "transactions", + + "mosaic": "mosaics", + "mosaicId": "mosaics", + "aliasMosaic": "mosaics", + "targetMosaicId": "mosaics", + "mosaicResolutionEntries_": "mosaics", + "restrictionMosaicValues_": "mosaics", + "referenceMosaicId": "mosaics", + "restrictionMosaicAdditions_": "mosaics", + "restrictionMosaicDeletions_": "mosaics", + "mosaicArtifactId": "mosaics", + + "block": "blocks", + "height": "blocks", + "addressHeight": "blocks", + "publicKeyHeight": "blocks", + "importanceHeight": "blocks", + "blockHeight": "blocks", + "startHeight": "blocks", + "endHeight": "blocks", + "lastActivity": "blocks", + "recalculationBlock": "blocks", + + "namespace": "namespaces", + "namespaceName": "namespaces", + "namespaceId": "namespaces", + "parentId": "namespaces", + "linkedNamespace": "namespaces", + "mosaicAliasNames_": "namespaces", + "targetMosaicAliasNames_": "namespaces", + "accountAliasNames_": "namespaces", + "targetNamespaceId": "namespaces", + "unresolved": "namespaces", + "namespaceArtifactId": "namespaces", + + "node": "nodes", + "nodePublicKey": "nodes" +} \ No newline at end of file diff --git a/src/config/loader.js b/src/config/loader.js new file mode 100644 index 0000000..429b1b6 --- /dev/null +++ b/src/config/loader.js @@ -0,0 +1,11 @@ +import Axios from 'axios'; + +const CONFIG_ROUTE = '/config'; + +export const loadConfig = () => Axios.get(window.location.origin + CONFIG_ROUTE) + .then(res => { + window.globalConfig = (res.data !== null && typeof res.data === 'object') + ? res.data + : undefined; + }) + .catch(() => {}); diff --git a/src/config/menu.json b/src/config/menu.json new file mode 100644 index 0000000..718b1d4 --- /dev/null +++ b/src/config/menu.json @@ -0,0 +1,12 @@ +{ + "items": [ + { "to": "/", "text": "home", "icon": "IconHome" }, + { "to": "/blocks", "text": "blocks", "icon": "IconBlocks" }, + { "to": "/transactions", "text": "transactions", "icon": "IconTransactions" }, + { "to": "/accounts", "text": "accounts", "icon": "IconAccounts" }, + { "to": "/namespaces", "text": "namespaces", "icon": "IconNamespaces" }, + { "to": "/mosaics", "text": "mosaics", "icon": "IconMosaics" }, + { "to": "/nodes", "text": "nodes", "icon": "IconNodes" }, + { "to": "/statistics", "text": "statistics", "icon": "IconStatistics" } + ] +} diff --git a/src/config/pages/account-detail.json b/src/config/pages/account-detail.json new file mode 100644 index 0000000..37ab559 --- /dev/null +++ b/src/config/pages/account-detail.json @@ -0,0 +1,267 @@ +{ + "path": "/accounts/:address", + "name": "account-detail", + "meta": { + "group": "detail-page", + "keepAliveGoTo": [] + }, + "props": { + "layout": "flex", + "storeNamespaces": [], + "initActions": [ + "account/fetchAccountDetail" + ], + "schema": [ + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "accountDetailTitle", + "managerGetter": "account/info", + "errorMessage": "accountDetailError", + "pagination": "none", + "fields": [ + "address", + "accountAliasNames", + "addressHeight", + "publicKey", + "importance", + "accountType" + ] + }, + { + "layoutOptions": "adaptive", + "type": "CardTable", + "title": "multisigCosignatoriesTitle", + "managerGetter": "account/multisig", + "errorMessage": "multisigCosignatoriesError", + "pagination": "none", + "hideOnError": true, + "hideDependOnGetter": "account/info", + "fields": [ + "minApproval", + "minRemoval", + "cosignatoryAddresses", + "multisigAddresses" + ] + }, + { + "layoutOptions": "adaptive", + "type": "AccountBalanceWidget", + "title": "accountBalanceTitle", + "managerGetter": "account/OwnedMosaic", + "dataGetter": "account/balanceWidget", + "hideOnError": true, + "hideDependOnGetter": "account/info" + }, + { + "layoutOptions": "adaptive", + "type": "CardTable", + "title": "ownedMosaicsTitle", + "managerGetter": "account/OwnedMosaic", + "pagination": "client", + "pageSize": 5, + "hideOnError": true, + "hideDependOnGetter": "account/info", + "onRowClickKey": "mosaicId", + "fields": [ + "mosaicId", + "amount", + "mosaicAliasNames" + ] + }, + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "ownedNamespacesTitle", + "managerGetter": "account/OwnedNamespace", + "pagination": "server", + "pageSize": 10, + "hideOnError": true, + "hideDependOnGetter": "account/info", + "fields": [ + "namespaceName", + "status", + "expirationDuration", + "registrationType" + ] + }, + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "accountTransactionsTitle", + "managerGetter": "account/transactions", + "pagination": "server", + "hasFilter": true, + "hideOnError": true, + "hideDependOnGetter": "account/info", + "onRowClickKey": "transactionHash", + "fields": [ + "timestamp", + "blockHeight", + "direction", + "transactionType", + "transactionHash", + "recipient", + "extendGraphicValue" + ], + "mobileFields": [ + "timestamp", + "direction", + "transactionType", + "transactionHash" + ] + }, + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "supplementalKeysTitle", + "managerGetter": "account/info", + "dataGetter": "account/getSupplementalPublicKeys", + "pagination": "client", + "pageSize": 5, + "hideOnError": true, + "hideDependOnGetter": "account/info", + "fields": [ + "linked", + "node", + "vrf", + "voting" + ] + }, + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "accountRestrictionTitle", + "managerGetter": "account/accountRestrictions", + "pagination": "client", + "hideOnError": true, + "hideDependOnGetter": "account/info", + "errorMessage": "accountRestrictionError", + "fields": [ + "restrictionType", + "restrictionMosaicValues", + "restrictionAddressValues", + "restrictionTransactionValues" + ] + }, + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "mosaicAddressRestrictionTitle", + "managerGetter": "account/mosaicAddressRestrictions", + "pagination": "server", + "hideOnError": true, + "hideDependOnGetter": "account/info", + "errorMessage": "mosaicAddressRestrictionError", + "fields": [ + "compositeHash", + "entryType", + "mosaicId", + "restrictions" + ] + }, + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "metadataEntriesTitle", + "managerGetter": "account/metadatas", + "pagination": "client", + "pageSize": 5, + "hideOnError": true, + "hasFilter":true, + "hideDependOnGetter": "account/info", + "fields": [ + "scopedMetadataKey", + "senderAddress", + "targetAddress", + "metadataValue" + ] + }, + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "hashLockTitle", + "managerGetter": "account/hashLocks", + "pagination": "server", + "hideOnError": true, + "hideDependOnGetter": "account/info", + "errorMessage": "hashLockError", + "onRowClickKey": "transactionHash", + "fields": [ + "transactionHash", + "endHeight", + "status", + "mosaics" + ] + }, + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "secretLockTitle", + "managerGetter": "account/secretLocks", + "pagination": "server", + "hideOnError": true, + "hideDependOnGetter": "account/info", + "errorMessage": "secretLockError", + "fields": [ + "recipient", + "secret", + "endHeight", + "status", + "hashAlgorithm", + "mosaics" + ] + }, + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "importanceHistoryTitle", + "managerGetter": "account/info", + "dataGetter": "account/getActivityBucketList", + "pagination": "client", + "pageSize": 5, + "hideOnError": true, + "hideDependOnGetter": "account/info", + "fields": [ + "recalculationBlock", + "totalFeesPaid", + "beneficiaryCount", + "importanceScore" + ] + }, + { + "layoutOptions": "adaptive", + "type": "CardTable", + "title": "harvestedBlockTitle", + "managerGetter": "account/harvestedBlocks", + "pagination": "server", + "hideEmptyData": true, + "hideOnError": true, + "hideDependOnGetter": "account/info", + "fields": [ + "version", + "height", + "receiptType", + "mosaics" + ] + }, + { + "layoutOptions": "adaptive", + "type": "CardTable", + "title": "receiptTitle", + "managerGetter": "account/receipt", + "pagination": "server", + "hasFilter": true, + "hideOnError": true, + "hideDependOnGetter": "account/info", + "fields": [ + "version", + "height", + "receiptType", + "recipient", + "mosaics" + ] + } + ] + } +} \ No newline at end of file diff --git a/src/config/pages/account-list.json b/src/config/pages/account-list.json new file mode 100644 index 0000000..6c13e85 --- /dev/null +++ b/src/config/pages/account-list.json @@ -0,0 +1,38 @@ + +{ + "path": "/accounts", + "name": "accounts", + "meta": { + "group": "list-page", + "keepAliveGoTo": ["detail-page"] + }, + "props": { + "layout": "flex", + "storeNamespaces": ["account"], + "schema": [ + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "accountsTitle", + "managerGetter": "account/timeline", + "errorMessage": "Failed to fetch account list", + "pagination": "server", + "hasFilter": true, + "onRowClickKey": "address", + "fields": [ + "address", + "balance", + "lastActivity", + "importance", + "accountAliasNames" + ], + "mobileFields": [ + "address", + "importance", + "info" + ] + } + ] + } +} + diff --git a/src/config/pages/block-detail.json b/src/config/pages/block-detail.json new file mode 100644 index 0000000..640d7ce --- /dev/null +++ b/src/config/pages/block-detail.json @@ -0,0 +1,109 @@ +{ + "path": "/blocks/:height", + "name": "block-detail", + "meta": { + "group": "detail-page", + "keepAliveGoTo": [] + }, + "props": { + "layout": "flex", + "storeNamespaces": ["block"], + "initActions": ["block/fetchBlockInfo"], + "schema": [ + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "blockDetailTitle", + "managerGetter": "block/info", + "errorMessage": "blockDetailError", + "pagination": "custom", + "paginationOptions": { + "nextPageAction": "block/nextBlock", + "previousPageAction": "block/previousBlock", + "canFetchPrevious": true, + "canFetchNext": true + }, + "fields": [ + "version", + "blockType", + "confirmations", + "height", + "payloadSize", + "timestamp", + "symbolTime", + "totalFee", + "difficulty", + "feeMultiplier", + "totalTransactions", + "statements", + "votingEligibleAccountsCount", + "harvestingEligibleAccountsCount", + "totalVotingBalance", + "harvester", + "beneficiaryAddress", + "blockHash", + "previousImportanceBlockHash", + "proofGamma", + "proofScalar", + "proofVerificationHash" + ] + }, + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "blockTransactionsTitle", + "managerGetter": "block/blockTransactions", + "pagination": "server", + "onRowClickKey": "transactionHash", + "hasFilter": true, + "fields": [ + "timestamp", + "transactionHash", + "transactionType" + ] + }, + { + "layoutOptions": "adaptive", + "type": "CardTable", + "title": "merkleInfoTitle", + "managerGetter": "block/info", + "dataGetter": "block/merkleInfo", + "pagination": "none" + }, + { + "layoutOptions": "adaptive", + "type": "CardTable", + "title": "receiptTitle", + "hasFilter": true, + "managerGetter": "block/receipt", + "pagination": "server", + "fields": [ + "version", + "receiptType", + "targetAddress", + "senderAddress", + "recipient", + "mosaics", + "namespaceArtifactId", + "mosaicArtifactId" + ] + }, + { + "layoutOptions": "adaptive", + "type": "CardTable", + "title": "resolutionStatementTitle", + "managerGetter": "block/blockReceipts", + "dataGetter": "block/resolutionStatement", + "pagination": "client", + "pageSize": 5, + "hideEmptyData": true, + "fields": [ + "resolutionType", + "unresolved", + "addressResolutionEntries", + "mosaicResolutionEntries" + ] + } + ] + } +} \ No newline at end of file diff --git a/src/config/pages/block-list.json b/src/config/pages/block-list.json new file mode 100644 index 0000000..ce7629c --- /dev/null +++ b/src/config/pages/block-list.json @@ -0,0 +1,41 @@ +{ + "path": "/blocks", + "name": "blocks", + "meta": { + "group": "list-page", + "keepAliveGoTo": ["detail-page"] + }, + "props": { + "layout": "flex", + "storeNamespaces": ["block"], + "schema": [ + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "blocksTitle", + "managerGetter": "block/timeline", + "infoTextGetter": "block/infoText", + "pagination": "server", + "hasFilter": false, + "hasInfoText": true, + "onRowClickKey": "height", + "fields": [ + "height", + "blockType", + "age", + "totalTransactions", + "statements", + "totalFee", + "timestamp", + "harvester" + ], + "mobileFields": [ + "height", + "age", + "transactions", + "totalFee" + ] + } + ] + } +} \ No newline at end of file diff --git a/src/config/pages/example-layout-grid.json b/src/config/pages/example-layout-grid.json new file mode 100644 index 0000000..2e1afce --- /dev/null +++ b/src/config/pages/example-layout-grid.json @@ -0,0 +1,32 @@ +{ + "path": "/grid", + "name": "grid", + "meta": { + "group": "detail-page", + "keepAliveGoTo": [] + }, + "props": { + "layout": "grid", + "storeNamespaces": ["account", "chain", "block", "transaction"], + "schema": [ + { + "layoutOptions": "grid-column: 2 / 3; grid-row: 1 / 2;", + "type": "BaseInfoWidget" + }, + { + "layoutOptions": "grid-column: 1 / 2; grid-row: 1 / 3;", + "type": "CardTable", + "title": "Transactions", + "managerGetter": "transaction/timeline", + "errorMessage": "No data", + "pagination": "client", + "pageSize": 5, + "hasFilter": true + }, + { + "layoutOptions": "grid-column: 2 / 3; grid-row: 2 / 3;", + "type": "RecentBlocksWidget" + } + ] + } +} \ No newline at end of file diff --git a/src/config/pages/index.js b/src/config/pages/index.js new file mode 100644 index 0000000..cd82d17 --- /dev/null +++ b/src/config/pages/index.js @@ -0,0 +1,15 @@ +export default [ + require('./account-list'), + require('./block-list'), + require('./mosaic-list'), + require('./namespace-list'), + require('./node-list'), + require('./transaction-list'), + + require('./account-detail'), + require('./block-detail'), + require('./mosaic-detail'), + require('./namespace-detail'), + require('./node-detail'), + require('./transaction-detail') +]; diff --git a/src/config/pages/mosaic-detail.json b/src/config/pages/mosaic-detail.json new file mode 100644 index 0000000..624938a --- /dev/null +++ b/src/config/pages/mosaic-detail.json @@ -0,0 +1,99 @@ +{ + "path": "/mosaics/:mosaicId", + "name": "mosaic-detail", + "meta": { + "group": "detail-page", + "keepAliveGoTo": [] + }, + "props": { + "layout": "flex", + "storeNamespaces": [], + "initActions": ["mosaic/fetchMosaicInfo"], + "schema": [ + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "mosaicDetailTitle", + "managerGetter": "mosaic/info", + "errorMessage": "mosaicDetailError", + "pagination": "none", + "fields": [ + "mosaicId", + "mosaicAliasNames", + "divisibility", + "address", + "supply", + "relativeAmount", + "revision", + "startHeight", + "expiredInBlock", + "expirationDuration", + "supplyMutable", + "transferable", + "restrictable" + ] + }, + { + "layoutOptions": "adaptive", + "type": "CardTable", + "title": "mosaicRestrictionListTitle", + "managerGetter": "mosaic/restrictions", + "errorMessage": "mosaicRestrictionListError", + "pagination": "server", + "hasFilter": true, + "fields": [ + "compositeHash", + "entryType", + "targetAddress", + "restrictions" + ] + }, + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "metadataEntriesTitle", + "managerGetter": "mosaic/metadatas", + "errorMessage": "metadataEntriesError", + "pagination": "server", + "hasFilter": true, + "fields": [ + "scopedMetadataKey", + "targetId", + "senderAddress", + "targetAddress", + "metadataValue" + ] + }, + { + "layoutOptions": "adaptive", + "type": "CardTable", + "title": "balanceTransferReceiptTitle", + "managerGetter": "mosaic/balanceTransferReceipt", + "pagination": "server", + "hideEmptyData": true, + "hideOnError": true, + "fields": [ + "version", + "height", + "receiptType", + "recipient", + "mosaics" + ] + }, + { + "layoutOptions": "adaptive", + "type": "CardTable", + "title": "artifactExpiryReceiptTitle", + "managerGetter": "mosaic/artifactExpiryReceipt", + "pagination": "server", + "hideEmptyData": true, + "hideOnError": true, + "fields": [ + "version", + "receiptType", + "mosaicArtifactId" + ] + } + ] + } +} \ No newline at end of file diff --git a/src/config/pages/mosaic-list.json b/src/config/pages/mosaic-list.json new file mode 100644 index 0000000..651d88b --- /dev/null +++ b/src/config/pages/mosaic-list.json @@ -0,0 +1,36 @@ +{ + "path": "/mosaics", + "name": "mosaics", + "meta": { + "group": "list-page", + "keepAliveGoTo": ["detail-page"] + }, + "props": { + "layout": "flex", + "storeNamespaces": ["mosaic"], + "schema": [ + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "mosaicsTitle", + "managerGetter": "mosaic/timeline", + "errorMessage": "Failed to fetch mosaic list", + "pagination": "server", + "onRowClickKey": "mosaicId", + "fields": [ + "mosaicId", + "mosaicAliasNames", + "ownerAddress", + "relativeAmount", + "divisibility", + "startHeight" + ], + "mobileFields": [ + "mosaicId", + "mosaicAliasNames", + "ownerAddress" + ] + } + ] + } +} \ No newline at end of file diff --git a/src/config/pages/namespace-detail.json b/src/config/pages/namespace-detail.json new file mode 100644 index 0000000..d962974 --- /dev/null +++ b/src/config/pages/namespace-detail.json @@ -0,0 +1,96 @@ +{ + "path": "/namespaces/:namespaceId", + "name": "namespace-detail", + "meta": { + "group": "detail-page", + "keepAliveGoTo": [] + }, + "props": { + "layout": "flex", + "storeNamespaces": [], + "initActions": ["namespace/fetchNamespaceInfo"], + "schema": [ + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "namespaceDetailTitle", + "managerGetter": "namespace/info", + "errorMessage": "namespaceDetailError", + "pagination": "none", + "fields": [ + "ownerAddress", + "namespaceName", + "namespaceId", + "registrationType", + "status", + "aliasType", + "aliasAddress", + "aliasMosaic", + "startHeight", + "expiredInBlock", + "beforeEndHeight", + "endHeight" + ] + }, + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "namespaceLevelTitle", + "managerGetter": "namespace/namespaceLevel", + "errorMessage": "namespaceLevelError", + "pagination": "none", + "fields": [ + "name", + "namespaceId", + "parentId" + ] + }, + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "metadataEntriesTitle", + "managerGetter": "namespace/metadatas", + "errorMessage": "metadataEntriesError", + "pagination": "server", + "hasFilter": true, + "fields": [ + "scopedMetadataKey", + "targetId", + "senderAddress", + "targetAddress", + "metadataValue" + ] + }, + { + "layoutOptions": "adaptive", + "type": "CardTable", + "title": "balanceTransferReceiptTitle", + "managerGetter": "namespace/balanceTransferReceipt", + "pagination": "server", + "hideEmptyData": true, + "hideOnError": true, + "fields": [ + "version", + "height", + "receiptType", + "recipient", + "mosaics" + ] + }, + { + "layoutOptions": "adaptive", + "type": "CardTable", + "title": "artifactExpiryReceiptTitle", + "managerGetter": "namespace/artifactExpiryReceipt", + "pagination": "server", + "hideEmptyData": true, + "hideOnError": true, + "fields": [ + "version", + "receiptType", + "namespaceArtifactId" + ] + } + ] + } +} \ No newline at end of file diff --git a/src/config/pages/namespace-list.json b/src/config/pages/namespace-list.json new file mode 100644 index 0000000..1d92e5a --- /dev/null +++ b/src/config/pages/namespace-list.json @@ -0,0 +1,36 @@ +{ + "path": "/namespaces", + "name": "namespaces", + "meta": { + "group": "list-page", + "keepAliveGoTo": ["detail-page"] + }, + "props": { + "layout": "flex", + "storeNamespaces": ["namespace"], + "schema": [ + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "namespacesTitle", + "managerGetter": "namespace/timeline", + "errorMessage": "Failed to fetch namespace list", + "pagination": "server", + "hasFilter": true, + "onRowClickKey": "namespaceName", + "fields": [ + "namespaceName", + "namespaceId", + "ownerAddress", + "expirationDuration", + "approximateExpired" + ], + "mobileFields": [ + "namespaceName", + "ownerAddress", + "duration" + ] + } + ] + } +} \ No newline at end of file diff --git a/src/config/pages/node-detail.json b/src/config/pages/node-detail.json new file mode 100644 index 0000000..eb8496a --- /dev/null +++ b/src/config/pages/node-detail.json @@ -0,0 +1,56 @@ +{ + "path": "/nodes/:publicKey", + "name": "node-detail", + "meta": { + "group": "detail-page", + "keepAliveGoTo": [] + }, + "props": { + "layout": "flex", + "storeNamespaces": [], + "initActions": ["node/fetchNodeInfo"], + "schema": [ + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "nodeDetailTitle", + "managerGetter": "node/info", + "errorMessage": "nodeDetailError", + "pagination": "none", + "fields": [ + "friendlyName", + "roles", + "version", + "host", + "port", + "apiEndpoint", + "networkGenerationHashSeed", + "network", + "networkIdentifier", + "publicKey", + "address" + ] + }, + { + "layoutOptions": "adaptive", + "type": "CardTable", + "title": "nodeApiStatusTitle", + "managerGetter": "node/info", + "dataGetter": "node/apiStatus", + "errorMessage": "nodeDetailError", + "pagination": "none", + "hideEmptyData": true + }, + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "nodeChainInfoTitle", + "managerGetter": "node/info", + "dataGetter": "node/chainInfo", + "errorMessage": "nodeDetailError", + "pagination": "none", + "hideEmptyData": true + } + ] + } +} \ No newline at end of file diff --git a/src/config/pages/node-list.json b/src/config/pages/node-list.json new file mode 100644 index 0000000..514799f --- /dev/null +++ b/src/config/pages/node-list.json @@ -0,0 +1,45 @@ +{ + "path": "/nodes", + "name": "nodes", + "meta": { + "group": "list-page", + "keepAliveGoTo": ["detail-page"] + }, + "props": { + "layout": "flex", + "storeNamespaces": ["node"], + "schema": [ + { + "type": "NodeStatsWidget", + "managerGetter": "node/nodeStats", + "hideDependOnGetter": "node/nodeStats" + }, + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "nodesTitle", + "managerGetter": "node/timeline", + "errorMessage": "Failed to fetch node list", + "pagination": "client", + "pageSize": 1000, + "hasFilter": true, + "onRowClickKey": "nodePublicKey", + "fields": [ + "index", + "host", + "friendlyName", + "roles", + "nodePublicKey", + "chainInfo", + "version", + "rewardPrograms" + ], + "mobileFields": [ + "host", + "friendlyName", + "nodePublicKey" + ] + } + ] + } +} \ No newline at end of file diff --git a/src/config/pages/transaction-detail.json b/src/config/pages/transaction-detail.json new file mode 100644 index 0000000..785f9a5 --- /dev/null +++ b/src/config/pages/transaction-detail.json @@ -0,0 +1,96 @@ +{ + "path": "/transactions/:transactionHash", + "name": "transaction-detail", + "meta": { + "group": "detail-page", + "keepAliveGoTo": [] + }, + "props": { + "layout": "flex", + "storeNamespaces": [], + "initActions": ["transaction/getTransactionInfoByHash"], + "schema": [ + { + "layoutOptions": "full-width", + "type": "TransactionGraphicWidget", + "managerGetter": "transaction/transactionSchema" + }, + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "transactionInfoTitle", + "managerGetter": "transaction/info", + "errorMessage": "transactionInfoError", + "pagination": "none", + "fields": [ + "version", + "blockHeight", + "payloadSize", + "transactionHash", + "timestamp", + "deadline", + "effectiveFee", + "signature", + "signer", + "status", + "confirm" + ] + }, + { + "layoutOptions": "adaptive", + "type": "CardTable", + "title": "transactionDetailTitle", + "managerGetter": "transaction/info", + "dataGetter": "transaction/transactionDetail", + "errorMessage": "transactionDetailError", + "pagination": "none" + }, + { + "layoutOptions": "adaptive", + "type": "CardTable", + "title": "hashLockTitle", + "managerGetter": "transaction/hashLock", + "errorMessage": "transactionHashLockError", + "pagination": "none", + "fields": [ + "endHeight", + "ownerAddress", + "status", + "mosaics" + ] + }, + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "aggregateInnerTransactionsTitle", + "managerGetter": "transaction/info", + "dataGetter": "transaction/aggregateInnerTransactions", + "errorMessage": "aggregateInnerTransactionsError", + "pagination": "client", + "pageSize": 5, + "hideEmptyData": true, + "fields": [ + "index", + "transactionType", + "signer", + "transactionBody" + ] + }, + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "aggregateCosignaturesTitle", + "managerGetter": "transaction/info", + "dataGetter": "transaction/aggregateCosignatures", + "errorMessage": "aggregateCosignaturesError", + "pagination": "client", + "pageSize": 5, + "hideEmptyData": true, + "fields": [ + "signature", + "signer" + ] + } + ] + } +} \ No newline at end of file diff --git a/src/config/pages/transaction-list.json b/src/config/pages/transaction-list.json new file mode 100644 index 0000000..a42bb5c --- /dev/null +++ b/src/config/pages/transaction-list.json @@ -0,0 +1,39 @@ +{ + "path": "/transactions", + "name": "transactions", + "meta": { + "group": "list-page", + "keepAliveGoTo": ["detail-page"] + }, + "props": { + "layout": "flex", + "storeNamespaces": ["transaction"], + "schema": [ + { + "layoutOptions": "full-width", + "type": "CardTable", + "title": "transactions", + "managerGetter": "transaction/timeline", + "errorMessage": "Failed to fetch transaction list", + "pagination": "server", + "hasFilter": true, + "onRowClickKey": "transactionHash", + "fields": [ + "height", + "timestamp", + "transactionHash", + "transactionType", + "signer", + "recipient", + "extendGraphicValue" + ], + "mobileFields": [ + "height", + "transactionType", + "transactionHash", + "signer" + ] + } + ] + } +} \ No newline at end of file diff --git a/src/documents/privacy.json b/src/documents/privacy.json new file mode 100644 index 0000000..0e77f78 --- /dev/null +++ b/src/documents/privacy.json @@ -0,0 +1,3 @@ +{ + "base64": "JVBERi0xLjUKJb/3ov4KMjIgMCBvYmoKPDwgL0xpbmVhcml6ZWQgMSAvTCA4MzQ4NyAvSCBbIDk0MyAxOTEgXSAvTyAyNiAvRSA1MzgyOSAvTiAxMSAvVCA4MzA4NiA+PgplbmRvYmoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKMjMgMCBvYmoKPDwgL1R5cGUgL1hSZWYgL0xlbmd0aCA2NSAvRmlsdGVyIC9GbGF0ZURlY29kZSAvRGVjb2RlUGFybXMgPDwgL0NvbHVtbnMgNCAvUHJlZGljdG9yIDEyID4+IC9XIFsgMSAyIDEgXSAvSW5kZXggWyAyMiA1MSBdIC9JbmZvIDM1IDAgUiAvUm9vdCAyNCAwIFIgL1NpemUgNzMgL1ByZXYgODMwODcgICAgICAgICAgICAgICAgIC9JRCBbPDNkMzNlZmUzZDZlMjUyMWJiODc1NmZjNjFiNmZhODJiPjwzZDMzZWZlM2Q2ZTI1MjFiYjg3NTZmYzYxYjZmYTgyYj5dID4+CnN0cmVhbQp4nGNiZOBnYGJgOAkkmJeAWMZAgnE/iGACEpzSQCJkDYjbCCQiHYAE01QgwcMJElNnYGI0TQVpAykfegQAiM0GsAplbmRzdHJlYW0KZW5kb2JqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCjI0IDAgb2Jq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" +} \ No newline at end of file diff --git a/src/documents/terms.json b/src/documents/terms.json new file mode 100644 index 0000000..31bb035 --- /dev/null +++ b/src/documents/terms.json @@ -0,0 +1,3 @@ +{ + "base64": "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IDw8L1Byb2NTZXQgWy9QREYgL1RleHQgL0ltYWdlQiAvSW1hZ2VDIC9JbWFnZUldCi9FeHRHU3RhdGUgPDwvRzMgMyAwIFIKL0c2IDYgMCBSPj4KL0ZvbnQgPDwvRjQgNCAwIFIKL0Y1IDUgMCBSPj4+PgovTWVkaWFCb3ggWzAgMCA1OTYgODQyXQovQW5ub3RzIFs3IDAgUl0KL0NvbnRlbnRzIDggMCBSCi9TdHJ1Y3RQYXJlbnRzIDAKL1BhcmVudCAyNyAwIFI+PgplbmRvYmoKOSAwIG9iago8PC9UeXBlIC9QYWdlCi9SZXNvdXJjZXMgPDwvUHJvY1NldCBbL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSV0KL0V4dEdTdGF0ZSA8PC9HMyAzIDAgUgovRzYgNiAwIFI+PgovRm9udCA8PC9GNCA0IDAgUgovRjUgNSAwIFI+Pj4+Ci9NZWRpYUJveCBbMCAwIDU5NiA4NDJdCi9Db250ZW50cyAxMCAwIFIKL1N0cnVjdFBhcmVudHMgMQovUGFyZW50IDI3IDAgUj4+CmVuZG9iagoxMSAwIG9iago8PC9UeXBlIC9QYWdlCi9SZXNvdXJjZXMgPDwvUHJvY1NldCBbL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSV0KL0V4dEdTdGF0ZSA8PC9HMyAzIDAgUgovRzYgNiAwIFI+PgovRm9udCA8PC9GNCA0IDAgUgovRjUgNSAwIFI+Pj4+Ci9NZWRpYUJveCBbMCAwIDU5NiA4NDJdCi9Db250ZW50cyAxMiAwIFIKL1N0cnVjdFBhcmVudHMgMgovUGFyZW50IDI3IDAgUj4+CmVuZG9iagoxMyAwIG9iago8PC9UeXBlIC9QYWdlCi9SZXNvdXJjZXMgPDwvUHJvY1NldCBbL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSV0KL0V4dEdTdGF0ZSA8PC9HMyAzIDAgUj4+Ci9Gb250IDw8L0Y0IDQgMCBSCi9GNSA1IDAgUj4+Pj4KL01lZGlhQm94IFswIDAgNTk2IDg0Ml0KL0NvbnRlbnRzIDE0IDAgUgovU3RydWN0UGFyZW50cyAzCi9QYXJlbnQgMjcgMCBSPj4KZW5kb2JqCjE1IDAgb2JqCjw8L1R5cGUgL1BhZ2UKL1Jlc291cmNlcyA8PC9Qcm9jU2V0IFsvUERGIC9UZXh0IC9JbWFnZUIgL0ltYWdlQyAvSW1hZ2VJXQovRXh0R1N0YXRlIDw8L0czIDMgMCBSPj4KL0ZvbnQgPDwvRjQgNCAwIFIKL0Y1IDUgMCBSPj4+PgovTWVkaWFCb3ggWzAgMCA1OTYgODQyXQovQ29udGVudHMgMTYgMCBSCi9TdHJ1Y3RQYXJlbnRzIDQKL1BhcmVudCAyNyAwIFI+PgplbmRvYmoKMTcgMCBvYmoKPDwvVHlwZSAvUGFnZQovUmVzb3VyY2VzIDw8L1Byb2NTZXQgWy9QREYgL1RleHQgL0ltYWdlQiAvSW1hZ2VDIC9JbWFnZUldCi9FeHRHU3RhdGUgPDwvRzMgMyAwIFI+PgovRm9udCA8PC9GNCA0IDAgUgovRjUgNSAwIFI+Pj4+Ci9NZWRpYUJveCBbMCAwIDU5NiA4NDJdCi9Db250ZW50cyAxOCAwIFIKL1N0cnVjdFBhcmVudHMgNQovUGFyZW50IDI3IDAgUj4+CmVuZG9iagoxOSAwIG9iago8PC9UeXBlIC9QYWdlCi9SZXNvdXJjZXMgPDwvUHJvY1NldCBbL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSV0KL0V4dEdTdGF0ZSA8PC9HMyAzIDAgUj4+Ci9Gb250IDw8L0Y0IDQgMCBSCi9GNSA1IDAgUj4+Pj4KL01lZGlhQm94IFswIDAgNTk2IDg0Ml0KL0NvbnRlbnRzIDIwIDAgUgovU3RydWN0UGFyZW50cyA2Ci9QYXJlbnQgMjcgMCBSPj4KZW5kb2JqCjIxIDAgb2JqCjw8L1R5cGUgL1BhZ2UKL1Jlc291cmNlcyA8PC9Qcm9jU2V0IFsvUERGIC9UZXh0IC9JbWFnZUIgL0ltYWdlQyAvSW1hZ2VJXQovRXh0R1N0YXRlIDw8L0czIDMgMCBSPj4KL0ZvbnQgPDwvRjQgNCAwIFIKL0Y1IDUgMCBSPj4+PgovTWVkaWFCb3ggWzAgMCA1OTYgODQyXQovQ29udGVudHMgMjIgMCBSCi9TdHJ1Y3RQYXJlbnRzIDcKL1BhcmVudCAyNyAwIFI+PgplbmRvYmoKMjMgMCBvYmoKPDwvVHlwZSAvUGFnZQovUmVzb3VyY2VzIDw8L1Byb2NTZXQgWy9QREYgL1RleHQgL0ltYWdlQiAvSW1hZ2VDIC9JbWFnZUldCi9FeHRHU3RhdGUgPDwvRzMgMyAwIFIKL0c2IDYgMCBSPj4KL0ZvbnQgPDwvRjQgNCAwIFIKL0Y1IDUgMCBSPj4+PgovTWVkaWFCb3ggWzAgMCA1OTYgODQyXQovQ29udGVudHMgMjQgMCBSCi9TdHJ1Y3RQYXJlbnRzIDgKL1BhcmVudCAyOCAwIFI+PgplbmRvYmoKMjUgMCBvYmoKPDwvVHlwZSAvUGFnZQovUmVzb3VyY2VzIDw8L1Byb2NTZXQgWy9QREYgL1RleHQgL0ltYWdlQiAvSW1hZ2VDIC9JbWFnZUldCi9FeHRHU3RhdGUgPDwvRzMgMyAwIFIKL0c2IDYgMCBSPj4KL0ZvbnQgPDwvRjQgNCAwIFIKL0Y1IDUgMCBSPj4+PgovTWVkaWFCb3ggWzAgMCA1OTYgODQyXQovQ29udGVudHMgMjYgMCBSCi9TdHJ1Y3RQYXJlbnRzIDkKL1BhcmVudCAyOCAwIFI+PgplbmRvYmoKMjcgMCBvYmoKPDwvVHlwZSAvUGFnZXMKL0NvdW50IDgKL0tpZHMgWzIgMCBSIDkgMCBSIDExIDAgUiAxMyAwIFIgMTUgMCBSIDE3IDAgUiAxOSAwIFIgMjEgMCBSXQovUGFyZW50IDI5IDAgUj4+CmVuZG9iagoyOCAwIG9iago8PC9UeXBlIC9QYWdlcwovQ291bnQgMgovS2lkcyBbMjMgMCBSIDI1IDAgUl0KL1BhcmVudCAyOSAwIFI+PgplbmRvYmoKMjkgMCBvYmoKPDwvVHlwZSAvUGFnZXMKL0NvdW50IDEwCi9LaWRzIFsyNyAwIFIgMjggMCBSXT4+CmVuZG9iagozMCAwIG9iago8PC9oLmdqZGd4cyBbMiAwIFIgL1hZWiA3MC45MDAwMDIgNzk5LjQ1MDAxIDBdCi9oLjMwajB6bGwgWzIgMCBSIC9YWVogNzAuOTAwMDAyIDMwOS4zMDQ2OSAwXQovaC4zMGowemxsIFsyIDAgUiAvWFlaIDcwLjkwMDAwMiAyOTcuMjMwNzEgMF0KL2guMzBqMHpsbCBbMiAwIFIgL1hZWiA3MC45MDAwMDIgMjg1LjE1Njc0IDBdCi9o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TyBRO8FPpUb3CZkmOyeWOwLq5CjVn/yA+p42Ei2i4mmudHaOdk6I2yXp4q5efio1Or3RsRNmqROi+MnlAamnT5iFYCTqtU8tw6ZMkMicEqB6IfVYI1ghxIj+G6GfgLwKZW5kc3RyZWFtCmVuZG9iagozMyAwIG9iago8PC9UeXBlIC9Gb250RGVzY3JpcHRvcgovRm9udE5hbWUgL0FyaWFsLUJvbGRNVAovRmxhZ3MgNAovQXNjZW50IDkwNS4yNzM0NAovRGVzY2VudCAtMjExLjkxNDA2Ci9TdGVtViA3Ni4xNzE4NzUKL0NhcEhlaWdodCA3MTUuODIwMzEKL0l0YWxpY0FuZ2xlIDAKL0ZvbnRCQm94IFstNjI3LjkyOTY5IC0zNzYuNDY0ODQgMjAwMCAxMDE3LjU3ODEzXQovRm9udEZpbGUyIDMyIDAgUj4+CmVuZG9iagozNCAwIG9iago8PC9UeXBlIC9Gb250Ci9Gb250RGVzY3JpcHRvciAzMyAwIFIKL0Jhc2VGb250IC9BcmlhbC1Cb2xkTVQKL1N1YnR5cGUgL0NJREZvbnRUeXBlMgovQ0lEVG9HSURNYXAgL0lkZW50aXR5Ci9DSURTeXN0ZW1JbmZvIDw8L1JlZ2lzdHJ5IChBZG9iZSkKL09yZGVyaW5nIChJZGVudGl0eSkKL1N1cHBsZW1lbnQgMD4+Ci9XIFswIFs3NTBdIDMgMTUgMjc3LjgzMjAzIDE2IFszMzMuMDA3ODEgMjc3LjgzMjAzIDI3Ny44MzIwM10gMTkgMjggNTU2LjE1MjM0IDI5IFszMzMuMDA3ODFdIDM2IDM5IDcyMi4xNjc5NyA0MCBbNjY2Ljk5MjE5IDYxMC44Mzk4NCA3NzcuODMyMDMgNzIyLjE2Nzk3IDI3Ny44MzIwMyA1NTYuMTUyMzQgNzIyLjE2Nzk3IDYxMC44Mzk4NCA4MzMuMDA3ODEgNzIyLjE2Nzk3IDc3Ny44MzIwMyA2NjYuOTkyMTkgMCA3MjIuMTY3OTcgNjY2Ljk5MjE5IDYxMC44Mzk4NCA3MjIuMTY3OTcgNjY2Ljk5MjE5IDk0My44NDc2NiA2NjYuOTkyMTkgNjY2Ljk5MjE5XSA2OCBbNTU2LjE1MjM0IDYxMC44Mzk4NCA1NTYuMTUyMzQgNjEwLjgzOTg0IDU1Ni4x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bmRvYmoKMzggMCBvYmoKPDwvVHlwZSAvRm9udAovRm9udERlc2NyaXB0b3IgMzcgMCBSCi9CYXNlRm9udCAvQXJpYWxNVAovU3VidHlwZSAvQ0lERm9udFR5cGUyCi9DSURUb0dJRE1hcCAvSWRlbnRpdHkKL0NJRFN5c3RlbUluZm8gPDwvUmVnaXN0cnkgKEFkb2JlKQovT3JkZXJpbmcgKElkZW50aXR5KQovU3VwcGxlbWVudCAwPj4KL1cgWzAgWzc1MCAwIDAgMjc3LjgzMjAzIDAgMzU0Ljk4MDQ3XSAxMCBbMTkwLjkxNzk3IDMzMy4wMDc4MSAzMzMuMDA3ODEgMCAwIDI3Ny44MzIwMyAzMzMuMDA3ODEgMjc3LjgzMjAzIDI3Ny44MzIwM10gMTkgMjggNTU2LjE1MjM0IDI5IDMwIDI3Ny44MzIwMyAzNSBbMTAxNS4xMzY3MiA2NjYuOTkyMTkgNjY2Ljk5MjE5IDcyMi4xNjc5NyA3MjIuMTY3OTcgNjY2Ljk5MjE5IDYxMC44Mzk4NCA3NzcuODMyMDMgNzIyLjE2Nzk3IDI3Ny44MzIwMyA1MDAgNjY2Ljk5MjE5IDU1Ni4xNTIzNCA4MzMuMDA3ODEgNzIyLjE2Nzk3IDc3Ny44MzIwMyA2NjYuOTkyMTkgMCA3MjIuMTY3OTcgNjY2Ljk5MjE5IDYxMC44Mzk4NCA3MjIuMTY3OTcgNjY2Ljk5MjE5IDk0My44NDc2NiA2NjYuOTkyMTkgNjY2Ljk5MjE5XSA2OCA2OSA1NTYuMTUyMzQgNzAgWzUwMCA1NTYuMTUyMzQgNTU2LjE1MjM0IDI3Ny44MzIwMyA1NTYuMTUyMzQgNTU2LjE1MjM0IDIyMi4xNjc5NyAyMjIuMTY3OTcgNTAwIDIyMi4xNjc5NyA4MzMuMDA3ODFdIDgxIDg0IDU1Ni4xNTIzNCA4NSBbMzMzLjAwNzgxIDUwMCAyNzcuODMyMDMgNTU2LjE1MjM0IDUwMCA3MjIuMTY3OTcgNTAwIDUwMF0gMTMzIFs1NTYuMTUyMzRdIDE3OSAxODAgMzMzLjAwNzgxIDE4MSAxODIgMjIyLjE2Nzk3XQovRFcgMD4+CmVuZG9iagozOSAwIG9iago8PC9GaWx0ZXIgL0ZsYXRlRGVjb2RlCi9MZW5ndGggMzAxPj4gc3RyZWFtCnicXVFNb4MwDL3nV/i4HSoC9OuAkApbJQ770Nh+AE1MF2mEKKQH/v2C3bXSIiXRe/azreekbp4aawIk735ULQbojdUep/HiFcIJz8aKNANtVLgietXQOZFEcTtPAYfG9qMoCoDkI0an4Gd4OOjxhI8iefMavbFnePiq24jbi3M/OKANIEVZgsY+Vnrp3Gs3ICQkWzU6xk2YV1Fzz/icHUJGOOVp1Khxcp1C39kzikLGU0JxjKcUaPW/eM6qU6++O0/ZecyWMpMloQ2jjNCe0SGnSlfN7q/CveGB0mTN2h1XOhJKn5msicy4Wc7fmnvm3CVn+YZbr9eMmNymRFasq5ZYJlOuWbG82jK5v87K0y0GLIu6uasu3kdjaZvk6OKlsXhbuBvdolruL5ivmv4KZW5kc3RyZWFtCmVuZG9iago1IDAgb2JqCjw8L1R5cGUgL0ZvbnQKL1N1YnR5cGUgL1R5cGUwCi9CYXNlRm9udCAvQXJpYWxNVAovRW5jb2RpbmcgL0lkZW50aXR5LUgKL0Rlc2NlbmRhbnRGb250cyBbMzggMCBSXQovVG9Vbmljb2RlIDM5IDAgUj4+CmVuZG9iagp4cmVmCjAgNDAKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDE1IDAwMDAwIG4gCjAwMDAwNTY2NjggMDAwMDAgbiAKMDAwMDAwMDE0OSAwMDAwMCBuIAowMDAwMDg0Mjc1IDAwMDAwIG4gCjAwMDAxMTY0MjYgMDAwMDAgbiAKMDAwMDAwMDE4NiAwMDAwMCBuIAowMDAwMDAwMjcyIDAwMDAwIG4gCjAwMDAwMDA0NTIgMDAwMDAgbiAKMDAwMDA1NjkxMyAwMDAwMCBuIAowMDAwMDA2NjAxIDAwMDAwIG4gCjAwMDAwNTcxNDMgMDAwMDAgbiAKMDAwMDAxMTc1NiAwMDAwMCBuIAowMDAwMDU3Mzc0IDAwMDAwIG4gCjAwMDAwMTg2MDIgMDAwMDAgbiAKMDAwMDA1NzU5NSAwMDAwMCBuIAowMDAwMDI0NDQ0IDAwMDAwIG4gCjAwMDAwNTc4MTYgMDAwMDAgbiAKMDAwMDAzMDQ3MCAwMDAwMCBuIAowMDAwMDU4MDM3IDAwMDAwIG4gCjAwMDAwMzU1MDUgMDAwMDAgbiAKMDAwMDA1ODI1OCAwMDAwMCBuIAowMDAwMDQyMjk5IDAwMDAwIG4gCjAwMDAwNTg0NzkgMDAwMDAgbiAKMDAwMDA0ODMwMSAwMDAwMCBuIAowMDAwMDU4NzEwIDAwMDAwIG4gCjAwMDAwNTMxOTcgMDAwMDAgbiAKMDAwMDA1ODk0MSAwMDAwMCBuIAowMDAwMDU5MDYwIDAwMDAwIG4gCjAwMDAwNTkxMzkgMDAwMDAgbiAKMDAwMDA1OTIwNCAwMDAwMCBuIAowMDAwMDU5NTk0IDAwMDAwIG4gCjAwMDAwNTk2NTcgMDAwMDAgbiAKMDAwMDA4MjkxMyAwMDAwMCBuIAowMDAwMDgzMTQ3IDAwMDAwIG4gCjAwMDAwODM5MTIgMDAwMDAgbiAKMDAwMDA4NDQxMiAwMDAwMCBuIAowMDAwMTE0OTc3IDAwMDAwIG4gCjAwMDAxMTUyMDYgMDAwMDAgbiAKMDAwMDExNjA1NCAwMDAwMCBuIAp0cmFpbGVyCjw8L1NpemUgNDAKL1Jvb3QgMzEgMCBSCi9JbmZvIDEgMCBSPj4Kc3RhcnR4cmVmCjExNjU1OAolJUVPRg==" +} \ No newline at end of file diff --git a/src/helper.js b/src/helper.js new file mode 100644 index 0000000..57d2ed6 --- /dev/null +++ b/src/helper.js @@ -0,0 +1,609 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { Constants } from './config'; +import { + NetworkType, + MosaicId, + NamespaceId, + Address, + Mosaic, + NodeVersion +} from 'symbol-sdk'; +import { NamespaceService, MosaicService } from './infrastructure'; +import http from './infrastructure/http'; +import moment from 'moment'; + +const Url = require('url-parse'); + +const getNetworkTypeAddressFormat = { + [NetworkType.MAIN_NET]: 'nN', + [NetworkType.MIJIN]: 'mM', + [NetworkType.MIJIN_TEST]: 'sS', + [NetworkType.TEST_NET]: 'tT' +}; + +class helper { + static timeSince(interval) { + if (interval.years > 1) + return interval.years + ' years'; + else if (interval.years === 1) + return interval.years + ' year'; + else if (interval.days > 1) + return interval.days + ' days'; + else if (interval.days === 1) + return interval.days + ' day'; + else if (interval.hours > 1) + return interval.hours + ' hours'; + else if (interval.hours === 1) + return interval.hours + ' hour'; + else if (interval.minutes > 1) + return interval.minutes + ' min';// ' minutes' + else if (interval.minutes === 1) + return interval.minutes + ' min';// ' minute' + else if (interval.seconds !== 1) + return interval.seconds + ' sec';// ' seconds' + else + return interval.seconds + ' sec';// ' second' + } + + static formatSeconds = second => { + if (!second && second !== 0) return ''; + let d = 0; + + let h = 0; + + let m = 0; + + if (second > 86400) { + d = Math.floor(second / 86400); + second = second % 86400; + } + if (second > 3600) { + h = Math.floor(second / 3600); + second = second % 3600; + } + if (second > 60) { + m = Math.floor(second / 60); + second = second % 60; + } + let result = ''; + + if (m > 0 || h > 0 || d > 0) + result = `${m} m ${result}`; + + if (h > 0 || d > 0) + result = `${h} h ${result}`; + + if (d > 0) + result = `${d} d ${result}`; + + return result; + } + + static isMosaicOrNamespaceId = (str) => + str.length === 16 && /^[0-9a-fA-F]+$/.test(str); + + static isAccountPublicKey = (str) => + str.length === 64 && + str.match('^[A-z0-9]+$') + + static isAccountAddress = (str) => + str.length === 39 && + str.match(`[${getNetworkTypeAddressFormat[http.networkType]}]{1,1}[a-zA-Z0-9]{5,5}[a-zA-Z0-9]{6,6}[a-zA-Z0-9]{6,6}[a-zA-Z0-9]{6,6}[a-zA-Z0-9]{6,6}[a-zA-Z0-9]{6,6}[a-zA-Z0-9]{3,3}`) + + static isBlockHeight = (str) => + str.match(/^-{0,1}\d+$/) + + static validURL(url) { + // All we expect is there is a valid origin for the url, IE, + // the origin is not 'null'. + return url.origin !== 'null'; + } + + static parseUrl(str) { + let url = new Url(str); + + if (this.validURL(url)) + return url; + } + + static httpToWsUrl(str) { + let url = new Url(str); + + if (this.validURL(url)) { + url.set('protocol', 'ws:'); + return url; + } + } + + static async logError(dispatch, action, ...args) { + try { + await dispatch(action, ...args); + } + catch (e) { + console.error(`Failed to call ${action}`, e); + } + } + + static convertToSecond = durationInBlocks => durationInBlocks * http.networkConfig.TargetBlockTime + + static calculateNamespaceExpiration = (currentHeight, endHeight) => { + const expired = currentHeight > endHeight - http.networkConfig.NamespaceGraceDuration; + const expiredInBlock = endHeight - http.networkConfig.NamespaceGraceDuration - currentHeight; + + return { + isExpired: expired, + expiredInBlock: expiredInBlock, + expiredInSecond: this.convertToSecond(expiredInBlock) + }; + } + + static fetchData = async (fetchFunction, commit, before, error, success) => { + if (typeof before === 'function') + await before(); + else { + commit('setLoading', true); + commit('setError', false); + } + try { + await fetchFunction(); + } + catch (e) { + if (typeof error === 'function') + await error(e); + else { + console.error(e); + commit('setError', true); + } + } + if (typeof success === 'function') + await success(); + else + commit('setLoading', false); + } + + /** + * Convert hex value or namespace name to mosaicId or namespaceId + * @param hexOrNamespace - hex value or namespace name + * @param toId - 'mosaic' | 'namespace' + * @returns MosaicId | NamespaceId + */ + static hexOrNamespaceToId = async (hexOrNamespace, toId) => { + let Id = MosaicId | NamespaceId; + + const isHexadecimal = this.isMosaicOrNamespaceId(hexOrNamespace); + + if (isHexadecimal) + Id = toId === 'mosaic' ? new MosaicId(hexOrNamespace) : NamespaceId.createFromEncoded(hexOrNamespace); + else + Id = toId === 'mosaic' ? await NamespaceService.getLinkedMosaicId(new NamespaceId(hexOrNamespace)) : new NamespaceId(hexOrNamespace); + + return Id; + } + + /** + * Decode Account Public key or Namespace name to plan Address. + * @param address - Account publicKey string | naemspace name + * @returns Plan Address - example : SB3KUBHATFCPV7UZQLWAQ2EUR6SIHBSBEOEDDDF3 + */ + static decodeToAddress = async (address) => { + if (this.isAccountPublicKey(address)) + return Address.createFromPublicKey(address, http.networkType).plain(); + + if (!this.isAccountAddress(address)) { + try { + const namespaceId = new NamespaceId(address); + + address = await NamespaceService.getLinkedAddress(namespaceId); + return address.plain(); + } + catch (e) { + console.error(e); + } + } + + return address; + } + + /** + * Convert Mosaic amount to relative Amount with divisibility. + * @param amount - number + * @param divisibility - decimal + * @returns relativeAmount in string + */ + static formatMosaicAmountWithDivisibility = (amount, divisibility) => { + let relativeAmount = divisibility !== 0 ? amount / Math.pow(10, divisibility) : amount.compact(); + + return relativeAmount.toLocaleString('en-US', { minimumFractionDigits: divisibility }); + } + + /** + * Get network currency balance. + * @param mosaics - array of formatted mosaic[] + * @returns balance - formatted mosaic amount + */ + static getNetworkCurrencyBalance = mosaics => { + let mosaic = mosaics.find(mosaic => + mosaic.id.toHex() === http.networkCurrency.mosaicId || + (mosaic.id instanceof NamespaceId && + mosaic.id.toHex() === http.networkCurrency.namespaceId) + ); + + let balance = mosaic !== undefined ? this.toNetworkCurrency(mosaic.amount) : Constants.Message.UNAVAILABLE; + + return balance; + } + + /** + * Get last Activity height. + * @param activityBucket - array of activityBucket + * @returns la + */ + static getLastActivityHeight = activityBucket => { + let activityBucketLength = activityBucket.length; + + let lastActivityHeight = activityBucketLength > 0 ? activityBucket[activityBucketLength - 1].startHeight : Constants.Message.UNAVAILABLE; + + return lastActivityHeight; + } + + /** + * Convert networkTimestamp to UTC date + * @param networkTimestamp + * @returns UTC date with format YYYY-MM-DD HH:mm:ss + */ + static convertToUTCDate = networkTimestamp => moment.utc(networkTimestamp * 1000).format('YYYY-MM-DD HH:mm:ss') + + /** + * convert difficulty raw score to readable + * @param difficulty - raw difficulty score + * @returns difficulty - readable difficulty score + */ + static convertBlockDifficultyToReadable = difficulty => (difficulty.compact() / 1000000000000).toFixed(2).toString() + + /** + * Format Importance score to percentage + * @param {number} rawScore + * @returns {string} + */ + static ImportanceScoreToPercent = rawScore => { + const totalchainimportance = http.networkConfig.TotalChainImportance; + const divisibility = http.networkCurrency.divisibility; + + let percent = rawScore; + + if (rawScore > 0) + percent = rawScore / totalchainimportance; + + return (percent * 100).toFixed(divisibility).toString() + ' %'; + } + + /** + * Format number to Network currecy divisibility. + * example transaction fees + * @param amount - number + * @returns amount - (string) with formatted divisibility + */ + static toNetworkCurrency = amount => (amount / Math.pow(10, http.networkCurrency.divisibility)).toLocaleString('en-US', { minimumFractionDigits: http.networkCurrency.divisibility }) + + /** + * Convert public key to Address. + * @param publicKey - raw public key + * @returns address - address in plain format + */ + static publicKeyToAddress = publicKey => Address.createFromPublicKey(publicKey, http.networkType).plain() + + /** + * convet network timestamp to world time + * @param timestamp - raw timestamp + * @returns timestamp - world timestamp + */ + static networkTimestamp = timestamp => Math.round(timestamp / 1000) + http.networkConfig.NemsisTimestamp + + /** + * Sort Native mosaic to top of list + * @param mosaics - array of mosaic + * @returns mosaic[] - sort array of mosaic + */ + static sortMosaics = mosaics => { + let sortedMosaics = []; + + mosaics.forEach(mosaic => + mosaic.mosaicId === http.networkCurrency.mosaicId + ? sortedMosaics.unshift(mosaic) + : sortedMosaics.push(mosaic) + ); + + return sortedMosaics; + } + + /** + * Convert second to time from now in second + * @param second + * @returns time from now in second + */ + static convertTimeFromNowInSec = second => moment.utc().add(second, 's') + .fromNow() + + /** + * convert second to Date + * @param second + * @returns YYYY-MM-DD HH:mm:ss + */ + static convertSecondToDate = second => moment.utc().add(second, 's') + .format('YYYY-MM-DD HH:mm:ss') + + /** + * Convert block deadline to date + * @param deadlineValue - deadline from block + * @returns YYYY-MM-DD HH:mm:ss + */ + static convertDeadlinetoDate = deadline => this.convertToUTCDate(this.networkTimestamp(deadline)) + + /** + * Get RGB color from hash + * @param hash - hash to be converted + * @returns object { R: Number, G: Number, B: Number } + */ + static getColorFromHash = (hash, isHex = true) => { + const color = { + R: 0, + G: 0, + B: 0 + }; + + if (typeof hash !== 'string') { + console.error('Failed to convert hash to color. Hash is not a String'); + return color; + } + if (hash.length < 3) { + console.error('Failed to convert hash to color. Hash string length < 3'); + return color; + } + + const hexToRGB = (hexString) => { + let totalHex = 0; + + for (const hex of hexString) + totalHex += parseInt(hex, 16); + + return Math.trunc(totalHex * 255 / (15 * hexString.length)); + }; + + const charsetToRGB = (string) => { + const charset = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']; + + let totalHex = 0; + + for (const char of string) + totalHex += charset.indexOf(char.toLowerCase()); + + return Math.trunc(totalHex * 255 / ((charset.length - 1) * string.length)); + }; + + const hashLength = hash.length; + const colorStrLength = Math.trunc(hashLength / 3); + + const strRed = hash.substring(0, colorStrLength); + const strGreen = hash.substring(colorStrLength, colorStrLength * 2); + const strBlue = hash.substring(colorStrLength * 2, colorStrLength * 3); + + color.R = isHex ? hexToRGB(strRed) : charsetToRGB(strRed.substring(2, 3)); + color.G = isHex ? hexToRGB(strGreen) : charsetToRGB(strGreen); + color.B = isHex ? hexToRGB(strBlue) : charsetToRGB(strBlue); + + return color; + } + + static truncString(str, strLen = 4) { + if (typeof str === 'string') { + if (str.length > strLen * 2) + return `${str.substring(0, strLen)}...${str.substring(str.length - strLen, str.length)}`; + return str; + } + console.error('Failed to trunc string. Provided value is not a string'); + return str; + } + + /** + * Get plain address from unResolvedAddress Object + * @param unResolvedAddress - NamespaceId | Address + * @returns plain address - example : SB3KUBHATFCPV7UZQLWAQ2EUR6SIHBSBEOEDDDF3 + */ + static resolvedAddress = async (unResolvedAddress) => { + if (!(unResolvedAddress instanceof NamespaceId)) return unResolvedAddress.address; + + const address = await NamespaceService.getLinkedAddress(unResolvedAddress); + + return address.plain(); + } + + /** + * To resolved unresolvedMosaicId. + * @param unresolvedMosaicId - NamespaceId | MosaicId + * @returns Id + */ + static resolveMosaicId = async (unresolvedMosaicId) => { + if (!(unresolvedMosaicId instanceof NamespaceId)) return unresolvedMosaicId.id; + + const mosaicId = await NamespaceService.getLinkedMosaicId(unresolvedMosaicId); + + return mosaicId.id; + } + + /** + * Build mosaic field object use in MosaicField components + * @param mosaics - Mosaic[] + * @returns mosaicsFieldObject - { mosaicId, amount, mosaicAliasName } + */ + static mosaicsFieldObjectBuilder = async (mosaics) => { + if (mosaics.length === 0) return []; + + const resolvedMosaics = await Promise.all(mosaics.map(async mosaic => { + const resolvedMosaic = await this.resolveMosaicId(mosaic.id); + const mosaicId = new MosaicId(resolvedMosaic.toHex()).id; + + return new Mosaic(mosaicId, mosaic.amount); + })); + + const resolvedMosaicIds = resolvedMosaics.map(mosaic => mosaic.id).filter(mosaicId => mosaicId.toHex() !== http.networkCurrency.mosaicId); + + let mosaicInfos = []; + + let mosaicNames = []; + + if (resolvedMosaicIds.length > 0) { + [mosaicInfos, mosaicNames] = await Promise.all([ + MosaicService.getMosaics(resolvedMosaicIds), + NamespaceService.getMosaicsNames(resolvedMosaicIds) + ]); + } + + let mosaicsFieldObject = []; + + for (const resolvedMosaic of resolvedMosaics) { + if (resolvedMosaic.id.toHex() === http.networkCurrency.mosaicId) + mosaicsFieldObject.push(this.networkCurrencyMosaicBuilder(resolvedMosaic)); + + else { + if (mosaicInfos.length > 0 && mosaicNames.length > 0) { + let divisibility = mosaicInfos.find(info => info.mosaicId === resolvedMosaic.id.toHex()).divisibility; + + mosaicsFieldObject.push({ + ...resolvedMosaic, + rawAmount: resolvedMosaic.amount, + mosaicId: resolvedMosaic.id.toHex(), + amount: helper.formatMosaicAmountWithDivisibility(resolvedMosaic.amount, divisibility), + mosaicAliasName: MosaicService.extractMosaicNamespace({ mosaicId: resolvedMosaic.id.toHex() }, mosaicNames) + }); + } + } + } + + return mosaicsFieldObject; + } + + static networkCurrencyMosaicBuilder = (mosaic) => { + if (!(mosaic instanceof Mosaic)) throw new Error('It required Mosaic instance.'); + + if (mosaic.id.toHex() !== http.networkCurrency.mosaicId) throw new Error('Mosaic id does not match network Currency.'); + + return { + ...mosaic, + rawAmount: mosaic.amount, + mosaicId: mosaic.id.toHex(), + amount: this.formatMosaicAmountWithDivisibility(mosaic.amount, http.networkCurrency.divisibility), + mosaicAliasName: http.networkCurrency.namespaceName + }; + } + + /** + * Check native namespace. + * @param namespaceName - namespace name in string format. + * @returns boolean + */ + static isNativeNamespace = (namespaceName) => { + if (!http.nativeNamespaces) + return false; + + const values = http.nativeNamespaces.map(namespace => namespace.namespaceName); + + return values.indexOf(namespaceName) !== -1; + } + + /** + * Gets single mosaic alias name + * @param mosaicId + * @return mosaic alias name + */ + static getMosaicAliasNames = async (mosaicId) => { + const getMosaicNames = await NamespaceService.getMosaicsNames([mosaicId]); + const mosaicAliasNames = MosaicService.extractMosaicNamespace({ mosaicId: mosaicId.toHex() }, getMosaicNames); + + return mosaicAliasNames; + } + + static fallbackCopyTextToClipboard = (text) => { + let textArea = document.createElement('textarea'); + + let success = false; + + textArea.value = text; + + // Avoid scrolling to bottom + textArea.style.top = '0'; + textArea.style.left = '0'; + textArea.style.position = 'fixed'; + + document.body.appendChild(textArea); + textArea.focus(); + textArea.select(); + + try { + success = document.execCommand('copy'); + } + catch (err) { + console.error('Fallback: Could not copy text', err); + } + + document.body.removeChild(textArea); + return success; + } + + static copyTextToClipboard = (text) => { + return new Promise((resolve, reject) => { + if (!navigator.clipboard) { + if (this.fallbackCopyTextToClipboard(text)) + resolve(); + else + reject(Error('Could not copy text. document.execCommand() failed')); + } + navigator.clipboard.writeText(text).then(function () { + resolve(); + }, function (err) { + console.error('Async: Could not copy text: ', err); + reject(Error('Async: Could not copy text: ', err)); + }); + }); + } + + static formatNodeVersion = (rawNodeVersion) => { + try { + return NodeVersion.createFromRawNodeVersion(rawNodeVersion).formatted(); + } + catch (e) { + return Constants.Message.UNAVAILABLE; + } + } + + static getMosaicName(mosaic) { + let mosaicAliasName; + + if (Array.isArray(mosaic.mosaicAliasName)) + mosaicAliasName = mosaic.mosaicAliasName.length ? mosaic.mosaicAliasName[0] : 'N/A'; + else + mosaicAliasName = mosaic.mosaicAliasName ? mosaic.mosaicAliasName : 'N/A'; + + return mosaicAliasName !== 'N/A' + ? mosaicAliasName + : mosaic.mosaicId; + } +} + +export default helper; diff --git a/src/infrastructure/AccountService.js b/src/infrastructure/AccountService.js new file mode 100644 index 0000000..76b0db3 --- /dev/null +++ b/src/infrastructure/AccountService.js @@ -0,0 +1,473 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { Address, TransactionType, TransactionGroup, Order, BlockOrderBy, ReceiptType, Mosaic } from 'symbol-sdk'; +import nem from 'nem-sdk'; +import http from './http'; +import { Constants } from '../config'; +import { NamespaceService, TransactionService, ChainService, MetadataService, LockService, ReceiptService, MosaicService, BlockService } from '../infrastructure'; +import helper from '../helper'; + +class AccountService { + /** + * Gets an AccountInfo for an account. + * @param address + * @returns Formatted AccountInfo + */ + static getAccount = async address => { + const account = await http.createRepositoryFactory.createAccountRepository() + .getAccountInfo(Address.createFromRawAddress(address)) + .toPromise(); + + const formattedAccount = this.formatAccountInfo(account); + + return formattedAccount; + } + + /** + * Gets an AccountInfo for an account. + * @param address + * @returns Formatted AccountInfo + */ + static getAccounts = async addresses => { + const accounts = await http.createRepositoryFactory.createAccountRepository() + .getAccountsInfo(addresses.map(a => Address.createFromRawAddress(a))) + .toPromise(); + + return accounts.map(a => this.formatAccountInfo(a)); + } + + /** + * Gets a accounts list from searchCriteria + * @param accountSearchCriteria Object of Search Criteria + * @returns formatted account data with pagination info + */ + static searchAccounts = async (accountSearchCriteria) => { + const searchAccounts = await http.createRepositoryFactory.createAccountRepository() + .search(accountSearchCriteria) + .toPromise(); + + return { + ...searchAccounts, + data: searchAccounts.data.map(account => this.formatAccountInfo(account)) + }; + } + + /** + * Get custom Account list dataset into Vue Component + * @param pageInfo - pagination info + * @param filterVaule - object for search criteria + * @returns Custom AccountInfo[] + */ + static getAccountList = async (pageInfo, filterVaule) => { + const { pageNumber, pageSize } = pageInfo; + const searchCriteria = { + pageNumber, + pageSize, + order: Order.Desc, + ...filterVaule + }; + + const accountInfos = await this.searchAccounts(searchCriteria); + + const addresses = accountInfos.data.map(accountInfo => Address.createFromRawAddress(accountInfo.address)); + + const accountNames = await NamespaceService.getAccountsNames(addresses); + + return { + ...accountInfos, + data: accountInfos.data.map(account => ({ + ...account, + balance: helper.getNetworkCurrencyBalance(account.mosaics), + lastActivity: helper.getLastActivityHeight(account.activityBucket), + accountAliasNames: this.extractAccountNamespace(account, accountNames) + })) + }; + } + + /** + * Get custom Account info dataset into Vue Component + * @param address - Account address + * @returns Custom AccountInfo + */ + static getAccountInfo = async address => { + const accountInfo = await this.getAccount(address); + const accountNames = await NamespaceService.getAccountsNames([Address.createFromRawAddress(address)]); + + return { + ...accountInfo, + activityBucket: accountInfo.activityBucket.map(activity => ({ + ...activity, + recalculationBlock: activity.startHeight, + totalFeesPaid: helper.toNetworkCurrency(activity.totalFeesPaid), + importanceScore: activity.rawScore + })), + supplementalPublicKeys: { + ...accountInfo.supplementalPublicKeys, + voting: Array.isArray(accountInfo.supplementalPublicKeys.voting) ? accountInfo.supplementalPublicKeys.voting.map(voting => voting.publicKey) : accountInfo.supplementalPublicKeys.voting + }, + accountAliasNames: this.extractAccountNamespace(accountInfo, accountNames) + }; + } + + /** + * Gets custom array of confirmed transactions dataset into Vue Component + * @param pageInfo - object for page info such as pageNumber, pageSize + * @param filterVaule - object for search criteria + * @param address - Account address + * @returns Custom AggregateTransaction[] + */ + static getAccountTransactionList = async (pageInfo, filterVaule, address) => { + const { pageNumber, pageSize } = pageInfo; + const searchCriteria = { + pageNumber, + pageSize, + order: Order.Desc, + type: [], + group: TransactionGroup.Confirmed, + address: Address.createFromRawAddress(address), + ...filterVaule + }; + + const searchTransactions = await TransactionService.searchTransactions(searchCriteria); + + const accountTransactions = { + ...searchTransactions, + data: searchTransactions.data.map(transaction => TransactionService.formatTransaction(transaction)) + }; + + const blockHeight = [...new Set(accountTransactions.data.map(data => data.transactionInfo.height))]; + + const blockInfos = await Promise.all( + blockHeight.map(height => BlockService.getBlockInfo(height)) + ); + + await Promise.all(accountTransactions.data.map(async transaction => { + if (transaction?.recipientAddress) + return (transaction.transactionBody.recipient = await helper.resolvedAddress(transaction.recipientAddress)); + })); + + return { + ...accountTransactions, + data: accountTransactions.data.map(accountTransaction => ({ + ...accountTransaction, + timestamp: blockInfos.find(block => block.height === accountTransaction.transactionInfo.height).timestamp, + blockHeight: accountTransaction.transactionInfo.height, + transactionHash: accountTransaction.transactionInfo.hash, + transactionType: accountTransaction.type === TransactionType.TRANSFER + ? (accountTransaction.signer === address + ? 'outgoing_' + accountTransaction.transactionBody.transactionType + : 'incoming_' + accountTransaction.transactionBody.transactionType + ) + : accountTransaction.transactionBody.transactionType, + extendGraphicValue: TransactionService.extendGraphicValue(accountTransaction), + recipient: accountTransaction.signer === address + ? accountTransaction.transactionBody?.recipient + : '' + })) + }; + } + + /** + * Gets custom array of confirmed transactions dataset into Vue Component + * @param pageInfo - object for page info such as pageNumber, pageSize + * @param filterVaule - object for search criteria + * @param address - Account address + * @returns Custom AggregateTransaction[] + */ + static getAccountNamespaceList = async (pageInfo, filterVaule, address) => { + const { pageNumber, pageSize } = pageInfo; + const searchCriteria = { + pageNumber, + pageSize, + order: Order.Desc, + ownerAddress: Address.createFromRawAddress(address), + ...filterVaule + }; + + const accountNamespaces = await NamespaceService.searchNamespaces(searchCriteria); + + const { height: currentHeight } = await ChainService.getChainInfo(); + + return { + ...accountNamespaces, + data: accountNamespaces.data.map(namespaces => { + const { expiredInSecond } = helper.calculateNamespaceExpiration(currentHeight, namespaces.endHeight); + + return { + ...namespaces, + status: namespaces.active, + expirationDuration: helper.convertTimeFromNowInSec(expiredInSecond) || Constants.Message.UNLIMITED + }; + }) + }; + } + + /** + * Gets account harvested block receipt list dataset into Vue Component + * @param pageInfo - object for page info such as pageNumber, pageSize + * @param address - Account address + * @returns formatted harvested blocks data list. + */ + static getAccountHarvestedReceiptList = async (pageInfo, address) => { + const { pageNumber, pageSize } = pageInfo; + + const searchCriteria = { + pageNumber, + pageSize, + order: Order.Desc, + orderBy: BlockOrderBy.Height, + targetAddress: Address.createFromRawAddress(address), + receiptTypes: [ReceiptType.Harvest_Fee] + }; + + const harvestedBlockReceipt = await ReceiptService.searchReceipts(searchCriteria); + + const formattedReceipt = await ReceiptService.createReceiptTransactionStatement(harvestedBlockReceipt.data.balanceChangeStatement); + + return { + ...harvestedBlockReceipt, + data: formattedReceipt.filter(receipt => + receipt.targetAddress === address && + receipt.type === ReceiptType.Harvest_Fee) + }; + } + + /** + * Gets account receipt list dataset into Vue Component + * @param pageInfo - object for page info such as pageNumber, pageSize + * @param filterVaule - object for search criteria + * @param address - Account address + * @returns formatted receipt data list. + */ + static getAccountReceiptList = async (pageInfo, filterVaule, address) => { + const { pageNumber, pageSize } = pageInfo; + + const { BalanceTransferReceipt, BalanceChangeReceipt } = Constants.ReceiptTransactionStatamentType; + + let searchCriteria = { + pageNumber, + pageSize, + order: Order.Desc, + orderBy: BlockOrderBy.Height, + ...filterVaule + }; + + if (filterVaule.receiptTransactionStatementType === BalanceTransferReceipt) + Object.assign(searchCriteria, { senderAddress: Address.createFromRawAddress(address) }); + + if (filterVaule.receiptTransactionStatementType === BalanceChangeReceipt) + Object.assign(searchCriteria, { targetAddress: Address.createFromRawAddress(address) }); + + const receipt = await ReceiptService.searchReceipts(searchCriteria); + + let formattedReceipt = []; + + if (filterVaule.receiptTransactionStatementType === BalanceTransferReceipt) { + formattedReceipt = await ReceiptService.createReceiptTransactionStatement(receipt.data.balanceTransferStatement); + formattedReceipt = formattedReceipt.filter(receipt => + receipt.senderAddress === address); + } + + if (filterVaule.receiptTransactionStatementType === BalanceChangeReceipt) { + formattedReceipt = await ReceiptService.createReceiptTransactionStatement(receipt.data.balanceChangeStatement); + formattedReceipt = formattedReceipt.filter(receipt => + receipt.targetAddress === address && + receipt.type !== ReceiptType.Harvest_Fee); + } + + return { + ...receipt, + data: formattedReceipt + }; + } + + /** + * Gets Account Metadata list dataset into Vue component + * @param pageInfo - object for page info such as pageNumber, pageSize + * @param filterVaule - object for search criteria + * @param address - Account address + * @returns formatted account metadata list + */ + static getAccountMetadataList = async (pageInfo, filterVaule, address) => { + const { pageNumber, pageSize } = pageInfo; + const searchCriteria = { + pageNumber, + pageSize, + order: Order.Desc, + targetAddress: Address.createFromRawAddress(address), + ...filterVaule + }; + const accountMetadatas = await MetadataService.searchMetadatas(searchCriteria); + + return accountMetadatas; + } + + /** + * Gets Account Hash Lock list dataset into Vue component + * @param pageInfo - object for page info such as pageNumber, pageSize + * @param address - Account address + * @returns formatted account hash lock list + */ + static getAccountHashLockList = async (pageInfo, address) => { + const { pageNumber, pageSize } = pageInfo; + const searchCriteria = { + pageNumber, + pageSize, + order: Order.Desc, + address: Address.createFromRawAddress(address) + }; + const accountHashLocks = await LockService.searchHashLocks(searchCriteria); + + const mosaics = accountHashLocks.data.map( + hashlock => new Mosaic(hashlock.mosaicId, hashlock.amount) + ); + + const mosaicsFieldObject = await helper.mosaicsFieldObjectBuilder(mosaics); + + let hashLocks = []; + + for (const hashLock of accountHashLocks.data) { + hashLocks.push({ + ...hashLock, + transactionHash: hashLock.hash, + mosaics: [mosaicsFieldObject.find(mosaicFieldObject => mosaicFieldObject.mosaicId === hashLock.mosaicId.toHex())] + }); + } + + return { + ...accountHashLocks, + data: hashLocks + }; + } + + /** + * Gets Account Secret Lock list dataset into Vue component + * @param pageInfo - object for page info such as pageNumber, pageSize + * @param address - Account address + * @returns formatted account secret lock list + */ + static getAccountSecretLockList = async (pageInfo, address) => { + const { pageNumber, pageSize } = pageInfo; + + const searchCriteria = { + pageNumber, + pageSize, + order: Order.Desc, + address: Address.createFromRawAddress(address) + }; + + const accountSecretLocks = await LockService.searchSecretLocks(searchCriteria); + + const mosaics = accountSecretLocks.data.map( + secretlock => new Mosaic(secretlock.mosaicId, secretlock.amount) + ); + + const mosaicsFieldObject = await helper.mosaicsFieldObjectBuilder(mosaics); + + let secretLocks = []; + + for (const secretLock of accountSecretLocks.data) { + secretLocks.push({ + ...secretLock, + mosaics: [mosaicsFieldObject.find(mosaicFieldObject => mosaicFieldObject.mosaicId === secretLock.mosaicId.toHex())] + }); + } + + return { + ...accountSecretLocks, + data: secretLocks + }; + } + + /** + * Format AccountInfo to readable accountInfo objecy + * @param accountInfo - AccountInfo DTO + * @returns Readable AccountInfo DTO object + */ + static formatAccountInfo = (accountInfo) => ({ + ...accountInfo, + address: accountInfo.address.address, + addressHeight: accountInfo.addressHeight.compact(), + publicKey: accountInfo.publicKeyHeight.compact() > 0 ? accountInfo.publicKey : Constants.Message.UNKNOWN, + publicKeyHeight: accountInfo.publicKeyHeight.compact(), + accountType: Constants.AccountType[accountInfo.accountType], + supplementalPublicKeys: this.formatSupplementalPublicKeys(accountInfo.supplementalPublicKeys), + importance: helper.ImportanceScoreToPercent(accountInfo.importance.compact()), + importanceHeight: accountInfo.importanceHeight.compact() + }) + + /** + * Format SupplementalPublicKeys to readable SupplementalPublicKeys objecy + * @param supplementalPublicKeys - supplementalPublicKeys DTO + * @returns Readable supplementalPublicKeys DTO object + */ + static formatSupplementalPublicKeys = (supplementalPublicKeys) => ({ + ...supplementalPublicKeys, + linked: supplementalPublicKeys.linked?.publicKey || Constants.Message.UNAVAILABLE, + node: supplementalPublicKeys.node?.publicKey || Constants.Message.UNAVAILABLE, + vrf: supplementalPublicKeys.vrf?.publicKey || Constants.Message.UNAVAILABLE, + voting: supplementalPublicKeys.voting || [] + }) + + /** + * Extract Name for Account + * @param accountInfo - accountInfo DTO + * @param accountNames - accountNames[] + * @returns accountName + */ + static extractAccountNamespace = (accountInfo, accountNames) => { + let accountName = accountNames.find((name) => name.address === accountInfo.address); + + const aliasNames = accountName.names.map(names => names.name); + + const names = aliasNames.length > 0 ? aliasNames : [Constants.Message.UNAVAILABLE]; + + return names; + } + + /** + * Get customize MosaicAmountView dataset for Vue component. + * @param address - Account address + * @returns customize MosaicAmountView[] + */ + static getAccountMosaicList = async address => { + const [mosaics, chainInfo] = await Promise.all([ + MosaicService.getMosaicAmountViewList(address), + ChainService.getChainInfo() + ]); + + let nonExpiredMosaics = []; + + for (const mosaic of mosaics) { + if (mosaic.duration === 0) + nonExpiredMosaics.push(mosaic); + + if (chainInfo.height < (mosaic.startHeight + mosaic.duration)) + nonExpiredMosaics.push(mosaic); + } + + return helper.sortMosaics(nonExpiredMosaics); + } + + static checkNis1Account = async address => { + return nem.model.address.isValid(address); + } +} + +export default AccountService; diff --git a/src/infrastructure/AnnouncerService.js b/src/infrastructure/AnnouncerService.js new file mode 100644 index 0000000..8f02225 --- /dev/null +++ b/src/infrastructure/AnnouncerService.js @@ -0,0 +1,146 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { + AggregateTransaction, + Account, + Address, + HashLockTransaction, + PublicAccount, + Listener, + MosaicId, + Mosaic, + RepositoryFactoryHttp, + MultisigAccountModificationTransaction, + TransactionService, + Deadline, + UInt64 +} from 'symbol-sdk'; +import http from './http'; +import helper from '../helper'; +import globalConfig from '../config/globalConfig'; + +class AnnounceService { + static announceHashLock = (signedHashLockTransaction, signedTransaction) => { + return new Promise((resolve, reject) => { + const nodeUrl = http.nodeUrl; + const repositoryFactory = new RepositoryFactoryHttp(nodeUrl); + // const listener = repositoryFactory.createListener() + const receiptHttp = repositoryFactory.createReceiptRepository(); + const transactionHttp = repositoryFactory.createTransactionRepository(); + const customWsEndpoint = `${localStorage.getItem('currentNode') || globalConfig.peersApi.defaultNode |> helper.httpToWsUrl}/ws`; + const listener = new Listener(customWsEndpoint, transactionHttp, WebSocket); + const transactionService = new TransactionService(transactionHttp, receiptHttp); + + listener.open() + .then(() => { + transactionService + .announceHashLockAggregateBonded(signedHashLockTransaction, signedTransaction, listener) + .subscribe( + (x) => { + console.log('AnnounceService', x); + listener.close(); + resolve(x); + }, + (err) => { + console.error('AnnounceService', err); + listener.close(); + reject(err); + } + ); + }); + }); + } + + static getSignedHashLosck = (signedTransaction, account) => { + const networkCurrencyMosaicId = new MosaicId(http.networkCurrency.mosaicId); + + const hashLockTransaction = HashLockTransaction.create( + Deadline.create(), + new Mosaic( + networkCurrencyMosaicId, + UInt64.fromUint(10 * Math.pow(10, http.networkCurrency.divisibility)) + ), + UInt64.fromUint(480), + signedTransaction, + http.networkType, + UInt64.fromUint(2000000) + ); + + const signedHashLockTransaction = account.sign(hashLockTransaction, http.generationHash); + + return signedHashLockTransaction; + } + + static multisigAccountModification = async ({ + accountPrivateKey, + minApprovalDelta = 1, + minRemovalDelta = 1, + additions = [], + deletions = [] + }) => { + // const transactionRepository = await http.createRepositoryFactory.createTransactionRepository(); + const networkType = http.networkType; + const networkGenerationHash = http.generationHash; + const account = Account.createFromPrivateKey(accountPrivateKey, networkType); + + ; + + const addressAdditions = additions.map(addition => { + if (typeof addition === 'string' && addition.length === 64) + return PublicAccount.createFromPublicKey(addition, networkType).address; + if (typeof addition === 'string' && addition.length === 39) + return Address.createFromRawAddress(addition); + return addition; + }); + + const addressDeletions = deletions.map(delition => { + if (typeof delition === 'string' && delition.length === 64) + return PublicAccount.createFromPublicKey(delition, networkType).address; + if (typeof delition === 'string' && delition.length === 39) + return Address.createFromRawAddress(delition); + return delition; + }); + + const multisigAccountModificationTransaction = MultisigAccountModificationTransaction.create( + Deadline.create(), + minApprovalDelta, + minRemovalDelta, + addressAdditions, + addressDeletions, + networkType + ); + + const aggregateTransaction = AggregateTransaction.createBonded( + Deadline.create(), + [multisigAccountModificationTransaction.toAggregate(account.publicAccount)], + networkType, + [], + UInt64.fromUint(2000000) + ); + + const signedTransaction = account.sign(aggregateTransaction, networkGenerationHash); + + console.log(signedTransaction.hash); + const signedHashLockTransaction = this.getSignedHashLosck(signedTransaction, account); + + this.announceHashLock(signedHashLockTransaction, signedTransaction); + } +} + +export default AnnounceService; diff --git a/src/infrastructure/BlockService.js b/src/infrastructure/BlockService.js new file mode 100644 index 0000000..edff703 --- /dev/null +++ b/src/infrastructure/BlockService.js @@ -0,0 +1,310 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { UInt64, TransactionGroup, Order, BlockOrderBy, BlockType } from 'symbol-sdk'; +import { TransactionService, ReceiptService } from '../infrastructure'; +import http from './http'; +import helper from '../helper'; +import { Constants } from '../config'; +import { take, toArray } from 'rxjs/operators'; +import { MerkleTree } from 'merkletreejs'; +import { sha3_256 as sha3256 } from 'js-sha3'; + +class BlockService { + /** + * Gets a BlockInfo for a given block height + * @param height - Block height + * @returns Formatted BlockDTO + */ + static getBlockByHeight = async (height) => { + const blockInfo = await http.createRepositoryFactory.createBlockRepository() + .getBlockByHeight(UInt64.fromUint(height)) + .toPromise(); + + return this.formatBlock(blockInfo); + } + + /** + * Gets a blocks from searchCriteria + * @param blockSearchCriteria Object of Block Search Criteria + * @returns formatted block data with pagination info + */ + static searchBlocks = async (blockSearchCriteria) => { + const searchblocks = await http.createRepositoryFactory.createBlockRepository() + .search(blockSearchCriteria) + .toPromise(); + + return { + ...searchblocks, + data: searchblocks.data.map(block => this.formatBlock(block)) + }; + } + + /** + * Gets a blocks from streamer + * @param searchCriteria - Object Search Criteria + * @param noOfBlock - Number of blocks returned. + * @returns formatted BlockInfo[] + */ + static streamerBlocks = async (searchCriteria, noOfBlock) => { + const streamerBlocks = await http.blockPaginationStreamer + .search(searchCriteria).pipe(take(noOfBlock), toArray()) + .toPromise(); + + return streamerBlocks.map(block => this.formatBlock(block)); + } + + /** + * Gets a merkle path for merkle proof. + * @param height - Block height + * @param hash Transaction hash + * @returns MerkleProofInfo[] + */ + static getMerkleTransaction = async (height, hash) => { + const merklePath = await http.createRepositoryFactory.createBlockRepository() + .getMerkleTransaction(UInt64.fromUint(height), hash) + .toPromise(); + + return merklePath.merklePath || []; + } + + /** + * Gets transactions a merkle tree. + * @param height - Block height + * @returns merkleTree object + */ + static getMerkleTransactionTree = async (height) => { + const searchCriteria = { + group: TransactionGroup.Confirmed, + height: UInt64.fromUint(height), + pageSize: 100, + order: Order.Desc + }; + + const streamerTransactions = await TransactionService.streamerTransactions(searchCriteria); + const transactions = streamerTransactions.map(transaction => TransactionService.formatTransaction(transaction)); + + const leaves = transactions.sort((n1, n2) => n1.transactionInfo.index - n2.transactionInfo.index) + .map(transaction => transaction.transactionInfo.hash); + + const tree = new MerkleTree(leaves, sha3256, { + duplicateOdd: true, + hashLeaves: false, + sort: false, + sortLeaves: false, + sortPairs: false, + isBitcoinTree: false }); + + return tree.getLayersAsObject(); + } + + /** + * Get formatted BlockInfo[] dataset into Vue Component + * @param pageInfo - pageNumber and pageSize + * @returns Block info list + */ + static getBlockList = async (pageInfo) => { + const { pageNumber, pageSize } = pageInfo; + const blockSearchCriteria = { + pageNumber, + pageSize, + order: Order.Desc, + orderBy: BlockOrderBy.Height + }; + + const blocks = await this.searchBlocks(blockSearchCriteria); + + return { + ...blocks, + data: blocks.data.map(block => ({ + ...block, + age: helper.convertToUTCDate(block.timestamp), + harvester: block.signer + })) + }; + } + + /** + * Get Custom Transactions dataset into Vue Component + * @param pageInfo - object for page info such as pageNumber, pageSize + * @param filterVaule - object for search criteria + * @param height - block height + * @returns Custom Transactions dataset + */ + static getBlockTransactionList = async (pageInfo, filterVaule, height) => { + const { pageNumber, pageSize } = pageInfo; + const searchCriteria = { + pageNumber, + pageSize, + order: Order.Desc, + type: [], + group: TransactionGroup.Confirmed, + height: UInt64.fromUint(height), + ...filterVaule + }; + + const [blockInfo, searchTransactions] = await Promise.all([ + BlockService.getBlockInfo(height), + TransactionService.searchTransactions(searchCriteria) + ]); + + const blockTransactions = { + ...searchTransactions, + data: searchTransactions.data.map(transaction => TransactionService.formatTransaction(transaction)) + }; + + return { + ...blockTransactions, + data: blockTransactions.data.map(blockTransaction => ({ + ...blockTransaction, + timestamp: blockInfo.timestamp, + transactionHash: blockTransaction.transactionInfo.hash, + transactionType: blockTransaction.type + })) + }; + } + + /** + * Gets formatted Receipt and Resolution statements + * @param height - Block height. + * @returns Receipt and Resolution info object + */ + static getBlockReceiptsInfo = async (height) => { + const searchCriteria = { + order: Order.Desc, + height: UInt64.fromUint(height) + }; + + const [address, mosaic] = await Promise.all([ReceiptService.streamerAddressResolution(searchCriteria), ReceiptService.streamerMosaicResolution(searchCriteria)]); + + return { + resolutionStatements: [...address, ...mosaic] + }; + } + + /** + * Get formatted BlockInfo dataset into Vue Component + * @param height - Block height. + * @returns Block info object + */ + static getBlockInfo = async height => { + const block = await this.getBlockByHeight(height); + + // Get merkle info + let { stateHash, stateHashSubCacheMerkleRoots, blockReceiptsHash, blockTransactionsHash } = block; + + // Append merkle root name into hash + stateHashSubCacheMerkleRoots = stateHashSubCacheMerkleRoots.map((root, index) => { + return `${Constants.MerkleRootsOrder[index]} - ${root}`; + }); + + let importanceBlockInfo = {}; + + if (block.type === BlockType.ImportanceBlock) { + Object.assign(importanceBlockInfo, { + totalVotingBalance: Number(block.totalVotingBalance), + harvestingEligibleAccountsCount: Number(block.harvestingEligibleAccountsCount) + }); + } + + return { + ...block, + ...importanceBlockInfo, + symbolTime: block.timestamp, + payloadSize: block.size, + blockHash: block.hash, + harvester: block.signer, + merkleInfo: { + stateHash, + stateHashSubCacheMerkleRoots, + blockReceiptsHash, + blockTransactionsHash + } + }; + } + + /** + * Gets block receipt list into Vue Component. + * @param pageInfo - object for page info such as pageNumber, pageSize + * @param filterVaule - object for search criteria + * @param height - Block height. + * @returns formatted receipt data list + */ + static getBlockReceiptList = async (pageInfo, filterVaule, height) => { + const { pageNumber, pageSize } = pageInfo; + + const { BalanceTransferReceipt, BalanceChangeReceipt, InflationReceipt, ArtifactExpiryReceipt } = Constants.ReceiptTransactionStatamentType; + + const searchCriteria = { + pageNumber, + pageSize, + order: Order.Desc, + height: UInt64.fromUint(height), + ...filterVaule + }; + + const receipt = await ReceiptService.searchReceipts(searchCriteria); + + let formattedReceipt = []; + + switch (filterVaule.receiptTransactionStatementType) { + case BalanceTransferReceipt: + formattedReceipt = await ReceiptService.createReceiptTransactionStatement(receipt.data.balanceTransferStatement); + break; + case BalanceChangeReceipt: + formattedReceipt = await ReceiptService.createReceiptTransactionStatement(receipt.data.balanceChangeStatement); + break; + case InflationReceipt: + formattedReceipt = await ReceiptService.createReceiptTransactionStatement(receipt.data.inflationStatement); + break; + case ArtifactExpiryReceipt: + formattedReceipt = await ReceiptService.createReceiptTransactionStatement(receipt.data.artifactExpiryStatement); + break; + default: + break; + } + + return { + ...receipt, + data: formattedReceipt + }; + } + + /** + * Format Block to readable Block object + * @param BlockDTO + * @returns Object readable BlockDTO object + */ + static formatBlock = block => ({ + ...block, + blockType: Constants.BlockType[block.type], + height: block.height.compact(), + timestampRaw: Number(block.timestamp.toString()), + timestamp: helper.networkTimestamp(Number(block.timestamp.toString())), + totalFee: helper.toNetworkCurrency(block.totalFee), + difficulty: helper.convertBlockDifficultyToReadable(block.difficulty), + feeMultiplier: block.feeMultiplier.toString(), + totalTransactions: block.totalTransactionsCount, + statements: block.statementsCount, + transactions: block.transactionsCount, + signer: helper.publicKeyToAddress(block.signer.publicKey), + beneficiaryAddress: block?.beneficiaryAddress.plain() || Constants.Message.UNAVAILABLE + }) +} + +export default BlockService; diff --git a/src/infrastructure/ChainService.js b/src/infrastructure/ChainService.js new file mode 100644 index 0000000..a33a816 --- /dev/null +++ b/src/infrastructure/ChainService.js @@ -0,0 +1,42 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import http from './http'; + +class ChainService { + /** + * Gets chain info such as current block height, finalized block and etc + * @returns formatted chain info + */ + static getChainInfo = async () => { + const chainInfo = await http.createRepositoryFactory.createChainRepository() + .getChainInfo() + .toPromise(); + + return { + ...chainInfo, + height: chainInfo.height.compact(), + latestFinalizedBlock: { + ...chainInfo.latestFinalizedBlock, + height: chainInfo.latestFinalizedBlock.height.compact() + } + }; + } +} + +export default ChainService; diff --git a/src/infrastructure/CreateReceiptTransaction.js b/src/infrastructure/CreateReceiptTransaction.js new file mode 100644 index 0000000..ccb5f24 --- /dev/null +++ b/src/infrastructure/CreateReceiptTransaction.js @@ -0,0 +1,98 @@ +import Constants from '../config/constants'; +import helper from '../helper'; +import { Mosaic, ReceiptType } from 'symbol-sdk'; + +class CreateReceiptTransaction { + static balanceChangeReceipt = async (transactionStatement) => { + let balanceChangeReceipt = []; + + const mosaics = transactionStatement.map( + statement => new Mosaic(statement.mosaicId, statement.amount) + ); + + const mosaicsFieldObject = await helper.mosaicsFieldObjectBuilder(mosaics); + + for (const statement of transactionStatement) { + balanceChangeReceipt.push({ + ...statement, + height: statement.height.compact(), + receiptType: Constants.ReceiptType[statement.type], + targetAddress: statement.targetAddress.plain(), + mosaics: [mosaicsFieldObject.find(mosaicFieldObject => mosaicFieldObject.mosaicId === statement.mosaicId.toHex() && + statement.amount.equals(mosaicFieldObject.rawAmount))] + }); + } + + return balanceChangeReceipt; + } + + static balanceTransferReceipt = async (transactionStatement) => { + let balanceTransferReceipt = []; + + const mosaics = transactionStatement.map( + statement => new Mosaic(statement.mosaicId, statement.amount) + ); + + const mosaicsFieldObject = await helper.mosaicsFieldObjectBuilder(mosaics); + + for (const statement of transactionStatement) { + balanceTransferReceipt.push({ + ...statement, + height: statement.height.compact(), + receiptType: Constants.ReceiptType[statement.type], + senderAddress: statement.senderAddress.address, + recipient: statement.recipientAddress.address, + mosaics: [mosaicsFieldObject.find(mosaicFieldObject => mosaicFieldObject.mosaicId === statement.mosaicId.toHex() && + statement.amount.equals(mosaicFieldObject.rawAmount))] + }); + } + + return balanceTransferReceipt; + } + + static inflationReceipt = async (transactionStatement) => { + let inflationReceipt = []; + + const mosaics = transactionStatement.map( + statement => new Mosaic(statement.mosaicId, statement.amount) + ); + + const mosaicsFieldObject = await helper.mosaicsFieldObjectBuilder(mosaics); + + for (const statement of transactionStatement) { + inflationReceipt.push({ + ...statement, + height: statement.height.compact(), + receiptType: Constants.ReceiptType[statement.type], + mosaics: [mosaicsFieldObject.find(mosaicFieldObject => mosaicFieldObject.mosaicId === statement.mosaicId.toHex() && + statement.amount.equals(mosaicFieldObject.rawAmount))] + }); + } + + return inflationReceipt; + } + + static artifactExpiryReceipt = async (transactionStatement) => { + let artifactExpiryReceipt = []; + + for (const statement of transactionStatement) { + let artifactObj = { + ...statement, + height: statement.height.compact(), + receiptType: Constants.ReceiptType[statement.type], + artifactId: statement.artifactId.toHex() + }; + + if (ReceiptType.Mosaic_Expired === statement.type) + Object.assign(artifactObj, { mosaicArtifactId: statement.artifactId.toHex() }); + else if (ReceiptType.Namespace_Expired === statement.type || ReceiptType.Namespace_Deleted === statement.type) + Object.assign(artifactObj, { namespaceArtifactId: statement.artifactId.toHex() }); + + artifactExpiryReceipt.push(artifactObj); + } + + return artifactExpiryReceipt; + } +} + +export default CreateReceiptTransaction; diff --git a/src/infrastructure/CreateTransaction.js b/src/infrastructure/CreateTransaction.js new file mode 100644 index 0000000..4c7188a --- /dev/null +++ b/src/infrastructure/CreateTransaction.js @@ -0,0 +1,391 @@ +/* + * + * Copyright (c) 2019-present for symbol + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import http from './http'; +import helper from '../helper'; +import { Constants } from '../config'; +import { NamespaceService } from '../infrastructure'; +import { Address, Mosaic, MosaicId } from 'symbol-sdk'; + +class CreateTransaction { + static transferTransaction = async (transactionObj) => { + const [resolvedAddress, mosaicsFieldObject] = await Promise.all([ + helper.resolvedAddress(transactionObj.recipientAddress), + helper.mosaicsFieldObjectBuilder(transactionObj.mosaics) + ]); + + return { + ...transactionObj, + transactionBody: { + transactionType: transactionObj.type, + message: transactionObj.message, + recipient: resolvedAddress, + mosaics: mosaicsFieldObject + } + }; + } + + static namespaceRegistration = async (transactionObj) => { + return { + ...transactionObj, + transactionBody: { + transactionType: transactionObj.type, + recipient: http.networkConfig.NamespaceRentalFeeSinkAddress.address, + registrationType: Constants.NamespaceRegistrationType[transactionObj.registrationType], + namespaceName: transactionObj.namespaceName, + namespaceId: transactionObj.namespaceId.toHex(), + parentId: typeof transactionObj.parentId !== 'undefined' ? transactionObj.parentId?.toHex() : Constants.Message.UNAVAILABLE, + duration: typeof transactionObj.duration !== 'undefined' ? transactionObj.duration?.compact() : Constants.Message.UNLIMITED + } + }; + } + + static addressAlias = async (transactionObj) => { + const namespaceNames = await NamespaceService.getNamespacesNames([transactionObj.namespaceId]); + const namespaceName = namespaceNames.find(namespace => namespace.namespaceId === transactionObj.namespaceId.toHex()); + + return { + ...transactionObj, + transactionBody: { + transactionType: transactionObj.type, + aliasAction: Constants.AliasAction[transactionObj.aliasAction], + namespaceId: transactionObj.namespaceId.toHex(), + namespaceName: namespaceName.name, + address: transactionObj.address.address + } + }; + } + + static mosaicAlias = async (transactionObj) => { + const namespaceNames = await NamespaceService.getNamespacesNames([transactionObj.namespaceId]); + const namespaceName = namespaceNames.find(namespace => namespace.namespaceId === transactionObj.namespaceId.toHex()); + + return { + ...transactionObj, + transactionBody: { + transactionType: transactionObj.type, + aliasAction: Constants.AliasAction[transactionObj.aliasAction], + namespaceId: transactionObj.namespaceId.id.toHex(), + namespaceName: namespaceName.name, + mosaicId: transactionObj.mosaicId.id.toHex() + } + }; + }; + + static mosaicDefinition = async (transactionObj) => { + const resolvedMosaic = await helper.resolveMosaicId(transactionObj.mosaicId); + + return { + ...transactionObj, + transactionBody: { + transactionType: transactionObj.type, + recipient: http.networkConfig.MosaicRentalSinkAddress.address, + mosaicId: resolvedMosaic.toHex(), + divisibility: transactionObj.divisibility, + duration: transactionObj.duration.compact(), + nonce: transactionObj.nonce.toHex(), + supplyMutable: transactionObj.flags.supplyMutable, + transferable: transactionObj.flags.transferable, + restrictable: transactionObj.flags.restrictable + } + }; + }; + + static mosaicSupplyChange = async (transactionObj) => { + const resolvedMosaic = await helper.resolveMosaicId(transactionObj.mosaicId); + + return { + ...transactionObj, + transactionBody: { + transactionType: transactionObj.type, + mosaicId: resolvedMosaic.toHex(), + action: Constants.MosaicSupplyChangeAction[transactionObj.action], + delta: transactionObj.delta.compact() + } + }; + }; + + static multisigAccountModification = async (transactionObj) => { + const [addressAdditions, addressDeletions] = await Promise.all([ + Promise.all(transactionObj.addressAdditions.map(address => { + return helper.resolvedAddress(address); + })), + Promise.all(transactionObj.addressDeletions.map(address => { + return helper.resolvedAddress(address); + })) + ]); + + return { + ...transactionObj, + transactionBody: { + transactionType: transactionObj.type, + minApprovalDelta: transactionObj.minApprovalDelta, + minRemovalDelta: transactionObj.minRemovalDelta, + addressAdditions: addressAdditions, + addressDeletions: addressDeletions + } + }; + } + + static hashLock = async (transactionObj) => { + const resolvedMosaic = await helper.resolveMosaicId(transactionObj.mosaic); + + const mosaic = new Mosaic(new MosaicId(resolvedMosaic.toHex()), transactionObj.mosaic.amount); + + const mosaicsFieldObject = await helper.mosaicsFieldObjectBuilder([mosaic]); + + return { + ...transactionObj, + transactionBody: { + transactionType: transactionObj.type, + duration: transactionObj.duration.compact(), + mosaics: mosaicsFieldObject, + hash: transactionObj.hash + } + }; + } + + static secretLock = async (transactionObj) => { + const [mosaicsFieldObject, resolvedAddress] = await Promise.all([ + helper.mosaicsFieldObjectBuilder([transactionObj.mosaic]), + helper.resolvedAddress(transactionObj.recipientAddress) + ]); + + return { + ...transactionObj, + transactionBody: { + transactionType: transactionObj.type, + duration: transactionObj.duration.compact(), + mosaics: mosaicsFieldObject, + secret: transactionObj.secret, + recipient: resolvedAddress, + hashAlgorithm: Constants.LockHashAlgorithm[transactionObj.hashAlgorithm] + } + }; + }; + + static secretProof = async (transactionObj) => { + const resolvedAddress = await helper.resolvedAddress(transactionObj.recipientAddress); + + return { + ...transactionObj, + transactionBody: { + transactionType: transactionObj.type, + hashAlgorithm: Constants.LockHashAlgorithm[transactionObj.hashAlgorithm], + recipient: resolvedAddress, + secret: transactionObj.secret, + proof: transactionObj.proof + } + }; + }; + + static accountAddressRestriction = async (transactionObj) => { + const [addressAdditions, addressDeletions] = await Promise.all([ + Promise.all(transactionObj.restrictionAdditions.map(address => { + return helper.resolvedAddress(address); + })), + Promise.all(transactionObj.restrictionDeletions.map(address => { + return helper.resolvedAddress(address); + })) + ]); + + return { + ...transactionObj, + transactionBody: { + transactionType: transactionObj.type, + restrictionType: Constants.AddressRestrictionFlag[transactionObj.restrictionFlags], + restrictionAddressAdditions: addressAdditions, + restrictionAddressDeletions: addressDeletions + } + }; + }; + + static accountMosaicRestriction = async (transactionObj) => { + // Todo: mosaic restriction field + return { + ...transactionObj, + transactionBody: { + transactionType: transactionObj.type, + restrictionType: Constants.MosaicRestrictionFlag[transactionObj.restrictionFlags], + restrictionMosaicAdditions: transactionObj.restrictionAdditions.map(restriction => restriction.id.toHex()), + restrictionMosaicDeletions: transactionObj.restrictionDeletions.map(restriction => restriction.id.toHex()) + } + }; + } + + static accountOperationRestriction = async (transactionObj) => { + return { + ...transactionObj, + transactionBody: { + transactionType: transactionObj.type, + restrictionType: Constants.OperationRestrictionFlag[transactionObj.restrictionFlags], + restrictionOperationAdditions: transactionObj.restrictionAdditions.map(operation => operation), + restrictionOperationDeletions: transactionObj.restrictionDeletions.map(operation => operation) + } + }; + }; + + static mosaicAddressRestriction = async (transactionObj) => { + const [resolvedMosaic, targetAddress] = await Promise.all([ + helper.resolveMosaicId(transactionObj.mosaicId), + helper.resolvedAddress(transactionObj.targetAddress) + ]); + + const mosaicAliasNames = await helper.getMosaicAliasNames(resolvedMosaic); + + return { + ...transactionObj, + transactionBody: { + transactionType: transactionObj.type, + mosaicId: resolvedMosaic.toHex(), + mosaicAliasNames, + targetAddress: targetAddress, + restrictionKey: transactionObj.restrictionKey.toHex(), + previousRestrictionValue: transactionObj.previousRestrictionValue.toString(), + newRestrictionValue: transactionObj.newRestrictionValue.toString() + } + }; + }; + + static mosaicGlobalRestriction = async (transactionObj) => { + const referenceMosaicId = transactionObj.referenceMosaicId.toHex() === '0000000000000000' ? transactionObj.mosaicId : transactionObj.referenceMosaicId; + const mosaicAliasNames = await helper.getMosaicAliasNames(referenceMosaicId); + + return { + ...transactionObj, + transactionBody: { + transactionType: transactionObj.type, + referenceMosaicId: referenceMosaicId.toHex(), + mosaicAliasNames, + restrictionKey: transactionObj.restrictionKey.toHex(), + previousRestrictionType: Constants.MosaicRestrictionType[transactionObj.previousRestrictionType], + previousRestrictionValue: transactionObj.previousRestrictionValue.compact(), + newRestrictionType: Constants.MosaicRestrictionType[transactionObj.newRestrictionType], + newRestrictionValue: transactionObj.newRestrictionValue.compact() + } + }; + }; + + static accountMetadata = async (transactionObj) => { + const resolvedAddress = await helper.resolvedAddress(transactionObj.targetAddress); + + return { + ...transactionObj, + transactionBody: { + transactionType: transactionObj.type, + scopedMetadataKey: transactionObj.scopedMetadataKey.toHex(), + targetAddress: resolvedAddress, + metadataValue: transactionObj.value, + valueSizeDelta: transactionObj.valueSizeDelta + } + }; + }; + + static mosaicMetadata = async (transactionObj) => { + const [resolvedMosaic, resolvedAddress] = await Promise.all([ + helper.resolveMosaicId(transactionObj.targetMosaicId), + helper.resolvedAddress(transactionObj.targetAddress) + ]); + + const mosaicAliasNames = await helper.getMosaicAliasNames(resolvedMosaic); + + return { + ...transactionObj, + transactionBody: { + transactionType: transactionObj.type, + scopedMetadataKey: transactionObj.scopedMetadataKey.toHex(), + targetMosaicId: resolvedMosaic.toHex(), + targetMosaicAliasNames: mosaicAliasNames, + targetAddress: resolvedAddress, + metadataValue: transactionObj.value, + valueSizeDelta: transactionObj.valueSizeDelta + } + }; + }; + + static namespaceMetadata = async (transactionObj) => { + const [namespaceName, resolvedAddress] = await Promise.all([ + NamespaceService.getNamespacesNames([transactionObj.targetNamespaceId]), + helper.resolvedAddress(transactionObj.targetAddress) + ]); + + return { + ...transactionObj, + transactionBody: { + transactionType: transactionObj.type, + scopedMetadataKey: transactionObj.scopedMetadataKey.toHex(), + targetNamespaceId: transactionObj.targetNamespaceId.toHex(), + namespaceName: namespaceName, + targetAddress: resolvedAddress, + metadataValue: transactionObj.value, + valueSizeDelta: transactionObj.valueSizeDelta + } + }; + }; + + static votingKeyLink = async (transactionObj) => { + return { + ...transactionObj, + transactionBody: { + linkAction: Constants.LinkAction[transactionObj.linkAction], + linkedPublicKey: transactionObj.linkedPublicKey, + linkedAccountAddress: Address.createFromPublicKey(transactionObj.linkedPublicKey, http.networkType).plain(), + startEpoch: transactionObj.startEpoch, + endEpoch: transactionObj.endEpoch + } + }; + }; + + static vrfKeyLink = async (transactionObj) => { + return { + ...transactionObj, + transactionBody: { + transactionType: transactionObj.type, + linkAction: Constants.LinkAction[transactionObj.linkAction], + linkedPublicKey: transactionObj.linkedPublicKey, + linkedAccountAddress: Address.createFromPublicKey(transactionObj.linkedPublicKey, http.networkType).plain() + } + }; + }; + + static nodeKeyLink = async (transactionObj) => { + return { + ...transactionObj, + transactionBody: { + transactionType: transactionObj.type, + linkAction: Constants.LinkAction[transactionObj.linkAction], + linkedPublicKey: transactionObj.linkedPublicKey, + linkedAccountAddress: Address.createFromPublicKey(transactionObj.linkedPublicKey, http.networkType).plain() + } + }; + }; + + static accountKeyLink = async (transactionObj) => { + return { + ...transactionObj, + transactionBody: { + transactionType: transactionObj.type, + linkAction: Constants.LinkAction[transactionObj.linkAction], + linkedPublicKey: transactionObj.linkedPublicKey, + linkedAccountAddress: Address.createFromPublicKey(transactionObj.linkedPublicKey, http.networkType).plain() + } + }; + }; +}; + +export default CreateTransaction; diff --git a/src/infrastructure/DataService.js b/src/infrastructure/DataService.js new file mode 100644 index 0000000..dd59870 --- /dev/null +++ b/src/infrastructure/DataService.js @@ -0,0 +1,66 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import axios from 'axios'; +import http from './http'; + +class DataService { + /** + * Gets cryptocurrency market price from https://min-api.cryptocompare.com/ + * @param cryptocurrency - name such as XEM, BTC + * @returns Object of data + */ + static getMarketPrice = (cryptocurrency) => { + return new Promise((resolve, reject) => { + let url = http.marketDataUrl + `data/pricemultifull?fsyms=${cryptocurrency}&tsyms=USD`; + + axios + .get(url) + .then(res => { + return resolve(res.data.DISPLAY); + }) + .catch(error => { + // reject(new Error('Fail to request XEM price.')) + reject(new Error(error)); + }); + }); + } + + /** + * Gets cryptocurrency historical hourly graph from https://min-api.cryptocompare.com/ + * @param cryptocurrency - name such as XEM, BTC + * @returns Array of Data + */ + static getHistoricalHourlyGraph = (cryptocurrency) => { + return new Promise((resolve, reject) => { + let url = http.marketDataUrl + `data/histohour?fsym=${cryptocurrency}&tsym=USD&limit=168`; + + axios + .get(url) + .then(res => { + return resolve(res.data); + }) + .catch(error => { + // reject(new Error('Fail to request Xem historical hourly graph.')) + reject(new Error(error)); + }); + }); + } +} + +export default DataService; diff --git a/src/infrastructure/ListenerService.js b/src/infrastructure/ListenerService.js new file mode 100644 index 0000000..71501db --- /dev/null +++ b/src/infrastructure/ListenerService.js @@ -0,0 +1,46 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { Listener } from 'symbol-sdk'; +import http from './http'; +class ListenerService { + /** + * Subscribe to new blocks announced to the chain. + * @param onAdd - Getters function + * @param wsEndpoint - WS endpoint in string format. + * @returns Array object [Listener, Subscription] + */ + static subscribeNewBlock = async (onAdd, wsEndpoint) => { + const namespaceRepository = http.createRepositoryFactory.createNamespaceRepository(); + const customWsEndpoint = `${wsEndpoint}/ws`; + + const listener = new Listener(customWsEndpoint, namespaceRepository, WebSocket); + + await listener.open(); + let subscription = listener + .newBlock() + .subscribe( + block => onAdd(block), + err => console.log(err) + ); + + return [listener, subscription]; + } +} + +export default ListenerService; diff --git a/src/infrastructure/LockService.js b/src/infrastructure/LockService.js new file mode 100644 index 0000000..ba5a3f9 --- /dev/null +++ b/src/infrastructure/LockService.js @@ -0,0 +1,95 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import http from './http'; +import { Constants } from '../config'; + +class LockService { + /** + * Gets a hash lock from searchCriteria + * @param hashLockSearchCriteria Object of Search Criteria + * @returns formatted hash lock data with pagination info + */ + static searchHashLocks = async (hashLockSearchCriteria) => { + const searchHashLocks = await http.createRepositoryFactory.createHashLockRepository() + .search(hashLockSearchCriteria) + .toPromise(); + + return { + ...searchHashLocks, + data: searchHashLocks.data.map(hashLock => this.formatHashLockInfo(hashLock)) + }; + } + + /** + * Gets hash lock from hash + * @param hash Transaction hash + * @returns formatted Hash lock info + */ + static getHashLock = async (hash) => { + const hashLock = await http.createRepositoryFactory.createHashLockRepository() + .getHashLock(hash) + .toPromise(); + + return this.formatHashLockInfo(hashLock); + } + + /** + * Gets a secret lock from searchCriteria + * @param secretLockSearchCriteria Object of Search Criteria + * @returns formatted secret lock data with pagination info + */ + static searchSecretLocks = async (secretLockSearchCriteria) => { + const searchSecretLocks = await http.createRepositoryFactory.createSecretLockRepository() + .search(secretLockSearchCriteria) + .toPromise(); + + return { + ...searchSecretLocks, + data: searchSecretLocks.data.map(hashLock => this.formatSecretLockInfo(hashLock)) + }; + } + + /** + * Format secretLockInfoDTO + * @param secretLockInfo + * @returns readable secretLockInfoDTO object + */ + static formatSecretLockInfo = (secretLockInfo) => ({ + ...secretLockInfo, + status: Constants.LockStatusType[secretLockInfo.status], + endHeight: Number(secretLockInfo.endHeight.toString()), + ownerAddress: secretLockInfo.ownerAddress.plain(), + recipient: secretLockInfo.recipientAddress.plain(), + hashAlgorithm: Constants.LockHashAlgorithm[secretLockInfo.hashAlgorithm] + }) + + /** + * Format HashLockInfoDTO + * @param hashLockInfo + * @returns readable HashLockInfoDTO object + */ + static formatHashLockInfo = (hashLockInfo) => ({ + ...hashLockInfo, + status: Constants.LockStatusType[hashLockInfo.status], + endHeight: Number(hashLockInfo.endHeight.toString()), + ownerAddress: hashLockInfo.ownerAddress.plain() + }) +} + +export default LockService; diff --git a/src/infrastructure/MetadataService.js b/src/infrastructure/MetadataService.js new file mode 100644 index 0000000..9a65d97 --- /dev/null +++ b/src/infrastructure/MetadataService.js @@ -0,0 +1,65 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import http from './http'; +import Constants from '../config/constants'; + +class MetadataService { + /** + * Gets a metadata from searchCriteria + * @param metadataSearchCriteria Object of Search Criteria + * @returns formatted metadatas with pagination info + */ + static searchMetadatas = async (metadataSearchCriteria) => { + const searchMetadatas = await http.createRepositoryFactory.createMetadataRepository() + .search(metadataSearchCriteria) + .toPromise(); + + return { + ...searchMetadatas, + data: searchMetadatas.data.map(metadata => this.formatMetadata(metadata)) + }; + } + + /** + * Format Metadata to readable object + * @param metadata - metadata DTO + * @returns readable Metadata object + */ + static formatMetadata = metadata => ({ + metadataId: metadata.id, + ...this.formatMetadataEntry(metadata.metadataEntry) + }) + + /** + * Format MetadataEntry to readable object + * @param metadataEntry - metadataEntry DTO + * @returns readable metadataEntry object + */ + static formatMetadataEntry = metadataEntry => ({ + ...metadataEntry, + scopedMetadataKey: metadataEntry.scopedMetadataKey.toHex(), + sourceAddress: metadataEntry.sourceAddress.plain(), + targetAddress: metadataEntry.targetAddress.plain(), + metadataType: Constants.MetadataType[metadataEntry.metadataType], + targetId: metadataEntry.targetId ? metadataEntry.targetId.toHex() : Constants.Message.UNAVAILABLE, + metadataValue: metadataEntry.value + }) +} + +export default MetadataService; diff --git a/src/infrastructure/MosaicService.js b/src/infrastructure/MosaicService.js new file mode 100644 index 0000000..a5394a4 --- /dev/null +++ b/src/infrastructure/MosaicService.js @@ -0,0 +1,289 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import http from './http'; +import helper from '../helper'; +import { Address, MosaicId, Order, ReceiptType, UInt64 } from 'symbol-sdk'; +import { NamespaceService, MetadataService, ReceiptService } from '../infrastructure'; +import { Constants } from '../config'; + +class MosaicService { + /** + * Gets MosaicInfo for different mosaicIds. + * @param mosaicIds[] - Array of mosaic ids + * @returns Formatted MosaicInfo[] + */ + static getMosaics = async mosaicIds => { + const mosaics = await http.createRepositoryFactory.createMosaicRepository() + .getMosaics(mosaicIds) + .toPromise(); + const formattedMosaics = mosaics.map(mosaic => this.formatMosaicInfo(mosaic)); + + return formattedMosaics; + } + + /** + * Gets the MosaicInfo for a given mosaicId + * @param mosaicId - Mosaic id + * @returns Formatted MosaicInfo + */ + static getMosaic = async mosaicId => { + const mosaic = await http.createRepositoryFactory.createMosaicRepository() + .getMosaic(mosaicId) + .toPromise(); + + const formattedMosaic = this.formatMosaicInfo(mosaic); + + return formattedMosaic; + } + + /** + * Get balance mosaics in form of MosaicAmountViews for a given account address + * @param address - Account address + * @returns formatted MosaicAmountView[] + */ + static getMosaicAmountView = async address => { + const mosaicAmountViews = await http.mosaicService.mosaicsAmountViewFromAddress(Address.createFromRawAddress(address)).toPromise(); + + return mosaicAmountViews.map(mosaicAmountView => this.formatMosaicAmountView(mosaicAmountView)); + } + + /** + * Gets a mosaics list from searchCriteria + * @param mosaicSearchCriteria Object of Search Criteria + * @returns formatted mosaic data with pagination info + */ + static searchMosaics = async (mosaicSearchCriteria) => { + const searchMosaics = await http.createRepositoryFactory.createMosaicRepository() + .search(mosaicSearchCriteria) + .toPromise(); + + return { + ...searchMosaics, + data: searchMosaics.data.map(mosaic => this.formatMosaicInfo(mosaic)) + }; + } + + /** + * Get formatted MosaicInfo dataset into Vue Component + * @param hexOrNamespace - hex value or namespace name + * @returns MosaicInfo info object + */ + static getMosaicInfo = async (hexOrNamespace) => { + const mosaicId = await helper.hexOrNamespaceToId(hexOrNamespace, 'mosaic'); + const mosaicInfo = await this.getMosaic(mosaicId); + + const mosaicNames = await NamespaceService.getMosaicsNames([mosaicId]); + + const expiredInBlock = mosaicInfo.duration + mosaicInfo.startHeight; + + return { + ...mosaicInfo, + mosaicAliasNames: this.extractMosaicNamespace(mosaicInfo, mosaicNames), + expiredInBlock: expiredInBlock === mosaicInfo.startHeight ? Constants.Message.INFINITY : expiredInBlock + }; + } + + /** + * Get custom MosaicInfo dataset into Vue Component + * @param pageInfo - pagination info + * @returns Custom MosaicInfo[] + */ + static getMosaicList = async (pageInfo) => { + const { pageNumber, pageSize } = pageInfo; + const searchCriteria = { + pageNumber, + pageSize, + order: Order.Desc + }; + + const mosaicInfos = await this.searchMosaics(searchCriteria); + + const mosaicIdsList = mosaicInfos.data.map(mosaicInfo => new MosaicId(mosaicInfo.mosaicId)); + + const mosaicNames = await NamespaceService.getMosaicsNames(mosaicIdsList); + + return { + ...mosaicInfos, + data: mosaicInfos.data.map(mosaic => ({ + ...mosaic, + ownerAddress: mosaic.address, + mosaicAliasNames: this.extractMosaicNamespace(mosaic, mosaicNames) + })) + }; + } + + /** + * Get customize MosaicAmountView dataset for Vue component. + * @param address - Account address + * @returns customize MosaicAmountView[] + */ + static getMosaicAmountViewList = async address => { + const mosaicAmountViewInfos = await this.getMosaicAmountView(address); + + const mosaicIdsList = mosaicAmountViewInfos.map(mosaicAmountViewInfo => new MosaicId(mosaicAmountViewInfo.mosaicId)); + const mosaicNames = await NamespaceService.getMosaicsNames(mosaicIdsList); + + return mosaicAmountViewInfos.map(mosaicAmountViewInfo => ({ + ...mosaicAmountViewInfo, + mosaicAliasNames: this.extractMosaicNamespace(mosaicAmountViewInfo, mosaicNames) + })); + } + + /** + * Gets mosaic Metadata list dataset into Vue component + * @param pageInfo - object for page info such as pageNumber, pageSize + * @param filterVaule - object for search criteria + * @param hexOrNamespace - hex value or namespace name + * @returns formatted mosaic Metadata list + */ + static getMosaicMetadataList = async (pageInfo, filterVaule, hexOrNamespace) => { + const mosaicId = await helper.hexOrNamespaceToId(hexOrNamespace, 'mosaic'); + + const { pageNumber, pageSize } = pageInfo; + + const searchCriteria = { + pageNumber, + pageSize, + order: Order.Desc, + targetId: mosaicId, + ...filterVaule + }; + const mosaicMetadatas = await MetadataService.searchMetadatas(searchCriteria); + + return mosaicMetadatas; + } + + /** + * Gets mosaic balance transfer receipt list dataset into Vue component + * @param pageInfo - object for page info such as pageNumber, pageSize + * @param hexOrNamespace - hex value or namespace name + * @returns formatted balance transfer receipt list + */ + static getMosaicBalanceTransferReceipt = async (pageInfo, hexOrNamespace) => { + const mosaicId = await helper.hexOrNamespaceToId(hexOrNamespace, 'mosaic'); + + const { startHeight, address } = await this.getMosaic(mosaicId); + + const { pageNumber, pageSize } = pageInfo; + + const searchCriteria = { + pageNumber, + pageSize, + order: Order.Desc, + height: UInt64.fromUint(startHeight), + receiptTypes: [ReceiptType.Mosaic_Rental_Fee], + senderAddress: Address.createFromRawAddress(address) + }; + + const balanceTransferReceipt = await ReceiptService.searchReceipts(searchCriteria); + + const formattedReceipt = await ReceiptService.createReceiptTransactionStatement(balanceTransferReceipt.data.balanceTransferStatement); + + return { + ...balanceTransferReceipt, + data: formattedReceipt.filter(receipt => + receipt.senderAddress === address && + receipt.type === ReceiptType.Mosaic_Rental_Fee) + }; + } + + /** + * Gets mosaic artifact expiry receipt list dataset into Vue component + * @param pageInfo - object for page info such as pageNumber, pageSize + * @param hexOrNamespace - hex value or namespace name + * @returns formatted artifact expiry receipt list + */ + static getMosaicArtifactExpiryReceipt = async (pageInfo, hexOrNamespace) => { + const mosaicId = await helper.hexOrNamespaceToId(hexOrNamespace, 'mosaic'); + + const { startHeight, duration } = await this.getMosaic(mosaicId); + + const { pageNumber, pageSize } = pageInfo; + + const endHeight = startHeight + duration; + + if (endHeight === startHeight) + return {}; + + // Todo: Should filter with with ArtifactId rather than height. + // Bug: https://github.com/nemtech/catapult-rest/issues/517 + const searchCriteria = { + pageNumber, + pageSize, + order: Order.Desc, + height: UInt64.fromUint(endHeight), + receiptTypes: [ReceiptType.Mosaic_Expired] + }; + + const artifactExpiryReceipt = await ReceiptService.searchReceipts(searchCriteria); + const formattedReceipt = await ReceiptService.createReceiptTransactionStatement(artifactExpiryReceipt.data.artifactExpiryStatement); + + return { + ...artifactExpiryReceipt, + data: formattedReceipt.filter(receipt => receipt.type === ReceiptType.Mosaic_Expired) + }; + } + + /** + * Format MosaicInfo to readable mosaicInfo object + * @param MosaicInfoDTO + * @returns Object readable MosaicInfoDTO object + */ + static formatMosaicInfo = mosaicInfo => ({ + mosaicId: mosaicInfo.id.toHex(), + divisibility: mosaicInfo.divisibility, + address: mosaicInfo.ownerAddress.plain(), + supply: mosaicInfo.supply.compact().toLocaleString('en-US'), + relativeAmount: helper.formatMosaicAmountWithDivisibility(mosaicInfo.supply, mosaicInfo.divisibility), + revision: mosaicInfo.revision, + startHeight: Number(mosaicInfo.startHeight.toString()), + duration: Number(mosaicInfo.duration.toString()), + supplyMutable: mosaicInfo.flags.supplyMutable, + transferable: mosaicInfo.flags.transferable, + restrictable: mosaicInfo.flags.restrictable + }) + + /** + * format MosaicAmountView to readable object + * @param mosaicAmountView - mosaicAmountView DTO + * @returns formatted mosaicAmountView + */ + static formatMosaicAmountView = mosaicAmountView => ({ + ...this.formatMosaicInfo(mosaicAmountView.mosaicInfo), + amount: helper.formatMosaicAmountWithDivisibility(mosaicAmountView.amount, mosaicAmountView.mosaicInfo.divisibility) + }) + + /** + * Extract Name for Mosaic + * @param mosaicInfo - mosaicInfo DTO + * @param mosaicNames - MosaicNames[] + * @returns mosaicNames + */ + static extractMosaicNamespace = (mosaicInfo, mosaicNames) => { + const mosaicName = mosaicNames.find((name) => name.mosaicId === mosaicInfo.mosaicId); + + const aliasNames = mosaicName.names.map(names => names.name); + + const names = aliasNames.length > 0 ? aliasNames : [Constants.Message.UNAVAILABLE]; + + return names; + } +} + +export default MosaicService; diff --git a/src/infrastructure/MultisigService.js b/src/infrastructure/MultisigService.js new file mode 100644 index 0000000..41c4ecd --- /dev/null +++ b/src/infrastructure/MultisigService.js @@ -0,0 +1,75 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import http from './http'; +import { Address } from 'symbol-sdk'; + +class MultisigService { + /** + * Gets a MultisigAccountInfo for an account. + * @param address - Account Address + * @returns MultisigAccountInfo + */ + static getMultisigAccount = async address => { + let multisigAccountInfo; + + try { + multisigAccountInfo = await http.createRepositoryFactory.createMultisigRepository() + .getMultisigAccountInfo(Address.createFromRawAddress(address)) + .toPromise(); + } + catch (e) { + // To Catach statusCode 404 if Address is not a multisig account. + throw Error('Address is not a multisig account.'); + } + + const formattedMultisigAccount = this.formatMultisigAccountInfo(multisigAccountInfo); + + return formattedMultisigAccount; + } + + /** + * Get Customize MultisigAccountInfo for Vue component + * @param address - Account Address + * @returns customize MultisigAccountInfo + */ + static getMultisigAccountInfo = async address => { + const multisigAccountInfo = await this.getMultisigAccount(address); + + return { + ...multisigAccountInfo, + minApproval: multisigAccountInfo?.cosignatoryAddresses.length > 0 ? multisigAccountInfo.minApproval : null, + minRemoval: multisigAccountInfo?.cosignatoryAddresses.length > 0 ? multisigAccountInfo.minRemoval : null, + cosignatoryAddresses: multisigAccountInfo?.cosignatoryAddresses, + multisigAddresses: multisigAccountInfo?.multisigAddresses + }; + } + + /** + * Format multisigAccountInfo DTO to readable object + * @param multisigAccountInfo - multisigAccountInfo DTO + * @returns formatted multisigAccountInfo DTO + */ + static formatMultisigAccountInfo = multisigAccountInfo => ({ + ...multisigAccountInfo, + cosignatoryAddresses: multisigAccountInfo.cosignatoryAddresses.map(address => address.plain()), + multisigAddresses: multisigAccountInfo.multisigAddresses.map(address => address.plain()) + }) +} + +export default MultisigService; diff --git a/src/infrastructure/NamespaceService.js b/src/infrastructure/NamespaceService.js new file mode 100644 index 0000000..b77470b --- /dev/null +++ b/src/infrastructure/NamespaceService.js @@ -0,0 +1,440 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import http from './http'; +import helper from '../helper'; +import Constants from '../config/constants'; +import { ChainService, MetadataService, ReceiptService } from '../infrastructure'; +import { Order, NamespaceId, UInt64, ReceiptType, Address } from 'symbol-sdk'; +import globalConfig from '../config/globalConfig'; + +class NamespaceService { + /** + * Gets array of NamespaceName for different namespaceIds + * @param namespaceIds - Array of namespace ids + * @returns Formatted NamespaceName[] + */ + static getNamespacesNames = async (namespaceIds) => { + let namespaceNames = await http.createRepositoryFactory.createNamespaceRepository() + .getNamespacesNames(namespaceIds) + .toPromise(); + + let formattedNamespacesName = namespaceNames.map(namespaceName => this.formatNamespaceName(namespaceName)); + + return formattedNamespacesName; + } + + /** + * Get readable names for a set of mosaics Returns friendly names for mosaics. + * @param mosaicIds - Array of mosaic ids + * @returns MosaicNames[] + */ + static getMosaicsNames = async (mosaicIds) => { + const mosaicNames = await http.createRepositoryFactory.createNamespaceRepository() + .getMosaicsNames(mosaicIds) + .toPromise(); + const formattedMosaicNames = mosaicNames.map(mosaicName => this.formatMosaicName(mosaicName)); + + return formattedMosaicNames; + } + + /** + * Returns friendly names for array of addresses. + * @param addresses - Array of addresses + * @returns AccountNames[] + */ + static getAccountsNames = async (addresses) => { + const accountNames = await http.createRepositoryFactory.createNamespaceRepository() + .getAccountsNames(addresses) + .toPromise(); + + const formattedAccountNames = accountNames.map(accountName => this.formatAccountName(accountName)); + + return formattedAccountNames; + } + + /** + * Get namespace info and name from namespace Id + * @param namespaceId - Namespace id + * @returns formatted namespace info and name + */ + static getNamespace = async (namespaceId) => { + let namespace = await http.namespaceService.namespace(namespaceId).toPromise(); + + let formattedNamespace = this.formatNamespace(namespace); + + return formattedNamespace; + } + + /** + * Get linked address from namespace Id + * @param namespaceId - Namespace id + * @returns Address + */ + static getLinkedAddress = async (namespaceId) => { + const address = await http.createRepositoryFactory.createNamespaceRepository() + .getLinkedAddress(namespaceId) + .toPromise(); + + return address; + } + + /** + * Get linked mosaicId from namespace Id + * @param namespaceId - Namespace id + * @returns mosaicId + */ + static getLinkedMosaicId = async (namespaceId) => { + const mosaicId = await http.createRepositoryFactory.createNamespaceRepository() + .getLinkedMosaicId(namespaceId) + .toPromise(); + + return mosaicId; + } + + /** + * Gets a namespace list from searchCriteria + * @param namespaceSearchCriteria Object of Search Criteria + * @returns formatted namespace data with pagination info + */ + static searchNamespaces = async (namespaceSearchCriteria) => { + const searchNamespaces = await http.createRepositoryFactory.createNamespaceRepository() + .search(namespaceSearchCriteria) + .toPromise(); + + // Convert NamespaceInfo[] to Namespace[] + const namespaces = await this.toNamespaces(searchNamespaces.data); + + return { + ...searchNamespaces, + data: namespaces.map(namespace => this.formatNamespace(namespace)) + }; + } + + /** + * Get namespace info for Vue Component + * @param hexOrNamespace - hex value or namespace name + * @returns customize namespace info Object + */ + static getNamespaceInfo = async (hexOrNamespace) => { + const namespaceId = await helper.hexOrNamespaceToId(hexOrNamespace, 'namespace'); + + const namespace = await this.getNamespace(namespaceId); + const { height: currentHeight } = await ChainService.getChainInfo(); + + const { + isExpired, + expiredInBlock, + expiredInSecond + } = helper.calculateNamespaceExpiration(currentHeight, namespace.endHeight); + + let formattedNamespaceInfo = { + ...namespace, + duration: helper.convertTimeFromNowInSec(expiredInSecond) || Constants.Message.UNLIMITED, + status: isExpired ? Constants.Message.EXPIRED : Constants.Message.ACTIVE + }; + + // create alias props by alias type. + if (namespace.aliasType === Constants.Message.ADDRESS) + formattedNamespaceInfo.aliasAddress = namespace.alias; + + if (namespace.aliasType === Constants.Message.MOSAIC) + formattedNamespaceInfo.aliasMosaic = namespace.alias; + + // End height disable click before expired. + formattedNamespaceInfo.expiredInBlock = helper.isNativeNamespace(namespace.namespaceName) ? Constants.Message.INFINITY : expiredInBlock + ` ≈ ` + formattedNamespaceInfo.duration; + + if (isExpired) + delete formattedNamespaceInfo.expiredInBlock; + + if (currentHeight < formattedNamespaceInfo.endHeight) { + formattedNamespaceInfo.beforeEndHeight = helper.isNativeNamespace(namespace.namespaceName) ? Constants.Message.INFINITY : formattedNamespaceInfo.endHeight + ` ( ${http.networkConfig.NamespaceGraceDuration} blocks of grace period )`; + delete formattedNamespaceInfo.endHeight; + } + + return formattedNamespaceInfo; + } + + /** + * Gets NamespaceName list from Vue Component + * @param hexOrNamespace - hex value or namespace name + * @returns Namespace name list + */ + static getNamespaceLevelList = async (hexOrNamespace) => { + let namespaceId = await helper.hexOrNamespaceToId(hexOrNamespace, 'namespace'); + + let namespacesName = await this.getNamespacesNames([namespaceId]); + + return namespacesName; + } + + /** + * Get customize NamespaceInfo dataset into Vue Component + * @param pageInfo - pagination info + * @param filterVaule - object for search criteria + * @returns customize NamespaceInfo[] + */ + static getNamespaceList = async (pageInfo, filterVaule) => { + const { pageNumber, pageSize } = pageInfo; + const searchCriteria = { + pageNumber, + pageSize, + order: Order.Desc, + ...filterVaule + }; + + const namespaceInfos = await this.searchNamespaces(searchCriteria); + const { height: currentHeight } = await ChainService.getChainInfo(); + + return { + ...namespaceInfos, + data: namespaceInfos.data.map(namespace => { + const { isExpired, expiredInSecond, expiredInBlock } = helper.calculateNamespaceExpiration(currentHeight, namespace.endHeight); + + return { + ...namespace, + expirationDuration: helper.isNativeNamespace(namespace.namespaceName) ? Constants.Message.INFINITY : helper.convertTimeFromNowInSec(expiredInSecond), + isExpired: isExpired, + approximateExpired: helper.isNativeNamespace(namespace.namespaceName) ? Constants.Message.INFINITY : helper.convertSecondToDate(expiredInSecond), + expiredInBlock: expiredInBlock + }; + }) + }; + } + + /** + * Gets namespace metadata list dataset into Vue component + * @param pageInfo - object for page info such as pageNumber, pageSize + * @param filterVaule - object for search criteria + * @param hexOrNamespace - hex value or namespace name + * @returns formatted mamespace Metadata list + */ + static getNamespaceMetadataList = async (pageInfo, filterVaule, hexOrNamespace) => { + const namespaceId = await helper.hexOrNamespaceToId(hexOrNamespace, 'namespace'); + + const { pageNumber, pageSize } = pageInfo; + + const searchCriteria = { + pageNumber, + pageSize, + order: Order.Desc, + targetId: namespaceId, + ...filterVaule + }; + const namespaceMetadatas = await MetadataService.searchMetadatas(searchCriteria); + + return namespaceMetadatas; + } + + /** + * Gets namespace balance transfer receipt list dataset into Vue component + * @param pageInfo - object for page info such as pageNumber, pageSize + * @param hexOrNamespace - hex value or namespace name + * @returns formatted balance transfer receipt list + */ + static getNamespaceBalanceTransferReceipt = async (pageInfo, hexOrNamespace) => { + const namespaceId = await helper.hexOrNamespaceToId(hexOrNamespace, 'namespace'); + + const { ownerAddress, startHeight } = await this.getNamespace(namespaceId); + + const { pageNumber, pageSize } = pageInfo; + + const searchCriteria = { + pageNumber, + pageSize, + order: Order.Desc, + height: UInt64.fromUint(startHeight), + receiptTypes: [ReceiptType.Namespace_Rental_Fee], + senderAddress: Address.createFromRawAddress(ownerAddress) + }; + + const balanceTransferReceipt = await ReceiptService.searchReceipts(searchCriteria); + + const formattedReceipt = await ReceiptService.createReceiptTransactionStatement(balanceTransferReceipt.data.balanceTransferStatement); + + return { + ...balanceTransferReceipt, + data: formattedReceipt.filter(receipt => + receipt.senderAddress === ownerAddress && + receipt.type === ReceiptType.Namespace_Rental_Fee) + }; + } + + /** + * Gets namespace artifact expiry receipt list dataset into Vue component + * @param pageInfo - object for page info such as pageNumber, pageSize + * @param hexOrNamespace - hex value or namespace name + * @returns formatted artifact expiry receipt list + */ + static getNamespaceArtifactExpiryReceipt = async (pageInfo, hexOrNamespace) => { + const namespaceId = await helper.hexOrNamespaceToId(hexOrNamespace, 'namespace'); + + const { endHeight } = await this.getNamespace(namespaceId); + + const { pageNumber, pageSize } = pageInfo; + + // Todo: Should filter with with ArtifactId rather than height. + // Bug: https://github.com/nemtech/catapult-rest/issues/517 + const searchCriteria = { + pageNumber, + pageSize, + order: Order.Desc, + height: UInt64.fromUint(endHeight), + receiptTypes: [ReceiptType.Namespace_Expired, ReceiptType.Namespace_Deleted] + }; + + const artifactExpiryReceipt = await ReceiptService.searchReceipts(searchCriteria); + const formattedReceipt = await ReceiptService.createReceiptTransactionStatement(artifactExpiryReceipt.data.artifactExpiryStatement); + + return { + ...artifactExpiryReceipt, + data: formattedReceipt.filter(receipt => receipt.type === ReceiptType.Namespace_Expired || receipt.type === ReceiptType.Namespace_Deleted) + }; + } + + /** + * Convert NamespaceInfo[] to Namespace[] + * @param NamespaceInfo[] - array of NamespaceInfo + * @returns Namespace[] + */ + static toNamespaces = async (namespaceInfos) => { + const namespaceIdsList = namespaceInfos.map(namespaceInfo => namespaceInfo.id); + const namespaceNames = await this.getNamespacesNames(namespaceIdsList); + + return namespaceInfos.map(namespaceInfo => ({ + ...namespaceInfo, + id: namespaceInfo.id, + name: this.extractFullNamespace(namespaceInfo, namespaceNames) + })); + } + + /** + * Gets native namespaces name in from nemesis transactions. + * @returns Namespace[] + */ + static getNativeNamespaces = async () => { + const namespace = globalConfig.networkConfig.namespaceName; + const rootNamespace = namespace.split('.')[0]; + const namespaceids = [rootNamespace, namespace].map(namespace => new NamespaceId(namespace)); + + const namespaceInfos = await Promise.all(namespaceids.map(async namespaceid => { + return (NamespaceService.getNamespace(namespaceid)); + })); + + return namespaceInfos; + } + + /** + * Format namespaceName to readable object + * @param namespaceNameDTO + * @returns readable namespaceNameDTO + */ + static formatNamespaceName = namespaceName => ({ + ...namespaceName, + namespaceId: namespaceName.namespaceId.toHex(), + parentId: namespaceName?.parentId ? namespaceName.parentId.toHex() : Constants.Message.UNAVAILABLE + }) + + /** + * Format alias to readable object + * @param Alias + * @returns readable Alias object + */ + static formatAlias = alias => { + switch (alias.type) { + case 0: + return { + ...alias, + aliasType: Constants.Message.UNAVAILABLE + }; + case 1: // Mosaic id alias + return { + ...alias, + aliasType: Constants.Message.MOSAIC, + alias: alias?.mosaicId.toHex() + }; + case 2: // Address alias + return { + ...alias, + aliasType: Constants.Message.ADDRESS, + alias: alias?.address.plain() + }; + } + } + + /** + * Format namespace to readable object + * @param namespace - namespace DTO + * @returns readable namespaceDTO + */ + static formatNamespace = namespace => ({ + ...namespace, + ownerAddress: namespace.ownerAddress.plain(), + namespaceName: namespace.name, + namespaceId: namespace.id.toHex(), + registrationType: Constants.NamespaceRegistrationType[namespace.registrationType], + startHeight: Number(namespace.startHeight.toString()), + endHeight: helper.isNativeNamespace(namespace.name) + ? Constants.Message.INFINITY + : Number(namespace.endHeight.toString()), + active: namespace.active ? Constants.Message.ACTIVE : Constants.Message.INACTIVE, + ...this.formatAlias(namespace.alias), + parentName: namespace.registrationType !== 0 ? namespace.name.split('.')[0] : '', + levels: namespace.levels + }) + + /** + * Format mosaic name to readable object + * @param mosaicName - mosaicName DTO + * @returns readable mosaicName DTO + */ + static formatMosaicName = mosaicName => ({ + ...mosaicName, + mosaicId: mosaicName.mosaicId.toHex() + }) + + /** + * Format account name to readable object + * @param accountName - accountName DTO + * @returns readable accountName DTO + */ + static formatAccountName = accountName => ({ + ...accountName, + address: accountName.address.plain(), + names: accountName.names.map(name => this.formatNamespaceName(name)) + }) + + /** + * Extract full name for Namespace + * @param namespaceInfo - namespaceInfo DTO + * @param namespaceNames - NamespaceName[] + * @returns full name + */ + static extractFullNamespace = (namespaceInfo, namespaceNames) => { + return namespaceInfo.levels.map((level) => { + const namespaceName = namespaceNames.find((name) => name.namespaceId === level.toHex()); + + if (namespaceName === undefined) throw new Error('Not found'); + return namespaceName; + }) + .map((namespaceName) => namespaceName.name) + .join('.'); + } +} + +export default NamespaceService; diff --git a/src/infrastructure/NetworkService.js b/src/infrastructure/NetworkService.js new file mode 100644 index 0000000..e7e18ef --- /dev/null +++ b/src/infrastructure/NetworkService.js @@ -0,0 +1,77 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import http from './http'; + +class NetworkService { + /** + * Get estimated effective rental fees for namespaces and mosaics + * @returns rental fees information + */ + static getRentalFees = async () => { + const rentalFees = await http.createRepositoryFactory.createNetworkRepository() + .getRentalFees() + .toPromise(); + + return this.formatRentalFees(rentalFees); + } + + /** + * Get average, median, highest and lower fee multiplier over the last "numBlocksTransactionFeeStats". + * @returns transaction fees information + */ + static getTransactionFees = async () => { + const transactionFees = await http.createRepositoryFactory.createNetworkRepository() + .getTransactionFees() + .toPromise(); + + return transactionFees; + } + + /** + * Formatted Transaction Fees multipler into Vue Component + * @returns Transaction Fees Info for Vue Component + */ + static getTransactionFeesInfo = async () => { + const transactionFees = await this.getTransactionFees(); + + return transactionFees; + } + + /** + * Formatted Rental Fees into Vue Component + * @returns Rental Fees Info for Vue Component + */ + static getRentalFeesInfo = async () => { + const rentalFees = await this.getRentalFees(); + + return rentalFees; + } + + /** + * Format RentalfeesDTO to readable object + * @returns readable RentalfeesDTO object + */ + static formatRentalFees = rentalFees => ({ + effectiveRootNamespaceRentalFeePerBlock: rentalFees.effectiveRootNamespaceRentalFeePerBlock / Math.pow(10, http.networkCurrency.divisibility), + effectiveChildNamespaceRentalFee: rentalFees.effectiveChildNamespaceRentalFee / Math.pow(10, http.networkCurrency.divisibility), + effectiveMosaicRentalFee: rentalFees.effectiveMosaicRentalFee / Math.pow(10, http.networkCurrency.divisibility) + }) +} + +export default NetworkService; diff --git a/src/infrastructure/NodeService.js b/src/infrastructure/NodeService.js new file mode 100644 index 0000000..0bd5d26 --- /dev/null +++ b/src/infrastructure/NodeService.js @@ -0,0 +1,226 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import http from './http'; +import Constants from '../config/constants'; +import * as symbol from 'symbol-sdk'; +import Axios from 'axios'; +import moment from 'moment'; +import helper from '../helper'; +import globalConfig from '../config/globalConfig'; + +class NodeService { + /** + * Get Storage Info from symbol SDK + * @returns StorageInfo + */ + static getStorageInfo = () => { + return http.createRepositoryFactory.createNodeRepository() + .getStorageInfo() + .toPromise(); + } + + /** + * Get Node Info from symbol SDK + * @returns NodeInfo + */ + static getCurrentNodeInfo = () => { + return http.createRepositoryFactory.createNodeRepository() + .getNodeInfo() + .toPromise(); + } + + /** + * Get Server Info from symbol SDK + * @returns ServerInfo + */ + static getServerInfo = () => { + return http.node.getServerInfo().toPromise(); + } + + /** + * Get Node Peers from symbol SDK + * @returns NodeInfo[] + */ + static getNodePeers = async () => { + let nodePeers = []; + + nodePeers = await http.createRepositoryFactory.createNodeRepository() + .getNodePeers() + .toPromise(); + + const formattedNodePeers = nodePeers.map(nodeInfo => this.formatNodeInfo(nodeInfo)).sort((a, b) => a.friendlyName.localeCompare(b.friendlyName)); + + return formattedNodePeers; + } + + /** + * Get node health status by endpoint. + * @param string api-node endpoint such as http:localhost:3000 + * @returns boolean + */ + static isNodeActive = async (currentUrl) => { + let status = true; + + try { + await new symbol.NodeHttp(currentUrl).getNodeHealth() + .toPromise(); + } + catch (e) { + status = false; + } + + return status; + } + + /** + * Format NodoInfoDTO to readable NodoInfo object + * @param NodoInfoDTO + * @returns Object readable NodeInfo object + */ + static formatNodeInfo = nodeInfo => ({ + ...nodeInfo, + nodePublicKey: nodeInfo.publicKey, + address: symbol.Address.createFromPublicKey(nodeInfo.publicKey, nodeInfo.networkIdentifier).plain(), + rolesRaw: nodeInfo.roles, + roles: Constants.RoleType[nodeInfo.roles], + network: Constants.NetworkType[nodeInfo.networkIdentifier], + version: helper.formatNodeVersion(nodeInfo.version), + apiEndpoint: + nodeInfo.roles === 2 || + nodeInfo.roles === 3 || + nodeInfo.roles === 6 || + nodeInfo.roles === 7 + ? 'http://' + nodeInfo.host + ':' + (globalConfig.apiNodePort || 3000) + : Constants.Message.UNAVAILABLE + }) + + /** + * Format Node Peers dataset into Vue Component + * @returns Node peers object for Vue component + */ + static getNodePeerList = async (filter) => { + let nodePeers = await this.getNodePeers(); + + return { + data: + nodePeers + .filter(el => !filter.rolesRaw || el.rolesRaw === filter.rolesRaw) + .filter( + el => !filter.rewardProgram || + (el.rewardPrograms?.length && filter.rewardProgram === 'all') || + (el.rewardPrograms && el.rewardPrograms[0]?.name === filter.rewardProgram) + ) + .map((el, index) => { + let node = { + index: index + 1, + ...el + }; + + if (el.apiStatus) { + node['chainInfo'] = { + chainHeight: el.apiStatus.chainHeight, + finalizationHeight: el.apiStatus.finalizationHeight, + lastStatusCheck: el.apiStatus.lastStatusCheck + }; + } + else + node['chainInfo'] = {}; + + if (node.hostDetail) { + node = { ...node, ...node.hostDetail }; + delete node.hostDetail; + } + + return node; + }) + }; + } + + static getNodeInfo = async (publicKey) => { + let node = {}; + const nodes = (await Axios.get(http.nodeUrl + '/node/peers')).data; + + node = nodes.find(n => n.publicKey === publicKey); + const formattedNode = this.formatNodeInfo(node); + + if (formattedNode.rolesRaw === 2 || + formattedNode.rolesRaw === 3 || + formattedNode.rolesRaw === 6 || + formattedNode.rolesRaw === 7 + ) { + const status = await this.getApiNodeStatus(formattedNode.apiEndpoint); + + formattedNode.apiStatus = status; + + const chainInfo = await this.getNodeChainInfo(formattedNode.apiEndpoint); + + formattedNode.chainInfo = chainInfo; + } + if (formattedNode?.peerStatus) + formattedNode.peerStatus.lastStatusCheck = moment(formattedNode.peerStatus.lastStatusCheck).format('YYYY-MM-DD HH:mm:ss'); + return formattedNode; + } + + static getApiNodeStatus = async (nodeUrl) => { + const status = { + connectionStatus: false, + databaseStatus: Constants.Message.UNAVAILABLE, + apiNodeStatus: Constants.Message.UNAVAILABLE, + lastStatusCheck: moment().format('YYYY-MM-DD HH:mm:ss') + }; + + try { + const nodeStatus = (await Axios.get(nodeUrl + '/node/health')).data.status; + + status.connectionStatus = true; + status.apiNodeStatus = nodeStatus.apiNode === 'up'; + status.databaseStatus = nodeStatus.db === 'up'; + status.lastStatusCheck = moment().format('YYYY-MM-DD HH:mm:ss'); + } + catch (e) { + console.error('Failed to get node status', e); + }; + + return status; + } + + static getNodeChainInfo = async (nodeUrl) => { + let chainInfo = {}; + + try { + chainInfo = {}; + const nodeChainInfo = (await Axios.get(nodeUrl + '/chain/info')).data; + + chainInfo.height = nodeChainInfo.height; + chainInfo.scoreHigh = nodeChainInfo.scoreHigh; + chainInfo.scoreLow = nodeChainInfo.scoreLow; + chainInfo.finalizationEpoch = nodeChainInfo.latestFinalizedBlock.finalizationEpoch; + chainInfo.finalizationPoint = nodeChainInfo.latestFinalizedBlock.finalizationPoint; + chainInfo.finalizedHeight = nodeChainInfo.latestFinalizedBlock.height; + chainInfo.finalizedHash = nodeChainInfo.latestFinalizedBlock.hash; + } + catch (e) { + console.error('Failed to get node chain info', e); + }; + + return chainInfo; + } +} + +export default NodeService; diff --git a/src/infrastructure/ReceiptService.js b/src/infrastructure/ReceiptService.js new file mode 100644 index 0000000..5e78d4a --- /dev/null +++ b/src/infrastructure/ReceiptService.js @@ -0,0 +1,253 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import http from './http'; +import { ReceiptType, ResolutionType } from 'symbol-sdk'; +import Constants from '../config/constants'; +import { take, toArray } from 'rxjs/operators'; +import { + CreateReceiptTransaction +} from '../infrastructure'; + +class ReceiptService { + /** + * Gets a Receipts from searchCriteria + * @param transactionStatementSearchCriteria Object of Block Search Criteria + * @returns formatted Receipts data with pagination info + */ + static searchReceipts = async (transactionStatementSearchCriteria) => { + const searchReceipts = await http.createRepositoryFactory.createReceiptRepository() + .searchReceipts(transactionStatementSearchCriteria) + .toPromise(); + + return { + ...searchReceipts, + data: this.transactionStatementBuilder(searchReceipts.data) + }; + } + + /** + * Gets a Address Resolution from searchCriteria + * @param resolutionStatementSearchCriteria Object of Block Search Criteria + * @returns formatted address resolution data with pagination info + */ + static searchAddressResolutionStatements = async (resolutionStatementSearchCriteria) => { + const searchAddressResolutionStatements = await http.createRepositoryFactory.createReceiptRepository() + .searchAddressResolutionStatements(resolutionStatementSearchCriteria) + .toPromise(); + + return { + ...searchAddressResolutionStatements, + data: this.formatResolutionStatement(searchAddressResolutionStatements.data) + }; + } + + /** + * Gets a Mosaic Resolution from searchCriteria + * @param resolutionStatementSearchCriteria Object of Block Search Criteria + * @returns formatted mosaic resolution data with pagination info + */ + static searchMosaicResolutionStatements = async (resolutionStatementSearchCriteria) => { + const searchMosaicResolutionStatements = await http.createRepositoryFactory.createReceiptRepository() + .searchMosaicResolutionStatements(resolutionStatementSearchCriteria) + .toPromise(); + + return { + ...searchMosaicResolutionStatements, + data: this.formatResolutionStatement(searchMosaicResolutionStatements.data) + }; + } + + /** + * Gets a receipts from streamer + * @param searchCriteria - Object Search Criteria: + * @returns formatted statementReceipt[] + */ + static streamerReceipts = async (searchCriteria) => { + const streamerReceipts = await http.transactionStatementPaginationStreamer() + .search(searchCriteria) + .pipe(take(10), toArray()) + .toPromise(); + + return this.transactionStatementBuilder(streamerReceipts); + } + + /** + * Gets a Address Resolution statement from streamer + * @param searchCriteria - Object Search Criteria: + * @returns formatted statementAddressResolution[] + */ + static streamerAddressResolution = async (searchCriteria) => { + const streamerAddressResolution = await http.addressResolutionStatementPaginationStreamer() + .search(searchCriteria) + .pipe(take(10), toArray()) + .toPromise(); + + return this.formatResolutionStatement(streamerAddressResolution); + } + + /** + * Gets a Mosaic Resolution statement from streamer + * @param searchCriteria - Object Search Criteria: + * @returns formatted statementMosaicResolution[] + */ + static streamerMosaicResolution = async (searchCriteria) => { + const streamerMosaicResolution = await http.mosaicResolutionStatementPaginationStreamer() + .search(searchCriteria) + .pipe(take(10), toArray()) + .toPromise(); + + return this.formatResolutionStatement(streamerMosaicResolution); + } + + static createReceiptTransactionStatement = async (transactionStatement) => { + switch (transactionStatement.receiptTransactionStatementType) { + case Constants.ReceiptTransactionStatamentType.BalanceChangeReceipt: + return CreateReceiptTransaction.balanceChangeReceipt(transactionStatement.data); + case Constants.ReceiptTransactionStatamentType.BalanceTransferReceipt: + return CreateReceiptTransaction.balanceTransferReceipt(transactionStatement.data); + case Constants.ReceiptTransactionStatamentType.ArtifactExpiryReceipt: + return CreateReceiptTransaction.artifactExpiryReceipt(transactionStatement.data); + case Constants.ReceiptTransactionStatamentType.InflationReceipt: + return CreateReceiptTransaction.inflationReceipt(transactionStatement.data); + default: + throw new Error('Unimplemented receipt transaction statement with type ' + transactionStatement.receiptTransactionStatementType); + } + } + + /** + * Format Receipt Statements + * @param TransactionStatementDTO[] + * @returns collection of receipts + * + */ + static groupTransactionStatement = transactionStatement => { + let balanceChangeReceipt = []; + + let balanceTransferReceipt = []; + + let inflationReceipt = []; + + let artifactExpiryReceipt = []; + + transactionStatement.forEach(statement => { + statement.receipts.forEach(receipt => { + switch (receipt.type) { + case ReceiptType.Harvest_Fee: + case ReceiptType.LockHash_Created: + case ReceiptType.LockHash_Completed: + case ReceiptType.LockHash_Expired: + case ReceiptType.LockSecret_Created: + case ReceiptType.LockSecret_Completed: + case ReceiptType.LockSecret_Expired: + balanceChangeReceipt.push({ + ...receipt, + height: statement.height + }); + break; + case ReceiptType.Mosaic_Rental_Fee: + case ReceiptType.Namespace_Rental_Fee: + balanceTransferReceipt.push({ + ...receipt, + height: statement.height + }); + break; + case ReceiptType.Mosaic_Expired: + case ReceiptType.Namespace_Expired: + case ReceiptType.Namespace_Deleted: + artifactExpiryReceipt.push({ + ...receipt, + height: statement.height + }); + break; + case ReceiptType.Inflation: + inflationReceipt.push({ + ...receipt, + height: statement.height + }); + break; + } + }); + }); + + return { + balanceChangeReceipt, + balanceTransferReceipt, + inflationReceipt, + artifactExpiryReceipt + }; + } + + static transactionStatementBuilder(transactionStatement) { + const { + balanceChangeReceipt, + balanceTransferReceipt, + inflationReceipt, + artifactExpiryReceipt + } = this.groupTransactionStatement(transactionStatement); + + return { + balanceChangeStatement: { + receiptTransactionStatementType: Constants.ReceiptTransactionStatamentType.BalanceChangeReceipt, + data: balanceChangeReceipt + }, + balanceTransferStatement: { + receiptTransactionStatementType: Constants.ReceiptTransactionStatamentType.BalanceTransferReceipt, + data: balanceTransferReceipt + }, + inflationStatement: { + receiptTransactionStatementType: Constants.ReceiptTransactionStatamentType.InflationReceipt, + data: inflationReceipt + }, + artifactExpiryStatement: { + receiptTransactionStatementType: Constants.ReceiptTransactionStatamentType.ArtifactExpiryReceipt, + data: artifactExpiryReceipt + } + }; + } + + /** + * Format Resolution Statements + * @param ResolutionStatementDTO + * @returns Address Resolution | Mosaic Resolution + */ + static formatResolutionStatement = resolutionStatement => { + return resolutionStatement.map(statement => { + if (statement.resolutionType === ResolutionType.Address) { + return { + ...statement, + height: statement.height.compact(), + resolutionType: Constants.ResolutionType[statement.resolutionType], + unresolved: statement.unresolved.toHex(), + addressResolutionEntries: statement.resolutionEntries.map(resolutionEntry => resolutionEntry.resolved.address) + }; + } + + if (statement.resolutionType === ResolutionType.Mosaic) { + return { + ...statement, + resolutionType: Constants.ResolutionType[statement.resolutionType], + unresolved: statement.unresolved.toHex(), + mosaicResolutionEntries: statement.resolutionEntries.map(resolutionEntry => resolutionEntry.resolved.toHex()) + }; + } + }); + } +} + +export default ReceiptService; diff --git a/src/infrastructure/RestrictionService.js b/src/infrastructure/RestrictionService.js new file mode 100644 index 0000000..d171d2c --- /dev/null +++ b/src/infrastructure/RestrictionService.js @@ -0,0 +1,202 @@ +import http from './http'; +import { + Address, + AddressRestrictionFlag, + MosaicRestrictionFlag, + OperationRestrictionFlag, + MosaicAddressRestriction, + MosaicGlobalRestriction, + MosaicRestrictionEntryType, + Order +} from 'symbol-sdk'; +import helper from '../helper'; +import Constants from '../config/constants'; + +class RestrictionService { + /** + * Get Account Restriction from symbol SDK + * @param address - Account address to be created from PublicKey or RawAddress + * @returns AccountRestrictions[] + */ + static getAccountRestrictions = async address => { + let accountRestrictions; + + try { + accountRestrictions = await http.createRepositoryFactory.createRestrictionAccountRepository() + .getAccountRestrictions(Address.createFromRawAddress(address)) + .toPromise(); + } + catch (e) { + // To Catach statusCode 404 if Account restrictions are not available. + throw Error('Account restrictions are not available.'); + } + + const formattedAccountRestrictions = accountRestrictions.map(accountRestriction => this.formatAccountRestriction(accountRestriction)); + + return formattedAccountRestrictions; + } + + /** + * Gets a mosaic restrictions list from searchCriteria + * @param restrictionMosaicSearchCriteria Object of Search Criteria + * @returns formatted namespace data with pagination info + */ + static searchMosaicRestrictions = async restrictionMosaicSearchCriteria => { + const searchMosaicRestrictions = await http.createRepositoryFactory.createRestrictionMosaicRepository() + .search(restrictionMosaicSearchCriteria) + .toPromise(); + + return { + ...searchMosaicRestrictions, + data: searchMosaicRestrictions.data.map(mosaicRestriction => { + if (mosaicRestriction instanceof MosaicAddressRestriction) + return this.formatMosaicAddressRestriction(mosaicRestriction); + + if (mosaicRestriction instanceof MosaicGlobalRestriction) + return this.formatMosaicGlobalRestriction(mosaicRestriction); + }) + }; + } + + /** + * Format AccountRestriction to readable object + * @param AccountRestrictionDTO + * @returns Object readable AccountRestriction object + */ + static formatAccountRestriction = accountRestriction => { + switch (accountRestriction.restrictionFlags) { + case AddressRestrictionFlag.AllowIncomingAddress: + case AddressRestrictionFlag.BlockIncomingAddress: + case AddressRestrictionFlag.AllowOutgoingAddress: + case AddressRestrictionFlag.BlockOutgoingAddress: + return { + restrictionType: Constants.AddressRestrictionFlag[accountRestriction.restrictionFlags], + restrictionAddressValues: accountRestriction.values.map(value => value.address) + }; + case MosaicRestrictionFlag.AllowMosaic: + case MosaicRestrictionFlag.BlockMosaic: + return { + restrictionType: Constants.MosaicRestrictionFlag[accountRestriction.restrictionFlags], + restrictionMosaicValues: accountRestriction.values.map(value => value.id.toHex()) + }; + case OperationRestrictionFlag.AllowOutgoingTransactionType: + case OperationRestrictionFlag.BlockOutgoingTransactionType: + return { + restrictionType: Constants.OperationRestrictionFlag[accountRestriction.restrictionFlags], + restrictionTransactionValues: accountRestriction.values.map(value => Constants.TransactionType[value]) + }; + } + } + + /** + * Format MosaicGlobalRestrictions to readable object + * @param MosaicGlobalRestrictionDTO + * @returns Object readable MosaicGlobalRestrictions object + */ + static formatMosaicGlobalRestriction = mosaicRestriction => { + let mosaicGlobalRestrictionItem = []; + + // Convert Map to Array + mosaicRestriction.restrictions.forEach((value, key) => { + mosaicGlobalRestrictionItem.push({ key, ...value }); + return mosaicGlobalRestrictionItem; + }); + + return { + ...mosaicRestriction, + entryType: Constants.MosaicRestrictionEntryType[mosaicRestriction.entryType], + mosaicId: mosaicRestriction.mosaicId.toHex(), + restrictions: mosaicGlobalRestrictionItem.map(item => ({ + restrictionKey: item.key, + restrictionType: Constants.MosaicRestrictionType[item.restrictionType], + restrictionValue: item.restrictionValue, + referenceMosaicId: item.referenceMosaicId.toHex() === '0000000000000000' ? mosaicRestriction.mosaicId.toHex() : item.referenceMosaicId.toHex() + })) + }; + } + + /** + * Format MosaicAddressRestriction to readable object + * @param addressRestrictionDTO + * @returns Custom address restriction object + */ + static formatMosaicAddressRestriction = addressRestriction => { + let mosaicAddressRestrictionItem = []; + + // Convert Map to Array + addressRestriction.restrictions.forEach((value, key) => { + mosaicAddressRestrictionItem.push({ key, value }); + }); + + return { + ...addressRestriction, + entryType: Constants.MosaicRestrictionEntryType[addressRestriction.entryType], + mosaicId: addressRestriction.mosaicId.toHex(), + targetAddress: addressRestriction.targetAddress.address, + restrictions: mosaicAddressRestrictionItem.map(item => ({ + restrictionKey: item.key, + restrictionValue: item.value + })) + }; + } + + /** + * Format Account Restriction list dataset into Vue component + * @param address - Address in string format. + * @returns Account Restriction list + */ + static getAccountRestrictionList = async (address) => { + const accountRestrictions = await this.getAccountRestrictions(address); + + return accountRestrictions; + } + + /** + * Gets Mosaic Restriction list dataset into Vue component + * @param pageInfo - object for page info such as pageNumber, pageSize + * @param filterVaule - object for search criteria eg. mosaic global or mosaic address + * @param hexOrNamespace - hex value or namespace name + * @returns formatted mosaic restriction list + */ + static getMosaicRestrictionList = async (pageInfo, filterVaule, hexOrNamespace) => { + const mosaicId = await helper.hexOrNamespaceToId(hexOrNamespace, 'mosaic'); + + const { pageNumber, pageSize } = pageInfo; + + const searchCriteria = { + pageNumber, + pageSize, + order: Order.Desc, + mosaicId: mosaicId, + ...filterVaule + }; + + const mosaicRestrictions = await this.searchMosaicRestrictions(searchCriteria); + + return mosaicRestrictions; + } + + /** + * Gets Mosaic Address Restriction list dataset into Vue component + * @param pageInfo - object for page info such as pageNumber, pageSize + * @param address - account Address + * @returns formatted mosaic address restriction list + */ + static getMosaicAddressRestrictionList = async (pageInfo, address) => { + const { pageNumber, pageSize } = pageInfo; + + const searchCriteria = { + pageNumber, + pageSize, + order: Order.Desc, + entryType: MosaicRestrictionEntryType.ADDRESS, + targetAddress: Address.createFromRawAddress(address) + }; + + const addressRestrictions = await this.searchMosaicRestrictions(searchCriteria); + + return addressRestrictions; + } +} + +export default RestrictionService; diff --git a/src/infrastructure/StatisticService.js b/src/infrastructure/StatisticService.js new file mode 100644 index 0000000..5458719 --- /dev/null +++ b/src/infrastructure/StatisticService.js @@ -0,0 +1,176 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +class StatisticService { + /** + * Gets Block Time Difference dataset. + * The dataset in use for Chart. + * @param blocks - streamer blocks [] + * @param limit - number of the block. + * @param grouping - grouping block for calculation + * @returns block time difference dataset. + */ + static getBlockTimeDifferenceData = (blocks, grouping) => { + const heights = blocks.map(data => Number(data.height)); + + let timestamps = blocks.map(data => data.timestampRaw); + + for (let i = 0; i < timestamps.length - 1; ++i) + timestamps[i] -= timestamps[i + 1]; + + let averages = []; + + let sum = 0; + + for (let i = 0; i < grouping; ++i) + sum += timestamps[i]; + + for (let i = grouping; i < timestamps.length; ++i) { + averages.push(sum / grouping); + sum -= timestamps[i - grouping]; + sum += timestamps[i]; + } + averages.push(0); + + let timeDifferenceDataset = []; + + let averagesDataset = []; + + for (let i = 0; i < timestamps.length - 1; ++i) { + let height = heights[i]; + + let difference = timestamps[i] / 1000; + + let average = averages[i] / 1000; + + timeDifferenceDataset.push([height, difference.toFixed(2)]); + averagesDataset.push([height, average.toFixed(2) === 'NaN' ? null : average.toFixed(2)]); + } + + const sliceTimeDifferenceDataset = timeDifferenceDataset.slice(0, timeDifferenceDataset.length - grouping); + const sliceAveragesDataset = averagesDataset.slice(0, averagesDataset.length - grouping); + + let dataset = [ + { + name: 'Time Difference (in seconds)', + data: sliceTimeDifferenceDataset + }, + { + name: `Average Time Difference (per ${grouping} blocks)`, + data: sliceAveragesDataset + } + ]; + + return { + limit: sliceTimeDifferenceDataset.length + 1, + grouping: grouping, + name: `Block time differences in last ${sliceTimeDifferenceDataset.length + 1} blocks`, + data: dataset + }; + } + + /** + * Gets Transaction data per block dataset + * The dataset in use for Chart. + * @param blocks - streamer blocks [] + * @param limit - number of the block. + * @param grouping - grouping block for calculation + * @returns transaction data per block dataset. + */ + static getTransactionPerBlockData = (blocks, grouping) => { + const heights = blocks.map(data => Number(data.height)); + + let numTransactions = blocks.map(data => data.transactions); + + let averages = []; + + let sum = 0; + + for (let i = 0; i < grouping; ++i) + sum += numTransactions[i]; + + for (let i = grouping; i < numTransactions.length; ++i) { + averages.push(sum / grouping); + sum -= numTransactions[i - grouping]; + sum += numTransactions[i]; + } + averages.push(0); + + let numTransactionsPerBlockDataset = []; + + let averagesDataset = []; + + for (let i = 0; i < numTransactions.length - 1; ++i) { + numTransactionsPerBlockDataset.push([heights[i], numTransactions[i]]); + averagesDataset.push([heights[i], Math.floor(averages[i])]); + } + + const sliceNumTransactionsPerBlockDataset = numTransactionsPerBlockDataset.slice(0, numTransactionsPerBlockDataset.length - grouping); + const sliceAveragesDataset = averagesDataset.slice(0, averagesDataset.length - grouping); + + let dataset = [ + { + name: 'Number of transactions', + data: sliceNumTransactionsPerBlockDataset + }, + { + name: `Average number of transaction (per ${grouping} blocks)`, + data: sliceAveragesDataset + } + ]; + + return { + limit: sliceNumTransactionsPerBlockDataset.length + 1, + grouping: grouping, + name: `Transaction per block in last ${sliceNumTransactionsPerBlockDataset.length + 1} blocks`, + data: dataset + }; + } + + static formatChartData = (data, includeKeys) => { + const aggreagatedData = {}; + const isKeyIncluded = key => !includeKeys || includeKeys.includes(key); + + let chartData = []; + + data.forEach((doc) => { + Object.keys(doc.values).forEach((name) => { + if (!aggreagatedData[name] && isKeyIncluded(name)) { + aggreagatedData[name] = { + data: [] + }; + } + + if (isKeyIncluded(name)) { + aggreagatedData[name].data.push({ + x: doc.date, + y: doc.values[name] + }); + } + }); + }); + + chartData = Object.keys(aggreagatedData).map(name => ({ + name, + data: aggreagatedData[name].data + })); + + return chartData; + } +} + +export default StatisticService; diff --git a/src/infrastructure/TransactionService.js b/src/infrastructure/TransactionService.js new file mode 100644 index 0000000..8c903a6 --- /dev/null +++ b/src/infrastructure/TransactionService.js @@ -0,0 +1,707 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { + TransactionType, + Address, + TransactionInfo, + AggregateTransactionInfo, + TransactionGroup, + Order, + UInt64, + Mosaic +} from 'symbol-sdk'; +import Constants from '../config/constants'; +import http from './http'; +import helper from '../helper'; +import { + BlockService, + LockService, + CreateTransaction +} from '../infrastructure'; +import { toArray } from 'rxjs/operators'; + +class TransactionService { + /** + * Gets a transaction status for a transaction hash + * @param hash Transaction hash + * @returns TransactionStatus object + */ + static getTransactionStatus = (hash) => { + return new Promise((resolve, reject) => { + let transactionStatus = { + message: null, + detail: {} + }; + + http.createRepositoryFactory.createTransactionStatusRepository() + .getTransactionStatus(hash) + .toPromise() + .then(response => { + transactionStatus.message = response.group; + transactionStatus.detail = response; + resolve(transactionStatus); + }) + .catch(error => { + // handle REST error https://github.com/nemtech/catapult-rest/pull/499 + // Todo: Remove if statement, after REST error is fix. + if (error.message.search('statusCode') === -1) { + transactionStatus.message = error.message; + transactionStatus.detail = error; + resolve(transactionStatus); + } + resolve(transactionStatus); + }); + }); + } + + /** + * Gets a transaction from hash + * @param hash Transaction hash + * @returns Transaction + */ + static getTransaction = async (hash, transactionGroup) => { + const transaction = await http.createRepositoryFactory.createTransactionRepository() + .getTransaction(hash, transactionGroup) + .toPromise(); + + return transaction; + } + + /** + * Gets a transaction from searchCriteria + * @param transactionSearchCriteria Object of Search Criteria + * @returns transaction data with pagination info + */ + static searchTransactions = async (transactionSearchCriteria) => { + const searchTransactions = await http.createRepositoryFactory.createTransactionRepository() + .search(transactionSearchCriteria) + .toPromise(); + + return searchTransactions; + } + + /** + * Gets a transactions from streamer + * @param transactionSearchCriteria Object of Search Criteria + * @returns Transaction[] + */ + static streamerTransactions = async (transactionSearchCriteria) => { + const streamerTransactions = await http.transactionPaginationStreamer + .search(transactionSearchCriteria).pipe(toArray()) + .toPromise(); + + return streamerTransactions; + } + + /** + * Gets a transaction's effective paid fee + * @param hash Transaction hash + * @returns formatted effectiveFee string + */ + static getTransactionEffectiveFee = async (hash) => { + let effectiveFee = await http.createRepositoryFactory.createTransactionRepository() + .getTransactionEffectiveFee(hash) + .toPromise(); + + return helper.toNetworkCurrency(effectiveFee); + } + + /** + * Gets Formatted Transaction Info for Vue component + * @param hash Transaction hash + * @returns Custom Transaction object + */ + static getTransactionInfo = async (hash, transactionGroup = TransactionGroup.Confirmed) => { + const [transaction, transactionStatus] = await Promise.all([ + this.getTransaction(hash, transactionGroup).catch((error) => { + if (error) + return false; + }), + this.getTransactionStatus(hash) + ]); + + if (!transaction) { + const transactionErrorInfo = { + transactionHash: transactionStatus.detail.hash, + status: transactionStatus.detail.code, + confirm: transactionStatus.message + }; + + return transactionErrorInfo; + } + + const [{ timestamp }, effectiveFee] = await Promise.all([ + BlockService.getBlockInfo(UInt64.fromUint(transaction.transactionInfo.height)), + this.getTransactionEffectiveFee(hash) + ]); + + const formattedTransaction = await this.createTransactionFromSDK(transaction); + + const transactionInfo = { + ...formattedTransaction, + blockHeight: formattedTransaction.transactionInfo.height, + transactionHash: formattedTransaction.transactionInfo.hash, + effectiveFee, + timestamp, + status: transactionStatus.detail.code, + confirm: transactionStatus.message + }; + + return transactionInfo; + } + + /** + * Gets Formatted Hash Lock Info for Vue component + * @param hash Transaction hash + * @returns Custom Hash Lock object + */ + static getHashLockInfo = async (hash) => { + const hashInfo = await LockService.getHashLock(hash); + + const mosaics = [new Mosaic(hashInfo.mosaicId, hashInfo.amount)]; + + const mosaicsFieldObject = await helper.mosaicsFieldObjectBuilder(mosaics); + + return { + ...hashInfo, + mosaics: mosaicsFieldObject + }; + } + + /** + * Gets array of transactions + * @param pageInfo - object for page info such as pageNumber, pageSize + * @param filterVaule - object for search criteria + * @returns Formatted tranctionDTO[] + */ + static getTransactionList = async (pageInfo, filterVaule) => { + const { pageNumber, pageSize } = pageInfo; + const searchCriteria = { + pageNumber, + pageSize, + order: Order.Desc, + type: [], + group: TransactionGroup.Confirmed, + ...filterVaule + }; + + const searchTransactions = await this.searchTransactions(searchCriteria); + + const transactions = { + ...searchTransactions, + data: searchTransactions.data.map(transaction => this.formatTransaction(transaction)) + }; + + await Promise.all(transactions.data.map(async transaction => { + if (transaction?.recipientAddress) + return (transaction.transactionBody.recipient = await helper.resolvedAddress(transaction.recipientAddress)); + })); + + const blocksHeight = [...new Set(transactions.data.map(data => data.transactionInfo.height))]; + + const blockInfos = await Promise.all( + blocksHeight.map(height => BlockService.getBlockInfo(height)) + ); + + return { + ...transactions, + data: transactions.data.map(transaction => ({ + ...transaction, + timestamp: blockInfos.find(block => block.height === transaction.transactionInfo.height).timestamp, + height: transaction.transactionInfo.height, + transactionHash: transaction.transactionInfo.hash, + transactionType: transaction.type, + recipient: transaction.transactionBody?.recipient, + extendGraphicValue: this.extendGraphicValue(transaction) + })) + }; + } + + /** + * Format Transaction + * @param transactionDTO + * @returns readable transactionDTO object + */ + static formatTransaction = transaction => ({ + ...transaction, + deadline: helper.convertDeadlinetoDate(transaction.deadline.adjustedValue), + maxFee: helper.toNetworkCurrency(Number(transaction.maxFee.toString())), + signer: transaction.signer.address.plain(), + transactionBody: this.formatTransactionBody(transaction), + transactionInfo: this.formatTransactionInfo(transaction.transactionInfo) + }) + + /** + * Format Different Type of Transaction such as TransferTransaction + * @param TransactionDTO + * @returns readable TransactionBody object + */ + static formatTransactionBody = transactionBody => { + switch (transactionBody.type) { + case TransactionType.TRANSFER: + return { + transactionType: transactionBody.type, + recipient: transactionBody.recipientAddress, + mosaics: transactionBody.mosaics.map(mosaic => ({ + ...mosaic, + id: mosaic.id.toHex(), + amount: mosaic.amount.compact().toString() + })), + message: transactionBody.message + }; + + case TransactionType.NAMESPACE_REGISTRATION: + let parentIdHex = transactionBody.parentId ? transactionBody.parentId.toHex() : ''; + + let duration = transactionBody.duration ? transactionBody.duration.compact() : 0; + + return { + transactionType: transactionBody.type, + recipient: http.networkConfig.NamespaceRentalFeeSinkAddress.address, + registrationType: Constants.NamespaceRegistrationType[transactionBody.registrationType], + namespaceName: transactionBody.namespaceName, + namespaceId: transactionBody.namespaceId.toHex(), + parentId: parentIdHex === '' ? Constants.Message.UNAVAILABLE : parentIdHex, + duration: duration === 0 ? Constants.Message.UNLIMITED : duration + }; + + case TransactionType.ADDRESS_ALIAS: + return { + transactionType: transactionBody.type, + aliasAction: Constants.AliasAction[transactionBody.aliasAction], + namespaceId: transactionBody.namespaceId.toHex(), + namespaceName: transactionBody.namespaceId.fullName, + address: transactionBody.address.address + }; + + case TransactionType.MOSAIC_ALIAS: + return { + transactionType: transactionBody.type, + aliasAction: Constants.AliasAction[transactionBody.aliasAction], + namespaceId: transactionBody.namespaceId.id.toHex(), + namespaceName: transactionBody.namespaceId.fullName, + mosaicId: transactionBody.mosaicId.id.toHex() + }; + + case TransactionType.MOSAIC_DEFINITION: + return { + transactionType: transactionBody.type, + recipient: http.networkConfig.MosaicRentalSinkAddress.address, + mosaicId: transactionBody.mosaicId.toHex(), + divisibility: transactionBody.divisibility, + duration: transactionBody.duration.compact(), + nonce: transactionBody.nonce.toHex(), + supplyMutable: transactionBody.flags.supplyMutable, + transferable: transactionBody.flags.transferable, + restrictable: transactionBody.flags.restrictable + }; + + case TransactionType.MOSAIC_SUPPLY_CHANGE: + return { + transactionType: transactionBody.type, + mosaicId: transactionBody.mosaicId.id.toHex(), + action: Constants.MosaicSupplyChangeAction[transactionBody.action], + delta: transactionBody.delta.compact() + }; + + case TransactionType.MULTISIG_ACCOUNT_MODIFICATION: + return { + transactionType: transactionBody.type, + minApprovalDelta: transactionBody.minApprovalDelta, + minRemovalDelta: transactionBody.minRemovalDelta, + addressAdditions: transactionBody.addressAdditions.map(address => address.address), + addressDeletions: transactionBody.addressDeletions.map(address => address.address) + }; + + case TransactionType.AGGREGATE_COMPLETE: + return { + transactionType: transactionBody.type, + innerTransactions: transactionBody.innerTransactions, + cosignatures: transactionBody.cosignatures.map(cosigner => ({ + ...cosigner, + signer: cosigner.signer.address.address + })) + }; + + case TransactionType.AGGREGATE_BONDED: + return { + transactionType: transactionBody.type, + innerTransactions: transactionBody.innerTransactions, + cosignatures: transactionBody.cosignatures.map(cosigner => ({ + ...cosigner, + signer: cosigner.signer.address.address + })) + }; + + case TransactionType.HASH_LOCK: + return { + transactionType: transactionBody.type, + duration: transactionBody.duration.compact(), + mosaicId: transactionBody.mosaic.id.toHex(), + amount: helper.toNetworkCurrency(transactionBody.mosaic.amount), + hash: transactionBody.hash + }; + + case TransactionType.SECRET_LOCK: + return { + transactionType: transactionBody.type, + duration: transactionBody.duration.compact(), + mosaicId: transactionBody.mosaic.id.toHex(), + amount: helper.toNetworkCurrency(transactionBody.mosaic.amount), + secret: transactionBody.secret, + recipient: transactionBody.recipientAddress, + hashAlgorithm: Constants.LockHashAlgorithm[transactionBody.hashAlgorithm] + }; + + case TransactionType.SECRET_PROOF: + return { + transactionType: transactionBody.type, + hashAlgorithm: Constants.LockHashAlgorithm[transactionBody.hashAlgorithm], + recipient: transactionBody.recipientAddress, + secret: transactionBody.secret, + proof: transactionBody.proof + }; + case TransactionType.ACCOUNT_ADDRESS_RESTRICTION: + return { + transactionType: transactionBody.type, + restrictionType: Constants.AddressRestrictionFlag[transactionBody.restrictionFlags], + restrictionAddressAdditions: transactionBody.restrictionAdditions.map(restriction => { + if (restriction instanceof Address) + return restriction.address; + + return restriction.fullName; + }), + restrictionAddressDeletions: transactionBody.restrictionDeletions.map(restriction => { + if (restriction instanceof Address) + return restriction.address; + + return restriction.fullName; + }) + }; + + case TransactionType.ACCOUNT_MOSAIC_RESTRICTION: + return { + transactionType: transactionBody.type, + restrictionType: Constants.MosaicRestrictionFlag[transactionBody.restrictionFlags], + restrictionMosaicAdditions: transactionBody.restrictionAdditions.map(mosaic => mosaic.id.toHex()), + restrictionMosaicDeletions: transactionBody.restrictionDeletions.map(mosaic => mosaic.id.toHex()) + }; + + case TransactionType.ACCOUNT_OPERATION_RESTRICTION: + return { + transactionType: transactionBody.type, + restrictionType: Constants.OperationRestrictionFlag[transactionBody.restrictionFlags], + restrictionOperationAdditions: transactionBody.restrictionAdditions, + restrictionOperationDeletions: transactionBody.restrictionDeletions + }; + + case TransactionType.MOSAIC_ADDRESS_RESTRICTION: + return { + transactionType: transactionBody.type, + mosaicId: transactionBody.mosaicId.toHex(), + targetAddress: transactionBody.targetAddress, + restrictionKey: transactionBody.restrictionKey.toHex(), + previousRestrictionValue: transactionBody.previousRestrictionValue.toString(), + newRestrictionValue: transactionBody.newRestrictionValue.toString() + }; + + case TransactionType.MOSAIC_GLOBAL_RESTRICTION: + return { + transactionType: transactionBody.type, + referenceMosaicId: transactionBody.referenceMosaicId.toHex() === '0000000000000000' ? transactionBody.mosaicId.toHex() : transactionBody.referenceMosaicId.toHex(), + restrictionKey: transactionBody.restrictionKey.toHex(), + previousRestrictionType: Constants.MosaicRestrictionType[transactionBody.previousRestrictionType], + previousRestrictionValue: transactionBody.previousRestrictionValue.compact(), + newRestrictionType: Constants.MosaicRestrictionType[transactionBody.newRestrictionType], + newRestrictionValue: transactionBody.newRestrictionValue.compact() + }; + + case TransactionType.ACCOUNT_METADATA: + return { + transactionType: transactionBody.type, + scopedMetadataKey: transactionBody.scopedMetadataKey.toHex(), + targetAddress: transactionBody.targetAddress.address, + metadataValue: transactionBody.value, + valueSizeDelta: transactionBody.valueSizeDelta + }; + + case TransactionType.MOSAIC_METADATA: + return { + transactionType: transactionBody.type, + scopedMetadataKey: transactionBody.scopedMetadataKey.toHex(), + targetMosaicId: transactionBody.targetMosaicId.toHex(), + targetAddress: transactionBody.targetAddress.address, + metadataValue: transactionBody.value, + valueSizeDelta: transactionBody.valueSizeDelta + }; + + case TransactionType.NAMESPACE_METADATA: + return { + transactionType: transactionBody.type, + scopedMetadataKey: transactionBody.scopedMetadataKey.toHex(), + targetNamespaceId: transactionBody.targetNamespaceId.toHex(), + targetAddress: transactionBody.targetAddress.address, + metadataValue: transactionBody.value, + valueSizeDelta: transactionBody.valueSizeDelta + }; + case TransactionType.VOTING_KEY_LINK: + return { + transactionType: transactionBody.type, + linkAction: Constants.LinkAction[transactionBody.linkAction], + linkedPublicKey: transactionBody.linkedPublicKey, + linkedAccountAddress: Address.createFromPublicKey(transactionBody.linkedPublicKey, http.networkType).plain(), + startEpoch: transactionBody.startEpoch, + endEpoch: transactionBody.endEpoch + }; + case TransactionType.VRF_KEY_LINK: + case TransactionType.NODE_KEY_LINK: + case TransactionType.ACCOUNT_KEY_LINK: + return { + transactionType: transactionBody.type, + linkAction: Constants.LinkAction[transactionBody.linkAction], + linkedPublicKey: transactionBody.linkedPublicKey, + linkedAccountAddress: Address.createFromPublicKey(transactionBody.linkedPublicKey, http.networkType).plain() + }; + } + } + + /** + * Format transactionInfoDTO + * @param transactionInfoDTO + * @returns readable transactionInfoDTO object + */ + static formatTransactionInfo = transactionInfo => { + if (transactionInfo instanceof TransactionInfo) { + return { + ...transactionInfo, + height: transactionInfo.height.compact() + }; + } + + if (transactionInfo instanceof AggregateTransactionInfo) { + return { + ...transactionInfo + }; + } + + return {}; + } + + /** + * extend graphic value for transaction list. + * @param transactionInfo + * @returns graphicValue [] + */ + static extendGraphicValue = transactionInfo => { + const transactionBody = transactionInfo.transactionBody; + + switch (transactionInfo.type) { + case TransactionType.TRANSFER: + return { + nativeMosaic: helper.getNetworkCurrencyBalance(transactionInfo.mosaics), + message: transactionBody.message, + mosaics: transactionBody.mosaics.filter(mosaic => + mosaic.id !== http.networkCurrency.mosaicId && + mosaic.id !== http.networkCurrency.namespaceId + ) + }; + case TransactionType.NAMESPACE_REGISTRATION: + return [{ namespace: { + namespaceId: transactionBody.namespaceId, + namespaceName: transactionBody.namespaceName + } + }]; + case TransactionType.ADDRESS_ALIAS: + return [ + { linkAction: transactionBody.aliasAction } + ]; + case TransactionType.MOSAIC_ALIAS: + return [ + { linkAction: transactionBody.aliasAction } + ]; + case TransactionType.MOSAIC_DEFINITION: + return [ + { mosaicId: transactionBody.mosaicId } + ]; + case TransactionType.MOSAIC_SUPPLY_CHANGE: + return [ + { action: transactionBody.action } + ]; + case TransactionType.MULTISIG_ACCOUNT_MODIFICATION: + return [ + { minApprovalDelta: transactionBody.minApprovalDelta }, + { minRemovalDelta: transactionBody.minRemovalDelta } + ]; + case TransactionType.HASH_LOCK: + return [ + { amount: transactionBody.amount } + ]; + case TransactionType.SECRET_LOCK: + return [ + { secret: transactionBody.secret } + ]; + case TransactionType.SECRET_PROOF: + return [ + { proof: transactionBody.proof } + ]; + case TransactionType.ACCOUNT_ADDRESS_RESTRICTION: + return [ + { restrictionAddressAdditions: transactionBody.restrictionAddressAdditions }, + { restrictionAddressDeletions: transactionBody.restrictionAddressDeletions } + ]; + case TransactionType.ACCOUNT_MOSAIC_RESTRICTION: + return [ + { restrictionMosaicAdditions: transactionBody.restrictionMosaicAdditions }, + { restrictionMosaicDeletions: transactionBody.restrictionMosaicDeletions } + ]; + case TransactionType.ACCOUNT_OPERATION_RESTRICTION: + return [ + { restrictionOperationAdditions: transactionBody.restrictionOperationAdditions }, + { restrictionOperationDeletions: transactionBody.restrictionOperationDeletions } + ]; + case TransactionType.MOSAIC_ADDRESS_RESTRICTION: + return [ + { targetAddress: transactionBody.targetAddress } + ]; + case TransactionType.MOSAIC_GLOBAL_RESTRICTION: + return [ + { referenceMosaicId: transactionBody.referenceMosaicId } + ]; + case TransactionType.ACCOUNT_METADATA: + case TransactionType.MOSAIC_METADATA: + case TransactionType.NAMESPACE_METADATA: + return [ + { metadataValue: transactionBody.metadataValue } + ]; + case TransactionType.VOTING_KEY_LINK: + case TransactionType.VRF_KEY_LINK: + case TransactionType.NODE_KEY_LINK: + case TransactionType.ACCOUNT_KEY_LINK: + return [ + { linkAction: transactionBody.linkAction } + ]; + default: + return []; + } + } + + /** + * Build standalone transanction object for Vue components. + * @param transactionDTO - transaction dto from SDK + * @returns tranasctionObj + */ + static createStandaloneTransactionFromSDK = async transactionDTO => { + const transactionObj = { + ...transactionDTO, + transactionType: transactionDTO.type, + deadline: helper.convertDeadlinetoDate(transactionDTO.deadline.adjustedValue), + maxFee: helper.toNetworkCurrency(transactionDTO.maxFee), + signer: transactionDTO.signer.address.plain(), + transactionInfo: this.formatTransactionInfo(transactionDTO.transactionInfo) + }; + + switch (transactionDTO.type) { + case TransactionType.TRANSFER: + return CreateTransaction.transferTransaction(transactionObj); + case TransactionType.NAMESPACE_REGISTRATION: + return CreateTransaction.namespaceRegistration(transactionObj); + case TransactionType.ADDRESS_ALIAS: + return CreateTransaction.addressAlias(transactionObj); + case TransactionType.MOSAIC_ALIAS: + return CreateTransaction.mosaicAlias(transactionObj); + case TransactionType.MOSAIC_DEFINITION: + return CreateTransaction.mosaicDefinition(transactionObj); + case TransactionType.MOSAIC_SUPPLY_CHANGE: + return CreateTransaction.mosaicSupplyChange(transactionObj); + case TransactionType.MULTISIG_ACCOUNT_MODIFICATION: + return CreateTransaction.multisigAccountModification(transactionObj); + case TransactionType.HASH_LOCK: + return CreateTransaction.hashLock(transactionObj); + case TransactionType.SECRET_LOCK: + return CreateTransaction.secretLock(transactionObj); + case TransactionType.SECRET_PROOF: + return CreateTransaction.secretProof(transactionObj); + case TransactionType.ACCOUNT_ADDRESS_RESTRICTION: + return CreateTransaction.accountAddressRestriction(transactionObj); + case TransactionType.ACCOUNT_MOSAIC_RESTRICTION: + return CreateTransaction.accountMosaicRestriction(transactionObj); + case TransactionType.ACCOUNT_OPERATION_RESTRICTION: + return CreateTransaction.accountOperationRestriction(transactionObj); + case TransactionType.MOSAIC_ADDRESS_RESTRICTION: + return CreateTransaction.mosaicAddressRestriction(transactionObj); + case TransactionType.MOSAIC_GLOBAL_RESTRICTION: + return CreateTransaction.mosaicGlobalRestriction(transactionObj); + case TransactionType.ACCOUNT_METADATA: + return CreateTransaction.accountMetadata(transactionObj); + case TransactionType.MOSAIC_METADATA: + return CreateTransaction.mosaicMetadata(transactionObj); + case TransactionType.NAMESPACE_METADATA: + return CreateTransaction.namespaceMetadata(transactionObj); + case TransactionType.VOTING_KEY_LINK: + return CreateTransaction.votingKeyLink(transactionObj); + case TransactionType.VRF_KEY_LINK: + return CreateTransaction.vrfKeyLink(transactionObj); + case TransactionType.NODE_KEY_LINK: + return CreateTransaction.nodeKeyLink(transactionObj); + case TransactionType.ACCOUNT_KEY_LINK: + return CreateTransaction.accountKeyLink(transactionObj); + default: + throw new Error('Unimplemented transaction with type ' + transactionDTO.type); + } + } + + /** + * Build transanction object for Vue components. + * @param transactionDTO - transaction dto from SDK + * @returns tranasctionObj + */ + static createTransactionFromSDK = async (transactionDTO) => { + if (transactionDTO.type === TransactionType.AGGREGATE_BONDED || transactionDTO.type === TransactionType.AGGREGATE_COMPLETE) { + const innerTransactions = transactionDTO.innerTransactions ? await Promise.all(transactionDTO.innerTransactions.map(async (transaction, index) => { + return { + index: index + 1, + ...await this.createStandaloneTransactionFromSDK(transaction) + }; + })) : []; + + return { + ...transactionDTO, + innerTransactions, + cosignatures: transactionDTO.cosignatures ? transactionDTO.cosignatures.map(cosignature => { + return { + ...cosignature, + signature: cosignature.signature, + signer: cosignature.signer.address.plain() + }; + }) : [], + deadline: helper.convertDeadlinetoDate(transactionDTO.deadline.adjustedValue), + maxFee: helper.toNetworkCurrency(transactionDTO.maxFee), + signer: transactionDTO.signer.address.plain(), + transactionInfo: this.formatTransactionInfo(transactionDTO.transactionInfo), + transactionBody: { + transactionType: transactionDTO.type + } + }; + } + + return this.createStandaloneTransactionFromSDK(transactionDTO); + } +} + +export default TransactionService; diff --git a/src/infrastructure/http.js b/src/infrastructure/http.js new file mode 100644 index 0000000..f725c08 --- /dev/null +++ b/src/infrastructure/http.js @@ -0,0 +1,149 @@ +/* + * + * Copyright (c) 2019-present for symbol + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import * as symbol from 'symbol-sdk'; +import { NamespaceService } from '../infrastructure'; +import globalConfig from '../config/globalConfig'; + +let NODE_URL; + +let MARKET_DATA_URL; + +let NETWORK_TYPE; + +let GENERATION_HASH; + +let NETWORK_PROPERTIES; + +let NETWORK_CURRECY; + +let NATIVE_NAMESPACES; + +let EPOCH_ADJUSTMENT; + +export default class http { + static init = async (nodeUrl, marketDataUrl) => { + NODE_URL = nodeUrl; + MARKET_DATA_URL = marketDataUrl; + + [NETWORK_TYPE, GENERATION_HASH, NETWORK_PROPERTIES, EPOCH_ADJUSTMENT, NETWORK_CURRECY] = await Promise.all([ + http.createRepositoryFactory.getNetworkType().toPromise(), + http.createRepositoryFactory.getGenerationHash().toPromise(), + http.createRepositoryFactory.createNetworkRepository().getNetworkProperties() + .toPromise(), + http.createRepositoryFactory.getEpochAdjustment().toPromise(), + http.createRepositoryFactory.getCurrencies().toPromise() + ]); + + NATIVE_NAMESPACES = await NamespaceService.getNativeNamespaces() || []; + } + + static get networkCurrency() { + return { + namespaceName: NETWORK_CURRECY?.currency.namespaceId?.fullName || globalConfig.networkConfig.namespaceName, + namespaceId: NETWORK_CURRECY?.currency.namespaceId?.id?.toHex() || globalConfig.networkConfig.namespaceId, + mosaicId: NETWORK_CURRECY?.currency.mosaicId?.toHex() || globalConfig.networkConfig.mosaicId, + divisibility: NETWORK_CURRECY?.currency.divisibility || globalConfig.networkConfig.divisibility + }; + } + + static get nativeNamespaces() { + return NATIVE_NAMESPACES; + } + + static get networkProperties() { + return new symbol.NetworkConfiguration(NETWORK_PROPERTIES.network, NETWORK_PROPERTIES.chain, NETWORK_PROPERTIES.plugins); + } + + static get networkConfig() { + const convertedTotalChainImportance = +this.networkProperties.chain.totalChainImportance.replace(/'/g, ''); + const convertedNamespaceGracePeriodDuration = +this.networkProperties.plugins.namespace.namespaceGracePeriodDuration.replace(/d/g, ''); + const convertedBlockGenerationTargetTime = +this.networkProperties.chain.blockGenerationTargetTime.replace(/s/g, ''); + const blockPerday = (60 / convertedBlockGenerationTargetTime) * 60 * 24; + + return { + MosaicRentalSinkAddress: symbol.Address.createFromRawAddress(this.networkProperties.plugins.mosaic.mosaicRentalFeeSinkAddress), + NamespaceRentalFeeSinkAddress: symbol.Address.createFromRawAddress(this.networkProperties.plugins.namespace.namespaceRentalFeeSinkAddress), + NetworkType: this.networkType, + NemsisTimestamp: this.epochAdjustment, + TargetBlockTime: convertedBlockGenerationTargetTime, + NamespaceGraceDuration: convertedNamespaceGracePeriodDuration * blockPerday, + TotalChainImportance: convertedTotalChainImportance + }; + } + + static get marketDataUrl() { + return MARKET_DATA_URL; + } + + static get nodeUrl() { + return NODE_URL; + } + + static get generationHash() { + return GENERATION_HASH; + } + + static get networkType() { + return NETWORK_TYPE; + } + + static get epochAdjustment() { + return EPOCH_ADJUSTMENT; + } + + static get createRepositoryFactory() { + return new symbol.RepositoryFactoryHttp(this.nodeUrl, { + networkType: this.networkType, + generationHash: this.generationHash + }); + } + + static get mosaicService() { + const accountRepository = this.createRepositoryFactory.createAccountRepository(); + const mosaicRepository = this.createRepositoryFactory.createMosaicRepository(); + + return new symbol.MosaicService(accountRepository, mosaicRepository); + } + + static get namespaceService() { + const namespaceRepository = this.createRepositoryFactory.createNamespaceRepository(); + + return new symbol.NamespaceService(namespaceRepository); + } + + static get blockPaginationStreamer() { + return new symbol.BlockPaginationStreamer(this.createRepositoryFactory.createBlockRepository()); + } + + static transactionStatementPaginationStreamer() { + return symbol.ReceiptPaginationStreamer.transactionStatements(this.createRepositoryFactory.createReceiptRepository()); + } + + static addressResolutionStatementPaginationStreamer() { + return symbol.ReceiptPaginationStreamer.addressResolutionStatements(this.createRepositoryFactory.createReceiptRepository()); + } + + static mosaicResolutionStatementPaginationStreamer() { + return symbol.ReceiptPaginationStreamer.mosaicResolutionStatements(this.createRepositoryFactory.createReceiptRepository()); + } + + static get transactionPaginationStreamer() { + return new symbol.TransactionPaginationStreamer(this.createRepositoryFactory.createTransactionRepository()); + } +} diff --git a/src/infrastructure/index.js b/src/infrastructure/index.js new file mode 100644 index 0000000..3a60e4e --- /dev/null +++ b/src/infrastructure/index.js @@ -0,0 +1,39 @@ +import NodeService from './NodeService'; +import AccountService from './AccountService'; +import MetadataService from './MetadataService'; +import RestrictionService from './RestrictionService'; +import ListenerService from './ListenerService'; +import ChainService from './ChainService'; +import BlockService from './BlockService'; +import ReceiptService from './ReceiptService'; +import DataService from './DataService'; +import MosaicService from './MosaicService'; +import NamespaceService from './NamespaceService'; +import TransactionService from './TransactionService'; +import MultisigService from './MultisigService'; +import NetworkService from './NetworkService'; +import StatisticService from './StatisticService'; +import LockService from './LockService'; +import CreateTransaction from './CreateTransaction'; +import CreateReceiptTransaction from './CreateReceiptTransaction'; + +export { + NodeService, + AccountService, + MetadataService, + RestrictionService, + ListenerService, + ChainService, + ReceiptService, + DataService, + MosaicService, + NamespaceService, + TransactionService, + BlockService, + MultisigService, + NetworkService, + StatisticService, + LockService, + CreateTransaction, + CreateReceiptTransaction +}; diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..f70eb8e --- /dev/null +++ b/src/main.js @@ -0,0 +1,40 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { loadConfig } from './config/loader'; +import BootstrapVue from 'bootstrap-vue'; +import 'vue-material-design-icons/styles.css'; +import '@mdi/font/css/materialdesignicons.css'; +import './styles/main.scss'; + +loadConfig().then(async () => { + const Vue = (await import('vue')).default; + const App = (await import('./App.vue')).default; + const router = (await import('./router')).default; + const store = (await import('./store')).default; + + window.Vue = Vue; + Vue.config.productionTip = false; + Vue.use(BootstrapVue); + + new Vue({ + router, + store, + render: h => h(App) + }).$mount('#app'); +}); diff --git a/src/router.js b/src/router.js new file mode 100644 index 0000000..4e5cae9 --- /dev/null +++ b/src/router.js @@ -0,0 +1,98 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import Vue from 'vue'; +import Router from 'vue-router'; +import PageAssembler from './views/PageAssembler.vue'; +import pages from './config/pages'; +Vue.use(Router); + +const pagesRoutes = pages.map(page => ({ + ...page, + meta: { + ...page.meta, + storeNamespaces: page.props?.storeNamespaces || [] + }, + component: PageAssembler +})); + +const routerConfig = { + mode: 'history', + scrollBehavior() { + return { x: 0, y: 0 }; + }, + routes: [ + ...pagesRoutes, + { + path: '/', + name: 'home', + meta: { + group: 'page', + keepAliveGoTo: [] + }, + component: () => + import('./views/Home.vue') + }, + { + path: '/statistics', + name: 'statistics', + component: () => + import('./views/Statistics.vue') + }, + { + path: '/terms', + name: 'terms', + meta: { + group: 'page', + keepAliveGoTo: [] + }, + component: () => + import('./views/Terms.vue') + }, + { + path: '/privacy', + name: 'privacy', + meta: { + group: 'page', + keepAliveGoTo: [] + }, + component: () => + import('./views/Privacy.vue') + }, + { + path: '*', + name: '404', + meta: { + group: 'page', + keepAliveGoTo: [] + }, + component: () => import('./views/NotFound.vue') + } + ] +}; + +export default new Router(routerConfig); + +// const router = new Router(routerConfig); +// router.beforeEach((to, from, next) => { +// console.log(from, to); +// if(to.fullPath !== from.fullPath) { + +// next() +// } +// }) diff --git a/src/store/account.js b/src/store/account.js new file mode 100644 index 0000000..4597508 --- /dev/null +++ b/src/store/account.js @@ -0,0 +1,220 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import Lock from './lock'; +import { Constants, filters } from '../config'; +import helper from '../helper'; +import { + AccountService, + MultisigService, + RestrictionService +} from '../infrastructure'; +import { + DataSet, + Pagination, + getStateFromManagers, + getGettersFromManagers, + getMutationsFromManagers, + getActionsFromManagers +} from './manager'; +import { Address } from 'symbol-sdk'; + +const managers = [ + new Pagination({ + name: 'timeline', + fetchFunction: (pageInfo, filterVaule) => AccountService.getAccountList(pageInfo, filterVaule), + pageInfo: { + pageSize: Constants.PageSize + }, + filter: filters.account + }), + new DataSet( + 'info', + (address) => AccountService.getAccountInfo(address) + ), + new DataSet( + 'OwnedMosaic', + (address) => AccountService.getAccountMosaicList(address) + ), + new Pagination({ + name: 'OwnedNamespace', + fetchFunction: (pageInfo, filterValue, store) => AccountService.getAccountNamespaceList(pageInfo, filterValue, store.getters.getCurrentAccountAddress), + pageInfo: { + pageSize: 10 + }, + filter: filters.namespace + }), + new DataSet( + 'multisig', + (address) => MultisigService.getMultisigAccountInfo(address) + ), + new Pagination({ + name: 'transactions', + fetchFunction: (pageInfo, filterValue, store) => AccountService.getAccountTransactionList(pageInfo, filterValue, store.getters.getCurrentAccountAddress), + pageInfo: { + pageSize: 10 + }, + filter: filters.transaction + }), + new Pagination({ + name: 'harvestedBlocks', + fetchFunction: (pageInfo, filterValue, store) => AccountService.getAccountHarvestedReceiptList(pageInfo, store.getters.getCurrentAccountAddress), + pageInfo: { + pageSize: 10 + } + }), + new Pagination({ + name: 'receipt', + fetchFunction: (pageInfo, filterValue, store) => AccountService.getAccountReceiptList(pageInfo, filterValue, store.getters.getCurrentAccountAddress), + pageInfo: { + pageSize: 10 + }, + filter: filters.accountTransactionReceipt + }), + new Pagination({ + name: 'mosaicAddressRestrictions', + fetchFunction: (pageInfo, filterValue, store) => RestrictionService.getMosaicAddressRestrictionList(pageInfo, store.getters.getCurrentAccountAddress), + pageInfo: { + pageSize: Constants.PageSize + } + }), + new Pagination({ + name: 'metadatas', + fetchFunction: (pageInfo, filterValue, store) => AccountService.getAccountMetadataList(pageInfo, filterValue, store.getters.getCurrentAccountAddress), + pageInfo: { + pageSize: 10 + }, + filter: filters.metadata + }), + new Pagination({ + name: 'hashLocks', + fetchFunction: (pageInfo, filterValue, store) => AccountService.getAccountHashLockList(pageInfo, store.getters.getCurrentAccountAddress), + pageInfo: { + pageSize: 10 + } + }), + new Pagination({ + name: 'secretLocks', + fetchFunction: (pageInfo, filterValue, store) => AccountService.getAccountSecretLockList(pageInfo, store.getters.getCurrentAccountAddress), + pageInfo: { + pageSize: 10 + } + }), + new DataSet( + 'accountRestrictions', + (address) => RestrictionService.getAccountRestrictionList(address) + ) +]; + +const LOCK = Lock.create(); + +export default { + namespaced: true, + state: { + ...getStateFromManagers(managers), + // If the state has been initialized. + initialized: false, + currentAccountAddress: null + }, + getters: { + ...getGettersFromManagers(managers), + getInitialized: state => state.initialized, + getActivityBucketList: state => state.info?.data.activityBucket || [], + getSupplementalPublicKeys: state => state.info?.data.supplementalPublicKeys || {}, + getCurrentAccountAddress: state => state.currentAccountAddress, + balanceWidget: (state, getters) => ({ + address: Address + .createFromRawAddress(state.currentAccountAddress) + .pretty(), + balance: getters.OwnedMosaic?.data[0]?.amount || 0, + alias: getters.info?.data?.accountAliasNames /* || Constants.Message.UNAVAILABLE */ + }) + }, + mutations: { + ...getMutationsFromManagers(managers), + setInitialized: (state, initialized) => { + state.initialized = initialized; + }, + setCurrentAccountAddress: (state, currentAccountAddress) => { + state.currentAccountAddress = currentAccountAddress; + } + }, + actions: { + ...getActionsFromManagers(managers), + // Initialize the account model. + async initialize({ commit, dispatch, getters }) { + const callback = async () => { + await dispatch('initializePage'); + }; + + await LOCK.initialize(callback, commit, dispatch, getters); + }, + + // Uninitialize the account model. + async uninitialize({ commit, dispatch, getters }) { + const callback = async () => { + dispatch('uninitializeDetail'); + getters.timeline?.uninitialize(); + }; + + await LOCK.uninitialize(callback, commit, dispatch, getters); + }, + + // Fetch data from the SDK and initialize the page. + initializePage(context) { + context.getters.timeline.setStore(context).initialFetch(); + }, + + // Fetch data from the SDK By Address. + async fetchAccountDetail(context, payload) { + if (!helper.isAccountAddress(payload.address)) + payload.address = await helper.decodeToAddress(payload.address); + + context.dispatch('uninitializeDetail'); + context.commit('setCurrentAccountAddress', payload.address); + + context.getters.info.setStore(context).initialFetch(payload.address); + context.getters.transactions.setStore(context).initialFetch(payload.address); + context.getters.OwnedMosaic.setStore(context).initialFetch(payload.address); + context.getters.OwnedNamespace.setStore(context).initialFetch(payload.address); + context.getters.multisig.setStore(context).initialFetch(payload.address); + context.getters.metadatas.setStore(context).initialFetch(payload.address); + context.getters.mosaicAddressRestrictions.setStore(context).initialFetch(payload.address); + context.getters.harvestedBlocks.setStore(context).initialFetch(payload.address); + context.getters.accountRestrictions.setStore(context).initialFetch(payload.address); + context.getters.hashLocks.setStore(context).initialFetch(payload.address); + context.getters.secretLocks.setStore(context).initialFetch(payload.address); + context.getters.receipt.setStore(context).initialFetch(payload.address); + }, + + uninitializeDetail(context) { + context.getters.info.setStore(context).uninitialize(); + context.getters.OwnedMosaic.setStore(context).uninitialize(); + context.getters.OwnedNamespace.setStore(context).uninitialize(); + context.getters.multisig.setStore(context).uninitialize(); + context.getters.transactions.setStore(context).uninitialize(); + context.getters.metadatas.setStore(context).uninitialize(); + context.getters.mosaicAddressRestrictions.setStore(context).uninitialize(); + context.getters.harvestedBlocks.setStore(context).uninitialize(); + context.getters.accountRestrictions.setStore(context).uninitialize(); + context.getters.hashLocks.setStore(context).uninitialize(); + context.getters.secretLocks.setStore(context).uninitialize(); + context.getters.receipt.setStore(context).uninitialize(); + } + } +}; diff --git a/src/store/api.js b/src/store/api.js new file mode 100644 index 0000000..7ab52d0 --- /dev/null +++ b/src/store/api.js @@ -0,0 +1,129 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +import Vue from 'vue'; +import Lock from './lock'; +import helper from '../helper'; +import http from '../infrastructure/http'; +import { NodeService } from '../infrastructure'; +import globalConfig from '../config/globalConfig'; +import * as sdk from 'symbol-sdk'; + +const LOCK = Lock.create(); + +export default { + namespaced: true, + + state: { + // If the global state has been initialized. + initialized: false, + nodes: [...globalConfig.peersApi.nodes], + defaultNode: helper.parseUrl(globalConfig.peersApi.defaultNode), + currentNode: localStorage.getItem('currentNode') ? helper.parseUrl(localStorage.getItem('currentNode')) : helper.parseUrl(globalConfig.peersApi.defaultNode), + wsEndpoint: localStorage.getItem('currentNode') || globalConfig.peersApi.defaultNode |> helper.httpToWsUrl, + marketData: helper.parseUrl(globalConfig.endpoints.marketData), + networkType: globalConfig.networkConfig.networkIdentifier + }, + + getters: { + getInitialized: state => state.initialized, + nodes: state => + Array.isArray(state.nodes) + ? state.nodes.map(node => helper.parseUrl(node)) + : [], + currentNode: state => state.currentNode.toString(), + currentNodeHostname: state => state.currentNode.hostname, + wsEndpoint: state => state.wsEndpoint.toString(), + marketData: state => state.marketData.toString(), + isTestnet: state => state.networkType === sdk.NetworkType.TEST_NET + }, + + mutations: { + setInitialized: (state, initialized) => { + state.initialized = initialized; + }, + mutate: (state, { key, value }) => Vue.set(state, key, value), + currentNode: (state, payload) => { + if (undefined !== payload) { + const currentNode = helper.parseUrl(payload); + const wsEndpoint = currentNode.toString() |> helper.httpToWsUrl; + + localStorage.setItem('currentNode', currentNode); + + Vue.set(state, 'currentNode', currentNode); + Vue.set(state, 'wsEndpoint', wsEndpoint); + } + }, + setNodes: (state, nodes) => { + state.nodes = nodes; + }, + networkType: (state, v) => { + state.networkType = v; + } + }, + + actions: { + async initialize({ commit, dispatch, getters }) { + const callback = async () => { + dispatch('filterHealthyNodes'); + + const nodeUrl = getters['currentNode']; + const marketDataUrl = getters['marketData']; + + await http.init(nodeUrl, marketDataUrl); + + commit('networkType', http.networkType); + dispatch('chain/getChainInfo', null, { root: true }); + }; + + await LOCK.initialize(callback, commit, dispatch, getters); + }, + + async changeNode({ commit, dispatch }, currentNodeUrl) { + if (helper.validURL(currentNodeUrl)) { + // Set the current node URL. + commit('currentNode', currentNodeUrl); + commit('setInitialized', false); + // Uninitialize the data and re-initialize the API. + location.reload(); + } + else + throw Error('Cannot change node. URL is not valid: ' + currentNodeUrl); + }, + + async filterHealthyNodes({ commit, getters }) { + const nodes = getters['nodes']; + + let healthyNodes = []; + + await Promise.all(nodes.map(async (url) => { + let endpoint = helper.parseUrl(url).toString(); + + if (await NodeService.isNodeActive(endpoint)) + healthyNodes.push(url); + })); + + commit('setNodes', healthyNodes); + + const currentNode = getters['currentNode']; + const activeNodes = healthyNodes.map(nodes => nodes.href); + + // Reset the currentNode, if currentNode not longer in healthy status. + activeNodes.indexOf(currentNode) === -1 ? commit('currentNode', healthyNodes[0]) : void 0; + } + } +}; diff --git a/src/store/block.js b/src/store/block.js new file mode 100644 index 0000000..32c3b2a --- /dev/null +++ b/src/store/block.js @@ -0,0 +1,200 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import Vue from 'vue'; +import Lock from './lock'; +import { filters, Constants } from '../config'; +import helper from '../helper'; +import { + ListenerService, + BlockService +} from '../infrastructure'; +import { + DataSet, + Pagination, + getStateFromManagers, + getGettersFromManagers, + getMutationsFromManagers, + getActionsFromManagers +} from './manager'; + +const managers = [ + new Pagination({ + name: 'timeline', + fetchFunction: (pageInfo) => BlockService.getBlockList(pageInfo), + pageInfo: { + pageSize: Constants.PageSize + } + }), + new Pagination({ + name: 'blockTransactions', + fetchFunction: (pageInfo, filterValue, store) => BlockService.getBlockTransactionList(pageInfo, filterValue, store.getters.currentBlockHeight), + pageInfo: { + pageSize: 10 + }, + filter: filters.transaction + }), + new Pagination({ + name: 'receipt', + fetchFunction: (pageInfo, filterValue, store) => BlockService.getBlockReceiptList(pageInfo, filterValue, store.getters.currentBlockHeight), + pageInfo: { + pageSize: 10 + }, + filter: filters.blockTransactionReceipt + }), + new DataSet( + 'blockReceipts', + (height) => BlockService.getBlockReceiptsInfo(height) + ), + new DataSet( + 'info', + (height) => BlockService.getBlockInfo(height) + ) +]; + +const LOCK = Lock.create(); + +export default { + namespaced: true, + state: { + ...getStateFromManagers(managers), + // If the state has been initialized. + initialized: false, + // Subscription to new blocks. + subscription: null, + currentBlockHeight: null + }, + getters: { + ...getGettersFromManagers(managers), + getInitialized: state => state.initialized, + getRecentList: state => state.timeline?.data?.filter((item, index) => index < 4) || [], + getSubscription: state => state.subscription, + blockInfo: state => state.info?.data?.blockInfo || {}, + merkleInfo: state => state.info?.data?.merkleInfo || {}, + + resolutionStatement: state => state.blockReceipts?.data?.resolutionStatements || [], + currentBlockHeight: state => state.currentBlockHeight, + infoText: (s, g, rs, rootGetters) => rootGetters['ui/getNameByKey']('chainHeight') + ': ' + (rootGetters['chain/getChainInfo'] && rootGetters['chain/getChainInfo'].currentHeight ? rootGetters['chain/getChainInfo'].currentHeight : 0) }, + mutations: { + ...getMutationsFromManagers(managers), + setInitialized: (state, initialized) => { + state.initialized = initialized; + }, + setSubscription: (state, subscription) => { + state.subscription = subscription; + }, + currentBlockHeight: (state, currentBlockHeight) => Vue.set(state, 'currentBlockHeight', currentBlockHeight) + }, + actions: { + ...getActionsFromManagers(managers), + // Initialize the block model. + // First fetch the page, then subscribe. + async initialize({ commit, dispatch, getters }) { + const callback = async () => { + await dispatch('initializePage'); + await dispatch('subscribe'); + }; + + await LOCK.initialize(callback, commit, dispatch, getters); + }, + + // Uninitialize the block model. + async uninitialize({ commit, dispatch, getters }) { + const callback = async () => { + dispatch('unsubscribe'); + dispatch('uninitializeDetail'); + getters.timeline?.uninitialize(); + }; + + await LOCK.uninitialize(callback, commit, dispatch, getters); + }, + + // Subscribe to the latest blocks. + async subscribe({ commit, dispatch, getters, rootGetters }) { + if (getters.getSubscription === null) { + const subscription = await ListenerService.subscribeNewBlock( + async (item) => { + const latestBlock = await BlockService.getBlockByHeight(item.height.compact()); + + getters.timeline.addLatestItem({ + ...latestBlock, + age: helper.convertToUTCDate(latestBlock.timestamp), + harvester: latestBlock.signer + }, 'height'); + + dispatch('chain/getChainInfo', null, { root: true }); + }, + rootGetters['api/wsEndpoint'] + ); + + commit('setSubscription', subscription); + } + }, + + // Unsubscribe from the latest blocks. + unsubscribe({ commit, getters }) { + let subscription = getters.getSubscription; + + if (subscription?.length === 2) { + subscription[1].unsubscribe(); + subscription[0].close(); + commit('setSubscription', null); + } + }, + + // Fetch data from the SDK and initialize the page. + initializePage(context) { + context.dispatch('chain/getChainInfo', null, { root: true }); + context.getters.timeline.setStore(context).initialFetch(); + }, + + fetchBlockInfo: (context, payload) => { + context.dispatch('uninitializeDetail'); + context.commit('currentBlockHeight', payload.height); + context.getters.info.setStore(context).initialFetch(payload.height); + context.getters.blockReceipts.setStore(context).initialFetch(payload.height); + context.getters.blockTransactions.setStore(context).initialFetch(payload.height); + context.getters.receipt.setStore(context).initialFetch(payload.height); + }, + + uninitializeDetail(context) { + context.getters.info.setStore(context).uninitialize(); + context.getters.blockReceipts.setStore(context).uninitialize(); + context.getters.blockTransactions.setStore(context).uninitialize(); + context.getters.receipt.setStore(context).uninitialize(); + }, + + nextBlock: ({ commit, getters, dispatch, rootGetters }) => { + if (getters.currentBlockHeight < rootGetters['chain/getChainInfo'].currentHeight) { + dispatch('ui/openPage', { + pageName: 'block', + param: +getters.currentBlockHeight + 1 + }, { root: true }); + } + }, + + previousBlock: ({ commit, getters, dispatch }) => { + if (+getters.currentBlockHeight > 1) { + dispatch('ui/openPage', { + pageName: 'block', + param: +getters.currentBlockHeight - 1 + }, { root: true }); + } + } + } +}; diff --git a/src/store/chain.js b/src/store/chain.js new file mode 100644 index 0000000..6ecd0f1 --- /dev/null +++ b/src/store/chain.js @@ -0,0 +1,149 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import Lock from './lock'; +import { NodeService, ChainService } from '../infrastructure'; +import { RoleType } from 'symbol-sdk'; + +const LOCK = Lock.create(); + +export default { + namespaced: true, + state: { + // If the state has been initialized. + initialized: false, + // The chain info. + storageInfo: { + // The total transactions. + numTransactions: 0, + // The total Accounts. + numAccounts: 0 + }, + // The Market Data. + marketData: { + marketCap: 0, + price: 0, + historicalHourlyGraph: {} + }, + chainInfo: { + currentHeight: 0, + finalizedBlockHeight: 0, + isVotingNode: false + }, + nodeStats: {}, + loading: true + }, + getters: { + getInitialized: state => state.initialized, + getLoading: state => state.loading, + getStorageInfo: state => state.storageInfo, + getMarketData: state => state.marketData, + getChainInfo: state => state.chainInfo, + getNodeStats: state => state.nodeStats + }, + mutations: { + setInitialized: (state, initialized) => { + state.initialized = initialized; + }, + setLoading: (state, v) => { + state.loading = v; + }, + setStorageInfo: (state, storageInfo) => { + state.storageInfo.numTransactions = storageInfo.numTransactions; + state.storageInfo.numAccounts = storageInfo.numAccounts; + }, + setMarketData: (state, { marketData, graphData }) => { + state.marketData.price = marketData.XEM.USD.PRICE; + state.marketData.marketCap = marketData.XEM.USD.MKTCAP; + state.marketData.historicalHourlyGraph = graphData; + }, + setChainInfo: (state, { currentHeight, finalizedBlockHeight, isVotingNode }) => { + state.chainInfo.currentHeight = currentHeight; + state.chainInfo.finalizedBlockHeight = finalizedBlockHeight; + state.chainInfo.isVotingNode = isVotingNode; + }, + setNodeStats: (state, nodeStats) => { + state.nodeStats = { + ...nodeStats, + total: Array.from(Array(8).keys()).reduce((acc, val) => acc + (nodeStats[val] || 0)) + }; + } + }, + actions: { + // Initialize the chain model. + async initialize({ commit, dispatch, getters }) { + const callback = async () => { + await dispatch('initializePage'); + }; + + await LOCK.initialize(callback, commit, dispatch, getters); + }, + + // Uninitialize the chain model. + async uninitialize({ commit, dispatch, getters }) { + const callback = async () => {}; + + await LOCK.uninitialize(callback, commit, dispatch, getters); + }, + + // Fetch data from the SDK / API and initialize the page. + async initializePage({ commit, dispatch }) { + commit('setLoading', true); + const [ storageInfo ]/* marketData, xemGraph, */ = await Promise.all([ + NodeService.getStorageInfo() + // DataService.getMarketPrice('XEM'), + // DataService.getHistoricalHourlyGraph('XEM'), + ]); + + commit('setLoading', false); + + commit('setStorageInfo', storageInfo); + await dispatch('getChainInfo'); + + // let graphData = []; + + // if (xemGraph) { + // xemGraph.Data.map((item, index) => { + // let graphDataItem = {}; + + // graphDataItem.y = []; + // graphDataItem.x = new Date(item['time'] * 1000); + // graphDataItem.y[0] = item['open']; // parseFloat(item['open']).toFixed(4) + // graphDataItem.y[1] = item['high']; // parseFloat(item['high']).toFixed(4) + // graphDataItem.y[2] = item['low']; // parseFloat(item['low']).toFixed(4) + // graphDataItem.y[3] = item['close']; // parseFloat(item['close']).toFixed(4) + // graphData.push(graphDataItem); + // }); + // } + // commit('setMarketData', { marketData, graphData }); + }, + + async getChainInfo({ commit }) { + const [chainInfo, currentNodeInfo] = await Promise.all([ + ChainService.getChainInfo(), + NodeService.getCurrentNodeInfo() + ]); + + commit('setChainInfo', { + currentHeight: chainInfo.height, + finalizedBlockHeight: chainInfo.latestFinalizedBlock.height, + isVotingNode: currentNodeInfo.roles.indexOf(RoleType.VotingNode) !== -1 + }); + } + } +}; diff --git a/src/store/index.js b/src/store/index.js new file mode 100644 index 0000000..52c8206 --- /dev/null +++ b/src/store/index.js @@ -0,0 +1,122 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +import account from './account'; +import api from './api'; +import block from './block'; +import chain from './chain'; +import mosaic from './mosaic'; +import namespace from './namespace'; +import node from './node'; +import transaction from './transaction'; +import statistic from './statistic'; +import ui from './ui'; +import helper from '../helper'; +import router from '../router'; +import Vue from 'vue'; +import Vuex from 'vuex'; + +Vue.use(Vuex); + +export default new Vuex.Store({ + // Disable use-strict mode because it fails with the SDK listener. + strict: false, + modules: { + api, + block, + chain, + transaction, + ui, + account, + mosaic, + namespace, + node, + statistic + }, + state: { + destructionList: [] + }, + getters: { + destructionList: state => state.destructionList + }, + mutations: { + destructionList: (state, payload) => { + state.destructionList = payload; + } + }, + actions: { + // Initialize the store (call on mount or re-initialization). + // This handles initialization of a dependent item based on the + // key provided. + async initialize({ dispatch }, route) { + router.beforeEach((to, from, next) => dispatch('onRouteChange', { to, from, next })); + // Initialize the API. + await helper.logError(dispatch, 'api/initialize'); + switch (route.name) { + // Home + case 'home': + // Home: Requires blocks, chain, and transactions. + return Promise.all([ + helper.logError(dispatch, 'block/initialize'), + helper.logError(dispatch, 'chain/initialize'), + helper.logError(dispatch, 'transaction/initialize') + ]); + case 'statistics': + return helper.logError(dispatch, 'statistic/initialize'); + } + }, + + // Uninitialize the stores (call on app destroyed). + async uninitialize({ dispatch }) { + await Promise.all([ + dispatch('account/uninitialize'), + dispatch('block/uninitialize'), + dispatch('chain/uninitialize'), + dispatch('mosaic/uninitialize'), + dispatch('namespace/uninitialize'), + dispatch('transaction/uninitialize'), + dispatch('statistic/uninitialize'), + dispatch('node/uninitialize') + ]); + }, + + onRouteChange({ commit, getters, dispatch }, { to, from, next }) { + let destructionList = getters.destructionList; + + if (to.fullPath !== from.fullPath) { + destructionList.push({ + name: from.name, + group: from.meta.group, + keepAliveGoTo: from.meta.keepAliveGoTo, + storeNamespaces: from.meta.storeNamespaces + }); + + destructionList = destructionList.filter(el => { + if (el.keepAliveGoTo?.includes(to.meta.group) || el.name === to.name) + return true; + else { + el.storeNamespaces?.forEach(namespace => dispatch(`${namespace}/uninitialize`, null, { root: true })); + return false; + } + }); + + commit('destructionList', destructionList); + next(); + } + } + } +}); diff --git a/src/store/lock.js b/src/store/lock.js new file mode 100644 index 0000000..162c991 --- /dev/null +++ b/src/store/lock.js @@ -0,0 +1,57 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import AwaitLock from 'await-lock'; + +export default class Lock { + constructor(lock) { + this.lock = lock; + } + + static create() { + return new Lock(new AwaitLock()); + } + + // Helper method for initialize callback. + async initialize(callback, commit, dispatch, getters) { + await this.lock.acquireAsync(); + try { + if (!getters.getInitialized) { + await callback(); + commit('setInitialized', true); + } + } + finally { + this.lock.release(); + } + } + + // Helper method for uninitialize callback. + async uninitialize(callback, commit, dispatch, getters) { + await this.lock.acquireAsync(); + try { + if (getters.getInitialized) { + await callback(); + commit('setInitialized', false); + } + } + finally { + this.lock.release(); + } + } +} diff --git a/src/store/manager/DataSet.js b/src/store/manager/DataSet.js new file mode 100644 index 0000000..dc2de00 --- /dev/null +++ b/src/store/manager/DataSet.js @@ -0,0 +1,73 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +export default class DataSet { + constructor(name, initialFuntion, DataType = Object) { + if (typeof name !== 'string') + throw Error('Failed to construct DataSet. Name is not provided'); + if (typeof initialFuntion !== 'function') + throw Error('Cannot create timeline. Initial function is not provided'); + + this.name = name; + this.initialFuntion = initialFuntion; + this.DataType = DataType; + this.data = new DataType(); + this.loading = true; + this.error = false; + } + + static empty() { + return { + data: {} + }; + } + + setStore(store) { + this.store = store; + this.store.dispatch(this.name, this); + return this; + } + + async initialFetch(props) { + this.loading = true; + this.store.dispatch(this.name, this); + + try { + this.data = await this.initialFuntion(props, this.store); + } + catch (e) { + console.log(e); + this.error = true; + } + this.loading = false; + + this.store.dispatch(this.name, this); + return this; + } + + uninitialize() { + this.initialized = false; + this.data = new this.DataType(); + this.loading = false; + this.error = false; + } + + async reset() { + return this.initialFetch(); + } +} diff --git a/src/store/manager/Filter.js b/src/store/manager/Filter.js new file mode 100644 index 0000000..e1c2803 --- /dev/null +++ b/src/store/manager/Filter.js @@ -0,0 +1,118 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +export default class Filter { + constructor(name, options) { + if (typeof name !== 'string') + throw Error('Failed to construct Filter. Name is not provided'); + if (typeof options !== 'object') + throw Error('Failed to construct Filter. Options map is not provided'); + + this.name = name; + this.options = options; + this.current = Object.keys(options)[0]; + this.store = {}; + } + + setStore(store) { + this.store = store; + this.store.dispatch(this.name, this); + return this; + } + + get currentManager() { + return this.store?.getters ? this.store.getters[this.current] || {} : {}; + } + + get filterOptions() { + return this.options; + } + + get filterValue() { + return this.current; + } + + get data() { + return this.currentManager.data || []; + } + + get error() { + return typeof this.currentManager.error === 'boolean' ? this.currentManager.error : false; + } + + get loading() { + return typeof this.currentManager.loading === 'boolean' ? this.currentManager.loading : true; + } + + get canFetchPrevious() { + return typeof this.currentManager.canFetchPrevious === 'boolean' ? this.currentManager.canFetchPrevious : false; + } + + get canFetchNext() { + return typeof this.currentManager.canFetchNext === 'boolean' ? this.currentManager.canFetchNext : false; + } + + get index() { + return typeof this.currentManager.index === 'number' ? this.currentManager.index : 0; + } + + initialFetch() { + if (typeof this.currentManager.initialFetch === 'function') + return this.currentManager.initialFetch(); + else + console.error('Cannot call "initialFetch" method of', this.current); + } + + uninitialize() { + if (typeof this.currentManager.uninitialize === 'function') + return this.currentManager.uninitialize(); + } + + fetchNext() { + if (typeof this.currentManager.fetchNext === 'function') + return this.currentManager.fetchNext(); + else + console.error('Cannot call "fetchNext" method of', this.current); + } + + fetchPrevious() { + if (typeof this.currentManager.fetchPrevious === 'function') + return this.currentManager.fetchPrevious(); + else + console.error('Cannot call "fetchPrevious" method of', this.current); + } + + changeFilterValue(option) { + this.uninitialize(); + this.current = option; + + if (typeof this.currentManager.initialFetch === 'function') + this.currentManager.initialFetch(); + else + console.error('Failed to fetch selected filter option. "initialFetch" is not a function'); + + this.store.dispatch(this.name, this); + } + + reset() { + if (typeof this.currentManager.reset === 'function') + return this.currentManager.reset(); + this.current = Object.keys(this.options)[0]; + this.store.dispatch(this.name, this); + } +} diff --git a/src/store/manager/Pagination.js b/src/store/manager/Pagination.js new file mode 100644 index 0000000..e1676e3 --- /dev/null +++ b/src/store/manager/Pagination.js @@ -0,0 +1,243 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +import Constants from '../../config/constants'; + +export default class Pagination { + constructor({ name, fetchFunction, pageInfo = {}, filter }) { + if (typeof name !== 'string') + throw Error('Failed to construct Pagination. Name is not provided'); + if (typeof fetchFunction !== 'function') + throw Error('Cannot create Pagination. Fetch function is not provided'); + if (pageInfo === null || typeof pageInfo !== 'object') + throw Error('Cannot create Pagination. "pageInfo" is not an "object"'); + + this.name = name; + this.fetchFunction = fetchFunction; + this.pageInfo = { + pageNumber: pageInfo.pageNumber || 1, + pageSize: pageInfo.pageSize || Constants.pageSize + }; + this.options = filter; + this.store = {}; + + this.addLatestItem = this.addLatestItem.bind(this); + this.initialized = false; + this.loading = true; + this.error = false; + this.filterIndex = 0; + } + + static empty() { + return { + data: [], + canFetchNext: false, + canFetchPrevious: false, + fetchNext: () => { }, + fetchPrevious: () => { }, + reset: () => { } + }; + } + + get data() { + return this?.pageInfo?.data || []; + } + + get canFetchPrevious() { + return this.pageInfo.pageNumber > 1 && this.loading === false; + } + + get canFetchNext() { + return !this.pageInfo.isLastPage && this.loading === false; + } + + get isLive() { + return this.pageInfo.pageNumber === 1 || false; + } + + get pageNumber() { + return this.pageInfo.pageNumber || 1; + } + + get pageSize() { + return this.pageInfo.pageSize; + } + + get filterOptions() { + return Array.isArray(this.options) ? this.options : []; + } + + get filterValue() { + return this.filterOptions[this.filterIndex] + ? this.filterOptions[this.filterIndex].value + : undefined; + } + + /** Set Vuex.Store context + * + */ + setStore(store) { + this.store = store; + this.store.dispatch(this.name, this); + return this; + } + + /** + * Set timeline data + * @param data + */ + setData(data) { + this.pageInfo.data = data; + return this; + } + + /** Uninitialize Pagination + * + */ + uninitialize() { + this.initialized = false; + this.pageInfo.pageNumber = 1; + this.filterIndex = 0; + this.loading = false; + this.error = false; + } + + /** Initialize and fetch data + * + */ + initialFetch() { + if (!this.initialized) { + this.reset(); + this.initialized = true; + return this.fetch(); + } + } + + /** Fetch data + * + */ + async fetch() { + this.loading = true; + this.store.dispatch(this.name, this); + + try { + this.pageInfo = await this.fetchFunction(this.pageInfo, this.filterValue, this.store); + } + catch (e) { + console.error(e); + this.error = true; + } + this.loading = false; + + this.store.dispatch(this.name, this); + return this; + } + + /** Fetch next page of data + * + */ + async fetchNext() { + if (this.canFetchNext) { + this.store.dispatch(this.name, this); + this.pageInfo.pageNumber++; + await this.fetch(); + } + else + console.error('[Pagination]: cannot fetch next'); + this.loading = false; + + this.store.dispatch(this.name, this); + return this; + } + + /** Fetch previous page of data + * + */ + async fetchPrevious() { + if (this.canFetchPrevious) { + this.store.dispatch(this.name, this); + this.pageInfo.pageNumber--; + await this.fetch(); + } + else + return this.reset(); + + this.store.dispatch(this.name, this); + return this; + } + + /** Fetch data with specific page configuration + * + */ + async fetchPage(pageInfo) { + if ( + pageInfo !== null && + typeof pageInfo !== 'undefined' + ) { + this.store.dispatch(this.name, this); + if (this.pageInfo === null || typeof this.pageInfo !== 'object') { + for (const key in pageInfo) + this.pageInfo[key] = pageInfo[key]; + } + await this.fetch(); + } + else + console.error(`[Pagination]: failed to fetchWithCriteria 'pageInfo' is not an object`); + + this.store.dispatch(this.name, this); + return this; + } + + /** Change filter value by index and fetch data + * + */ + async changeFilterValue(index) { + this.uninitialize(); + this.filterIndex = index; + await this.fetch(); + this.store.dispatch(this.name, this); + return this; + } + + /** Reset Pagination and fetch data + * + */ + async reset(pageNumber = 1) { + this.pageInfo.pageNumber = pageNumber; + this.filterIndex = 0; + return this.fetch(); + } + + // Add latest item to current. + addLatestItem(item, keyName) { + if (this.isLive) { + if (this.data?.length && this.data[0][keyName] === item[keyName]) + console.error('[Pagination]: attempted to add duplicate item as a latest item'); + else { + const data = [item, ...this.data]; + + data.pop(); + + const newTimeline = [].concat.apply([], data); + + this.setData(newTimeline); + this.store.dispatch(this.name, this); + return this; + } + } + } +} diff --git a/src/store/manager/Timeline.js b/src/store/manager/Timeline.js new file mode 100644 index 0000000..501a6ef --- /dev/null +++ b/src/store/manager/Timeline.js @@ -0,0 +1,212 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +import Constants from '../../config/constants'; + +export default class Timeline { + constructor(name, initialFuntion, fetchFunction, keyName, pageSize = Constants.PageSize) { + if (typeof name !== 'string') + throw Error('Failed to construct Timeline. Name is not provided'); + // if(!(store && store.state && store.getters && store.commit && store.dispatch)) + // throw Error('Failed to construct Timeline. Store context is not provided'); + if (typeof initialFuntion !== 'function') + throw Error('Cannot create timeline. Initial function is not provided'); + if (typeof fetchFunction !== 'function') + throw Error('Cannot create timeline. Fetch function is not provided'); + if (keyName === void 0) + throw Error('Cannot create timeline. Key is not provided'); + + this.name = name; + this.initialFuntion = initialFuntion; + this.fetchFunction = fetchFunction; + this.keyName = keyName; + this.pageSize = pageSize; + this.data = []; + this.next = []; + this.index = 0; + this.keys = []; + this.loading = false; + this.error = false; + this.store = {}; + this.addLatestItem = this.addLatestItem.bind(this); + this.initialized = false; + } + + static empty() { + return { + data: [], + canFetchNext: false, + canFetchPrevious: false, + fetchNext: () => { }, + fetchPrevious: () => { }, + reset: () => { } + }; + } + + setStore(store) { + this.store = store; + this.store.dispatch(this.name, this); + return this; + } + + initialFetch() { + if (!this.initialized) { + this.initialized = true; + return this.fetch(); + } + } + + uninitialize() { + this.initialized = false; + this.data = []; + this.next = []; + this.index = 0; + this.keys = []; + this.loading = true; + this.error = false; + } + + async fetch() { + this.loading = true; + this.store.dispatch(this.name, this); + + this.index = 0; + this.keys = []; + try { + this.data = await this.initialFuntion(this.pageSize, this.store); + if (this.data?.length) { + const lastElement = this.data[this.data.length - 1]; + const key = lastElement[this.keyName]; + + this.next = await this.fetchFunction(key, this.pageSize, this.store); + this.keys.push(key); + this.createNewKey(); + } + } + catch (e) { + console.error(e); + this.error = true; + } + this.loading = false; + + this.store.dispatch(this.name, this); + return this; + } + + get canFetchPrevious() { + return this.index > 0 && this.loading === false; + } + + get canFetchNext() { + return this.next?.length > 0 && this.loading === false; + } + + get nextKeyValue() { + if (this.next?.length) + return this.next[this.next.length - 1][this.keyName]; + } + + get previousKeyValue() { + return this.keys[this.keys.length - 4]; + } + + get isLive() { + return this.index === 0; + } + + createNewKey() { + if (this.next?.length) { + const newKeyValue = this.next[this.next.length - 1][this.keyName]; + + this.keys.push(newKeyValue); + return newKeyValue; + } + else + this.keys.push(null); + } + + async fetchNext() { + if (this.canFetchNext) { + this.loading = true; + this.store.dispatch(this.name, this); + + this.data = [].concat.apply([], this.next); + try { + this.next = await this.fetchFunction(this.nextKeyValue, this.pageSize, this.store); + this.createNewKey(); + this.index++; + } + catch (e) { + this.error = true; + console.error(e); + } + } + else + console.error('Timeline cannot fetch next'); + this.loading = false; + + this.store.dispatch(this.name, this); + return this; + } + + async fetchPrevious() { + if (this.canFetchPrevious) { + this.loading = true; + this.store.dispatch(this.name, this); + + this.next = [].concat.apply([], this.data); + try { + this.data = await this.fetchFunction(this.previousKeyValue, this.pageSize, this.store); + this.keys.pop(); + this.index--; + } + catch (e) { + this.error = true; + console.error(e); + } + } + else + return this.fetch(); + this.loading = false; + + this.store.dispatch(this.name, this); + return this; + } + + async reset() { + return this.fetch(); + } + + // Add latest item to current. + addLatestItem(item, keyName = this.keyName) { + if (this.isLive) { + if (this.data?.length && this.data[0][keyName] === item[keyName]) + console.error('internal error: attempted to add duplicate item to timeline.'); + else { + const data = [item, ...this.data]; + const next = [data.pop(), ...this.next]; + + this.data = [].concat.apply([], data); + this.next.pop(); + this.next = [].concat.apply([], next); + + this.store.dispatch(this.name, this); + return this; + } + } + } +} diff --git a/src/store/manager/index.js b/src/store/manager/index.js new file mode 100644 index 0000000..203924b --- /dev/null +++ b/src/store/manager/index.js @@ -0,0 +1,38 @@ +import Vue from 'vue'; + +export { default as Filter } from './Filter'; +export { default as Timeline } from './Timeline'; +export { default as DataSet } from './DataSet'; +export { default as Pagination } from './Pagination'; + +export const getStateFromManagers = (managers) => { + let state = {}; + + for (const manager of managers) + state[manager.name] = manager; + return state; +}; + +export const getGettersFromManagers = (managers) => { + let getters = {}; + + for (const manager of managers) + getters[manager.name] = (state) => state[manager.name]; + return getters; +}; + +export const getMutationsFromManagers = (managers) => { + let mutations = {}; + + for (const manager of managers) + mutations[manager.name] = (state, payload) => Vue.set(state, manager.name, payload); + return mutations; +}; + +export const getActionsFromManagers = (managers) => { + let actions = {}; + + for (const manager of managers) + actions[manager.name] = ({ commit }, payload) => commit(manager.name, payload); + return actions; +}; diff --git a/src/store/mosaic.js b/src/store/mosaic.js new file mode 100644 index 0000000..d7159c8 --- /dev/null +++ b/src/store/mosaic.js @@ -0,0 +1,144 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import Lock from './lock'; +import { Constants, filters } from '../config'; +import { MosaicService, RestrictionService } from '../infrastructure'; +import { + DataSet, + Pagination, + getStateFromManagers, + getGettersFromManagers, + getMutationsFromManagers, + getActionsFromManagers +} from './manager'; + +const managers = [ + new Pagination({ + name: 'timeline', + fetchFunction: (pageInfo) => MosaicService.getMosaicList(pageInfo), + pageInfo: { + pageSize: Constants.PageSize + } + }), + new Pagination({ + name: 'restrictions', + fetchFunction: (pageInfo, filterValue, store) => RestrictionService.getMosaicRestrictionList(pageInfo, filterValue, store.getters.getCurrentMosaicId), + pageInfo: { + pageSize: Constants.PageSize + }, + filter: filters.mosaicRestriction + }), + new DataSet( + 'info', + (hexOrNamespace) => MosaicService.getMosaicInfo(hexOrNamespace) + ), + new Pagination({ + name: 'metadatas', + fetchFunction: (pageInfo, filterValue, store) => MosaicService.getMosaicMetadataList(pageInfo, filterValue, store.getters.getCurrentMosaicId), + pageInfo: { + pageSize: 10 + }, + filter: filters.metadata + }), + new Pagination({ + name: 'balanceTransferReceipt', + fetchFunction: (pageInfo, filterValue, store) => MosaicService.getMosaicBalanceTransferReceipt(pageInfo, store.getters.getCurrentMosaicId), + pageInfo: { + pageSize: 10 + } + }), + new Pagination({ + name: 'artifactExpiryReceipt', + fetchFunction: (pageInfo, filterValue, store) => MosaicService.getMosaicArtifactExpiryReceipt(pageInfo, store.getters.getCurrentMosaicId), + pageInfo: { + pageSize: 10 + } + }) +]; + +const LOCK = Lock.create(); + +export default { + namespaced: true, + state: { + ...getStateFromManagers(managers), + // If the state has been initialized. + initialized: false, + currentMosaicId: null + }, + getters: { + ...getGettersFromManagers(managers), + getInitialized: state => state.initialized, + getCurrentMosaicId: state => state.currentMosaicId + }, + mutations: { + ...getMutationsFromManagers(managers), + setInitialized: (state, initialized) => { + state.initialized = initialized; + }, + setCurrentMosaicId: (state, currentMosaicId) => { + state.currentMosaicId = currentMosaicId; + } + }, + actions: { + ...getActionsFromManagers(managers), + // Initialize the mosaic model. + async initialize({ commit, dispatch, getters }) { + const callback = async () => { + await dispatch('initializePage'); + }; + + await LOCK.initialize(callback, commit, dispatch, getters); + }, + + // Uninitialize the mosaic model. + async uninitialize({ commit, dispatch, getters }) { + const callback = async () => { + dispatch('uninitializeDetail'); + getters.timeline?.uninitialize(); + }; + + await LOCK.uninitialize(callback, commit, dispatch, getters); + }, + + // Fetch data from the SDK and initialize the page. + initializePage(context) { + context.getters.timeline.setStore(context).initialFetch(); + }, + + // Fetch data from the SDK. + fetchMosaicInfo(context, payload) { + context.dispatch('uninitializeDetail'); + context.commit('setCurrentMosaicId', payload.mosaicId); + context.getters.info.setStore(context).initialFetch(payload.mosaicId); + context.getters.restrictions.setStore(context).initialFetch(payload.mosaicId); + context.getters.metadatas.setStore(context).initialFetch(payload.mosaicId); + context.getters.balanceTransferReceipt.setStore(context).initialFetch(payload.mosaicId); + context.getters.artifactExpiryReceipt.setStore(context).initialFetch(payload.mosaicId); + }, + + uninitializeDetail(context) { + context.getters.info.setStore(context).uninitialize(); + context.getters.restrictions.setStore(context).uninitialize(); + context.getters.metadatas.setStore(context).uninitialize(); + context.getters.balanceTransferReceipt.setStore(context).uninitialize(); + context.getters.artifactExpiryReceipt.setStore(context).uninitialize(); + } + } +}; diff --git a/src/store/namespace.js b/src/store/namespace.js new file mode 100644 index 0000000..32cf2c3 --- /dev/null +++ b/src/store/namespace.js @@ -0,0 +1,141 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import Lock from './lock'; +import { Constants, filters } from '../config'; +import { NamespaceService } from '../infrastructure'; +import { + DataSet, + Pagination, + getStateFromManagers, + getGettersFromManagers, + getMutationsFromManagers, + getActionsFromManagers +} from './manager'; + +const LOCK = Lock.create(); + +const managers = [ + new Pagination({ + name: 'timeline', + fetchFunction: (pageInfo, filterVaule) => NamespaceService.getNamespaceList(pageInfo, filterVaule), + pageInfo: { + pageSize: Constants.PageSize + }, + filter: filters.namespace + }), + new DataSet( + 'info', + (namespaceOrHex) => NamespaceService.getNamespaceInfo(namespaceOrHex) + ), + new DataSet( + 'namespaceLevel', + (namespaceOrHex) => NamespaceService.getNamespaceLevelList(namespaceOrHex) + ), + new Pagination({ + name: 'metadatas', + fetchFunction: (pageInfo, filterValue, store) => NamespaceService.getNamespaceMetadataList(pageInfo, filterValue, store.getters.getCurrentNamespaceId), + pageInfo: { + pageSize: 10 + }, + filter: filters.metadata + }), + new Pagination({ + name: 'balanceTransferReceipt', + fetchFunction: (pageInfo, filterValue, store) => NamespaceService.getNamespaceBalanceTransferReceipt(pageInfo, store.getters.getCurrentNamespaceId), + pageInfo: { + pageSize: 10 + } + }), + new Pagination({ + name: 'artifactExpiryReceipt', + fetchFunction: (pageInfo, filterValue, store) => NamespaceService.getNamespaceArtifactExpiryReceipt(pageInfo, store.getters.getCurrentNamespaceId), + pageInfo: { + pageSize: 10 + } + }) +]; + +export default { + namespaced: true, + state: { + // If the state has been initialized. + initialized: false, + ...getStateFromManagers(managers), + currentNamespaceId: null + }, + getters: { + getInitialized: state => state.initialized, + getCurrentNamespaceId: state => state.currentNamespaceId, + ...getGettersFromManagers(managers) + }, + mutations: { + setInitialized: (state, initialized) => { + state.initialized = initialized; + }, + setCurrentNamespaceId: (state, currentNamespaceId) => { + state.currentNamespaceId = currentNamespaceId; + }, + ...getMutationsFromManagers(managers) + }, + actions: { + ...getActionsFromManagers(managers), + // Initialize the namespace model. + async initialize({ commit, dispatch, getters }) { + const callback = async () => { + await dispatch('initializePage'); + }; + + await LOCK.initialize(callback, commit, dispatch, getters); + }, + + // Uninitialize the namespace model. + async uninitialize({ commit, dispatch, getters }) { + const callback = async () => { + dispatch('uninitializeDetail'); + getters.timeline?.uninitialize(); + }; + + await LOCK.uninitialize(callback, commit, dispatch, getters); + }, + + // Fetch data from the SDK and initialize the page. + initializePage(context) { + context.getters.timeline.setStore(context).initialFetch(); + }, + + // Fetch data from the SDK. + fetchNamespaceInfo(context, payload) { + context.dispatch('uninitializeDetail'); + context.commit('setCurrentNamespaceId', payload.namespaceId); + context.getters.info.setStore(context).initialFetch(payload.namespaceId); + context.getters.namespaceLevel.setStore(context).initialFetch(payload.namespaceId); + context.getters.metadatas.setStore(context).initialFetch(payload.namespaceId); + context.getters.balanceTransferReceipt.setStore(context).initialFetch(payload.namespaceId); + context.getters.artifactExpiryReceipt.setStore(context).initialFetch(payload.namespaceId); + }, + + uninitializeDetail(context) { + context.getters.info.setStore(context).uninitialize(); + context.getters.namespaceLevel.setStore(context).uninitialize(); + context.getters.metadatas.setStore(context).uninitialize(); + context.getters.balanceTransferReceipt.setStore(context).uninitialize(); + context.getters.artifactExpiryReceipt.setStore(context).uninitialize(); + } + } +}; diff --git a/src/store/node.js b/src/store/node.js new file mode 100644 index 0000000..ef1dae3 --- /dev/null +++ b/src/store/node.js @@ -0,0 +1,127 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import Lock from './lock'; +import { NodeService } from '../infrastructure'; +import { filters } from '../config'; +import { + Pagination, + DataSet, + getStateFromManagers, + getGettersFromManagers, + getMutationsFromManagers, + getActionsFromManagers +} from './manager'; + +const managers = [ + new Pagination({ + name: 'timeline', + fetchFunction: (pageInfo, filterValue) => NodeService.getNodePeerList(filterValue), + filter: filters.nodeRoles + }), + new DataSet( + 'nodeStats', + () => NodeService.getNodeStats() + ), + new DataSet( + 'info', + (publicKey) => NodeService.getNodeInfo(publicKey) + ), + new DataSet( + 'nodeRewards', + (publicKey) => NodeService.getNodeRewardsInfo(publicKey) + ), + new Pagination({ + name: 'payouts', + fetchFunction: (pageInfo, filter, store) => NodeService.getNodePayouts(pageInfo, store.getters.nodeRewards.data?.nodeInfo?.id, filter), + filter: filters.payouts + }) +]; + +const LOCK = Lock.create(); + +export default { + namespaced: true, + state: { + // If the state has been initialized. + initialized: false, + ...getStateFromManagers(managers) + }, + getters: { + getInitialized: state => state.initialized, + ...getGettersFromManagers(managers), + mapInfo: state => [ state.info?.data?.hostDetail ], + peerStatus: state => state.info?.data?.peerStatus, + apiStatus: state => state.info?.data?.apiStatus, + chainInfo: state => state.info?.data?.chainInfo, + hostDetail: state => state.info?.data?.hostDetail, + hostInfoManager: (state, getters) => ({ + loading: getters.timeline?.loading || + getters.info?.loading, + error: getters.timeline?.error || + getters.info?.error + }) + }, + mutations: { + setInitialized: (state, initialized) => { + state.initialized = initialized; + }, + ...getMutationsFromManagers(managers) + }, + actions: { + ...getActionsFromManagers(managers), + // Initialize the node model. + async initialize({ commit, dispatch, getters }) { + const callback = async () => { + await dispatch('initializePage'); + }; + + await LOCK.initialize(callback, commit, dispatch, getters); + }, + + // Uninitialize the node model. + async uninitialize({ commit, dispatch, getters }) { + const callback = async () => { + getters.timeline?.uninitialize(); + getters.nodeStats?.uninitialize(); + }; + + await LOCK.uninitialize(callback, commit, dispatch, getters); + }, + + // Fetch data from the SDK and initialize the page. + async initializePage(context) { + await context.getters.timeline.setStore(context).initialFetch(); + context.getters.nodeStats.setStore(context).initialFetch(); + }, + + // Fetch data from the SDK. + async fetchNodeInfo(context, payload) { + context.dispatch('uninitializeDetail'); + context.getters.info.setStore(context).initialFetch(Object.values(payload)[0]); + await context.getters.nodeRewards.setStore(context).initialFetch(Object.values(payload)[0]); + await context.getters.payouts.setStore(context).initialFetch(); + }, + + uninitializeDetail(context) { + context.getters.info.setStore(context).uninitialize(); + context.getters.nodeRewards.setStore(context).uninitialize(); + context.getters.payouts.setStore(context).uninitialize(); + } + } +}; diff --git a/src/store/statistic.js b/src/store/statistic.js new file mode 100644 index 0000000..5e3e017 --- /dev/null +++ b/src/store/statistic.js @@ -0,0 +1,164 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import Lock from './lock'; +import { NetworkService, StatisticService, BlockService } from '../infrastructure'; +import { Order } from 'symbol-sdk'; +import { + getStateFromManagers, + getGettersFromManagers, + getMutationsFromManagers, + getActionsFromManagers +} from './manager'; + +const managers = [ +]; + +const LOCK = Lock.create(); + +export default { + namespaced: true, + state: { + // If the state has been initialized. + ...getStateFromManagers(managers), + initialized: false, + loading: true, + loadingInfo: true, + loadingBlockTimeDifference: true, + loadingTransactionPerBlock: true, + error: false, + networkTransactionFees: [], + networkRentalFees: [], + blockTimeDifferenceData: [], + transactionPerBlockData: [] + }, + getters: { + ...getGettersFromManagers(managers), + getInitialized: state => state.initialized, + getLoading: state => state.loading, + getLoadingInfo: state => state.loadingInfo, + getLoadingBlockTimeDifference: state => state.loadingBlockTimeDifference, + getLoadingTransactionPerBlock: state => state.loadingTransactionPerBlock, + getError: state => state.error, + getNetworkTransactionFees: state => state.networkTransactionFees, + getNetworkRentalFees: state => state.networkRentalFees, + getBlockTimeDifferenceData: state => state.blockTimeDifferenceData, + getTransactionPerBlockData: state => state.transactionPerBlockData + }, + mutations: { + ...getMutationsFromManagers(managers), + setInitialized: (state, initialized) => { + state.initialized = initialized; + }, + setLoading: (state, loading) => { + state.loading = loading; + }, + setLoadingInfo: (state, loadingInfo) => { + state.loadingInfo = loadingInfo; + }, + setLoadingBlockTimeDifference: (state, loadingBlockTimeDifference) => { + state.loadingBlockTimeDifference = loadingBlockTimeDifference; + }, + setLoadingTransactionPerBlock: (state, loadingTransactionPerBlock) => { + state.loadingTransactionPerBlock = loadingTransactionPerBlock; + }, + setError: (state, error) => { + state.error = error; + }, + setNetworkTransactionFees: (state, networkTransactionFees) => { + state.networkTransactionFees = networkTransactionFees; + }, + setNetworkRentalFees: (state, networkRentalFees) => { + state.networkRentalFees = networkRentalFees; + }, + setBlockTimeDifferenceData: (state, blockTimeDifferenceData) => { + state.blockTimeDifferenceData = blockTimeDifferenceData; + }, + setTransactionPerBlockData: (state, transactionPerBlockData) => { + state.transactionPerBlockData = transactionPerBlockData; + } + }, + actions: { + ...getActionsFromManagers(managers), + // Initialize the statistics model. + async initialize({ commit, dispatch, getters }) { + const callback = async () => { + await dispatch('initializePage'); + }; + + await LOCK.initialize(callback, commit, dispatch, getters); + }, + + // Uninitialize the statistics model. + async uninitialize({ commit, dispatch, getters }) { + const callback = async () => {}; + + await LOCK.uninitialize(callback, commit, dispatch, getters); + }, + + // Fetch data from the SDK / API and initialize the page. + async initializePage(context) { + context.commit('setLoading', true); + context.commit('setLoadingInfo', true); + context.commit('setLoadingBlockTimeDifference', true); + context.commit('setLoadingTransactionPerBlock', true); + + context.commit('setError', false); + try { + let transactionFeesInfo = await NetworkService.getTransactionFeesInfo(); + + let rentalFeesInfo = await NetworkService.getRentalFeesInfo(); + + context.commit('setNetworkTransactionFees', transactionFeesInfo); + context.commit('setNetworkRentalFees', rentalFeesInfo); + context.commit('setLoadingInfo', false); + + const searchCriteria = { + pageSize: 100, + order: Order.Desc + }; + + const blocks = await BlockService.streamerBlocks(searchCriteria, 300); + + const btdPromise = async () => { + let blockTimeDifferenceDataset = StatisticService.getBlockTimeDifferenceData(blocks, 60); + + context.commit('setBlockTimeDifferenceData', blockTimeDifferenceDataset); + context.commit('setLoadingBlockTimeDifference', false); + }; + + const tpbPromise = async () => { + let transactionPerBlockDataset = StatisticService.getTransactionPerBlockData(blocks, 60); + + context.commit('setTransactionPerBlockData', transactionPerBlockDataset); + context.commit('setLoadingTransactionPerBlock', false); + }; + + await Promise.all([ + btdPromise(), + tpbPromise() + ]); + } + catch (e) { + console.error(e); + context.commit('setError', true); + } + context.commit('setLoading', false); + } + } +}; diff --git a/src/store/timeline.js b/src/store/timeline.js new file mode 100644 index 0000000..9c27d56 --- /dev/null +++ b/src/store/timeline.js @@ -0,0 +1,123 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +import Constants from '../config/constants'; + +export default class Timeline { + constructor(previous, current, next, index, pageSize = Constants.PageSize) { + this.previous = previous; + this.current = current; + this.next = next; + this.index = index; + this.pageSize = pageSize; + } + + static empty() { + return new Timeline([], [], [], 0); + } + + static fromData(data, isPagination = true, pageSize = Constants.PageSize) { + // check isPagination active + if (!isPagination) + return new Timeline([], data, [], 0); + + // Break data for the initial list into the current and next. + const previous = []; + const current = data.slice(0, pageSize); + const next = data.slice(pageSize, 2 * pageSize); + const index = 0; + + return new Timeline(previous, current, next, index, pageSize); + } + + get isLive() { + return this.index === 0; + } + + get canFetchPrevious() { + return this.previous.length !== 0; + } + + get canFetchNext() { + return this.next.length !== 0; + } + + // Add latest item to current. + addLatestItem(item, key) { + if (!this.isLive) + throw new Error('internal error: attempted to addLatestItem for non-live timeline.'); + + if (this.current[0][key] === item[key]) + throw new Error('internal error: attempted to add duplicate item to timeline.'); + + const data = [item, ...this.current, ...this.next]; + + return Timeline.fromData(data, undefined, this.pageSize); + } + + // Add data fetched from previous. + async shiftPrevious(fetchPrevious, fetchLive) { + if (this.index > 1) { + // Fetch previous. + let previous = []; + + try { + previous = await fetchPrevious(this.pageSize); + } + catch (e) { + console.error(e); + } + + return new Timeline(previous, this.previous, this.current, this.index - 1, this.pageSize); + } + else { + // Fetch live. + let data = []; + + try { + data = await fetchLive(2 * this.pageSize); + } + catch (e) { + console.error(e); + } + + return Timeline.fromData(data, undefined, this.pageSize); + } + } + + // Add data fetched from next. + async shiftNext(fetchNext) { + let next = []; + + try { + next = await fetchNext(this.pageSize); + } + catch (e) { + console.error(e); + } + + return new Timeline(this.current, this.next, next, this.index + 1, this.pageSize); + } + + // Prepend item to array. + static prependItem(list, item, pageSize = Constants.PageSize) { + if (list.length >= pageSize) + list.pop(); + + list.unshift(item); + } +} diff --git a/src/store/transaction.js b/src/store/transaction.js new file mode 100644 index 0000000..f68df6d --- /dev/null +++ b/src/store/transaction.js @@ -0,0 +1,157 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import Lock from './lock'; +import { filters, Constants } from '../config'; +import { TransactionService } from '../infrastructure'; +import { + DataSet, + Pagination, + getStateFromManagers, + getGettersFromManagers, + getMutationsFromManagers, + getActionsFromManagers +} from './manager'; + +const managers = [ + new Pagination({ + name: 'timeline', + fetchFunction: (pageInfo, filterValue) => TransactionService.getTransactionList(pageInfo, filterValue), + pageInfo: { + pageSize: Constants.PageSize + }, + filter: filters.transaction + }), + new DataSet( + 'info', + (hash) => TransactionService.getTransactionInfo(hash) + ), + new DataSet( + 'hashLock', + (hash) => TransactionService.getHashLockInfo(hash) + ) +]; + +const LOCK = Lock.create(); + +export default { + namespaced: true, + state: { + ...getStateFromManagers(managers), + // If the state has been initialized. + initialized: false + }, + getters: { + ...getGettersFromManagers(managers), + getInitialized: state => state.initialized, + transactionInfo: state => state.info?.data?.transactionInfo || {}, + transactionDetail: state => state.info?.data?.transactionBody || {}, + aggregateInnerTransactions: state => state.info?.data?.innerTransactions || [], + aggregateCosignatures: state => state.info?.data?.cosignatures || [], + getRecentList: state => state.timeline?.data?.filter((item, index) => index < 4) || [], + transactionSchema: (state, getters) => ({ + loading: getters.info.loading, + error: getters.info.error, + data: getters.info.data?.innerTransactions + ? { + ...getters.info.data, + ...getters.transactionDetail, + type: getters.info.data?.type, + innerTransactions: getters.info.data.innerTransactions.map(transaction => ({ + ...transaction, + ...transaction.transactionInfo, + ...transaction.transactionBody + })) + } + : { + ...getters.info.data, + ...getters.transactionDetail + } + }) + }, + mutations: { + ...getMutationsFromManagers(managers), + setInitialized: (state, initialized) => { + state.initialized = initialized; + } + }, + actions: { + ...getActionsFromManagers(managers), + + // Initialize the transaction model. First fetch the page, then subscribe. + async initialize({ commit, dispatch, getters }) { + const callback = async () => { + await dispatch('initializePage'); + await dispatch('subscribe'); + }; + + await LOCK.initialize(callback, commit, dispatch, getters); + }, + + // Uninitialize the transaction model. + async uninitialize({ commit, dispatch, getters }) { + const callback = async () => { + dispatch('unsubscribe'); + dispatch('uninitializeDetail'); + getters.timeline?.uninitialize(); + }; + + await LOCK.uninitialize(callback, commit, dispatch, getters); + }, + + // Subscribe to the latest transactions. + async subscribe({ commit, dispatch, getters }) { + // TODO(ahuszagh) Implement... + }, + + // Unsubscribe from the latest transactions. + unsubscribe({ commit, getters }) { + let subscription = getters.getSubscription; + + if (subscription?.length === 2) { + subscription[1].unsubscribe(); + subscription[0].close(); + commit('setSubscription', null); + } + }, + + // Add transaction to latest transactions. + add({ commit }, item) { + // TODO(ahuszagh) Also need to rework this. + // Need to consider transaction type. + // commit('chain/setTransactionHash', item.transactionHash, { root: true }) + // commit('addLatestItem', item) + }, + + // Fetch data from the SDK and initialize the page. + initializePage(context) { + context.getters.timeline.setStore(context).initialFetch(); + }, + + getTransactionInfoByHash(context, payload) { + context.dispatch('uninitializeDetail'); + context.getters.info.setStore(context).initialFetch(payload.transactionHash); + context.getters.hashLock.setStore(context).initialFetch(payload.transactionHash); + }, + + uninitializeDetail(context) { + context.getters.info.setStore(context).uninitialize(); + context.getters.hashLock.setStore(context).uninitialize(); + } + } +}; diff --git a/src/store/ui.js b/src/store/ui.js new file mode 100644 index 0000000..277a7bc --- /dev/null +++ b/src/store/ui.js @@ -0,0 +1,197 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +import router from '../router'; +import { Address, AccountHttp } from 'symbol-sdk'; +import { i18n, keyRedirects } from '../config'; +import { NamespaceService, MosaicService, AccountService } from '../infrastructure'; +import Vue from 'vue'; +import helper from '../helper'; + +export default { + namespaced: true, + state: { + languages: i18n.languages, + currentLanguage: localStorage.getItem('userLanguage'), + keyPages: keyRedirects + }, + + getters: { + getNameByKey: state => key => i18n.getName(key), + languages: state => state.languages, + currentLanguage: state => state.currentLanguage, + + getPageHref: state => payload => { + if (payload.pageName); + { + let key = payload.pageName; + + let pageName = state.keyPages[key] || key; + + let value = payload.param; + + if (value != null) + return `/${pageName}/${value}`; + else + return `/${pageName}`; + } + }, + + isMobile() { + const agent = navigator.userAgent || navigator.vendor || window.opera; + + let check = false; + + if ( + /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i + .test(agent) || + /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i + .test(agent.substr(0, 4)) + ) + check = true; + else if (Vue.config.devtools && window.innerWidth <= 800 && window.innerHeight <= 600) + check = true; + + return check; + } + }, + + mutations: { + + }, + actions: { + openPage: ({ state }, payload) => { + if (payload.pageName); + { + let key = payload.pageName; + + let pageName = state.keyPages[key] || key; + + let value = payload.param; + + if (value != null) + router.push({ path: `/${pageName}/${value}` }); + else + router.push({ path: `/${pageName}` }); + } + }, + + search: ({ dispatch, rootGetters }, searchString) => { + return new Promise(async (resolve, reject) => { + if (searchString !== null && searchString !== '') { + searchString = searchString.replace(/\s|-/g, ''); + if (helper.isBlockHeight(searchString)) { + dispatch('openPage', { + pageName: 'block', + param: searchString + }); + resolve(); + } + else + if (helper.isAccountPublicKey(searchString)) { + // check the string is a public key of an account + + const api = rootGetters['api/currentNode'].url; + + let accountHttp = new AccountHttp(api); + + let accountAddress; + + let accountInfo; + + try { + accountInfo = await accountHttp + .getAccountInfo(new Address(searchString)) + .toPromise(); + accountAddress = accountInfo.address.address; + } + catch (e) { } + if (accountAddress) { + dispatch('openPage', { + pageName: 'account', + param: accountAddress + }); + resolve(); + } + else { + // transaction hash + dispatch('openPage', { + pageName: 'transaction', + param: searchString + }); + resolve(); + } + } + else + if (helper.isAccountAddress(searchString)) { + dispatch('openPage', { + pageName: 'account', + param: searchString + }); + resolve(); + } + else + if (helper.isMosaicOrNamespaceId(searchString)) { + let result = void 0; + + try { + result = await MosaicService.getMosaicInfo(searchString); + if (result) { + dispatch('openPage', { + pageName: 'mosaic', + param: searchString + }); + resolve(); + } + } + catch (e) {} + } + else { + try { + let result = await NamespaceService.getNamespaceInfo(searchString); + + if (result) { + dispatch('openPage', { + pageName: 'namespace', + param: searchString + }); + resolve(); + } + } + catch (e) { + const isNisAddress = await AccountService.checkNis1Account(searchString); + + if (isNisAddress) + reject(new Error('errorNisAddressNotAllowed')); + + reject(new Error('errorNothingFound')); + } + } + } + else + reject(new Error('errorNothingFound')); + }); + }, + + changeLanguage: ({ state }, language) => { + if (language !== null && + language !== void 0) + i18n.setCurrentLanguage(language); + else throw Error('Cannot change language. language is not supported: ' + language); + } + } +}; diff --git a/src/styles/img/connector_bg_1.png b/src/styles/img/connector_bg_1.png new file mode 100644 index 0000000..223460a Binary files /dev/null and b/src/styles/img/connector_bg_1.png differ diff --git a/src/styles/img/connector_blue.png b/src/styles/img/connector_blue.png new file mode 100644 index 0000000..6a7b9df Binary files /dev/null and b/src/styles/img/connector_blue.png differ diff --git a/src/styles/img/connector_blue1.png b/src/styles/img/connector_blue1.png new file mode 100644 index 0000000..59637c3 Binary files /dev/null and b/src/styles/img/connector_blue1.png differ diff --git a/src/styles/img/connector_green.png b/src/styles/img/connector_green.png new file mode 100644 index 0000000..af1f4c7 Binary files /dev/null and b/src/styles/img/connector_green.png differ diff --git a/src/styles/img/connector_green1.png b/src/styles/img/connector_green1.png new file mode 100644 index 0000000..6044832 Binary files /dev/null and b/src/styles/img/connector_green1.png differ diff --git a/src/styles/img/connector_orange.png b/src/styles/img/connector_orange.png new file mode 100644 index 0000000..c5fbe3d Binary files /dev/null and b/src/styles/img/connector_orange.png differ diff --git a/src/styles/img/connector_orange1.png b/src/styles/img/connector_orange1.png new file mode 100644 index 0000000..6fd3397 Binary files /dev/null and b/src/styles/img/connector_orange1.png differ diff --git a/src/styles/img/connector_pink.png b/src/styles/img/connector_pink.png new file mode 100644 index 0000000..54694a9 Binary files /dev/null and b/src/styles/img/connector_pink.png differ diff --git a/src/styles/img/connector_pink1.png b/src/styles/img/connector_pink1.png new file mode 100644 index 0000000..d6bd71e Binary files /dev/null and b/src/styles/img/connector_pink1.png differ diff --git a/src/styles/img/connector_uncolored.png b/src/styles/img/connector_uncolored.png new file mode 100644 index 0000000..3b52008 Binary files /dev/null and b/src/styles/img/connector_uncolored.png differ diff --git a/src/styles/img/connector_uncolored_2.png b/src/styles/img/connector_uncolored_2.png new file mode 100644 index 0000000..bf2dbe5 Binary files /dev/null and b/src/styles/img/connector_uncolored_2.png differ diff --git a/src/styles/img/copy.png b/src/styles/img/copy.png new file mode 100644 index 0000000..bd00030 Binary files /dev/null and b/src/styles/img/copy.png differ diff --git a/src/styles/img/false.png b/src/styles/img/false.png new file mode 100644 index 0000000..c8f2c2b Binary files /dev/null and b/src/styles/img/false.png differ diff --git a/src/styles/img/finalized.png b/src/styles/img/finalized.png new file mode 100644 index 0000000..940b2ec Binary files /dev/null and b/src/styles/img/finalized.png differ diff --git a/src/styles/img/logo-f-w.dhealth.png b/src/styles/img/logo-f-w.dhealth.png new file mode 100644 index 0000000..722df38 Binary files /dev/null and b/src/styles/img/logo-f-w.dhealth.png differ diff --git a/src/styles/img/logo-f-w.png b/src/styles/img/logo-f-w.png new file mode 100644 index 0000000..240684c Binary files /dev/null and b/src/styles/img/logo-f-w.png differ diff --git a/src/styles/img/logo-f-w.symbol.png b/src/styles/img/logo-f-w.symbol.png new file mode 100644 index 0000000..828291b Binary files /dev/null and b/src/styles/img/logo-f-w.symbol.png differ diff --git a/src/styles/img/logo-f-w.yourdlt.png b/src/styles/img/logo-f-w.yourdlt.png new file mode 100644 index 0000000..240684c Binary files /dev/null and b/src/styles/img/logo-f-w.yourdlt.png differ diff --git a/src/styles/img/logo-green.png b/src/styles/img/logo-green.png new file mode 100644 index 0000000..b883b55 Binary files /dev/null and b/src/styles/img/logo-green.png differ diff --git a/src/styles/img/logo-w.png b/src/styles/img/logo-w.png new file mode 100644 index 0000000..6aae080 Binary files /dev/null and b/src/styles/img/logo-w.png differ diff --git a/src/styles/img/logo_16.png b/src/styles/img/logo_16.png new file mode 100644 index 0000000..a9bfbbb Binary files /dev/null and b/src/styles/img/logo_16.png differ diff --git a/src/styles/img/logo_256.png b/src/styles/img/logo_256.png new file mode 100644 index 0000000..bc82231 Binary files /dev/null and b/src/styles/img/logo_256.png differ diff --git a/src/styles/img/logo_32.png b/src/styles/img/logo_32.png new file mode 100644 index 0000000..a9bfbbb Binary files /dev/null and b/src/styles/img/logo_32.png differ diff --git a/src/styles/img/logo_500.png b/src/styles/img/logo_500.png new file mode 100644 index 0000000..d62e646 Binary files /dev/null and b/src/styles/img/logo_500.png differ diff --git a/src/styles/img/logo_64.png b/src/styles/img/logo_64.png new file mode 100644 index 0000000..8d8ba22 Binary files /dev/null and b/src/styles/img/logo_64.png differ diff --git a/src/styles/img/logo_bkg.png b/src/styles/img/logo_bkg.png new file mode 100644 index 0000000..698d013 Binary files /dev/null and b/src/styles/img/logo_bkg.png differ diff --git a/src/styles/img/node-ico.png b/src/styles/img/node-ico.png new file mode 100644 index 0000000..7fcef0b Binary files /dev/null and b/src/styles/img/node-ico.png differ diff --git a/src/styles/img/node-marker-2.png b/src/styles/img/node-marker-2.png new file mode 100644 index 0000000..b113867 Binary files /dev/null and b/src/styles/img/node-marker-2.png differ diff --git a/src/styles/img/node-marker-3.png b/src/styles/img/node-marker-3.png new file mode 100644 index 0000000..dd30638 Binary files /dev/null and b/src/styles/img/node-marker-3.png differ diff --git a/src/styles/img/node-marker-4.png b/src/styles/img/node-marker-4.png new file mode 100644 index 0000000..ee035a5 Binary files /dev/null and b/src/styles/img/node-marker-4.png differ diff --git a/src/styles/img/node-marker.png b/src/styles/img/node-marker.png new file mode 100644 index 0000000..4359f07 Binary files /dev/null and b/src/styles/img/node-marker.png differ diff --git a/src/styles/img/node_reputation.png b/src/styles/img/node_reputation.png new file mode 100644 index 0000000..dcbd12b Binary files /dev/null and b/src/styles/img/node_reputation.png differ diff --git a/src/styles/img/signature.png b/src/styles/img/signature.png new file mode 100644 index 0000000..18cde1e Binary files /dev/null and b/src/styles/img/signature.png differ diff --git a/src/styles/img/symbol_connector_crop2.jpg b/src/styles/img/symbol_connector_crop2.jpg new file mode 100644 index 0000000..45277ae Binary files /dev/null and b/src/styles/img/symbol_connector_crop2.jpg differ diff --git a/src/styles/img/symbol_connector_white_aw.png b/src/styles/img/symbol_connector_white_aw.png new file mode 100644 index 0000000..d9d2a17 Binary files /dev/null and b/src/styles/img/symbol_connector_white_aw.png differ diff --git a/src/styles/img/symbol_logo_white_aw.png b/src/styles/img/symbol_logo_white_aw.png new file mode 100644 index 0000000..3a500fb Binary files /dev/null and b/src/styles/img/symbol_logo_white_aw.png differ diff --git a/src/styles/img/symbol_logo_white_testnet.png b/src/styles/img/symbol_logo_white_testnet.png new file mode 100644 index 0000000..0c15e39 Binary files /dev/null and b/src/styles/img/symbol_logo_white_testnet.png differ diff --git a/src/styles/img/tnp_bg.png b/src/styles/img/tnp_bg.png new file mode 100644 index 0000000..adca425 Binary files /dev/null and b/src/styles/img/tnp_bg.png differ diff --git a/src/styles/img/true.png b/src/styles/img/true.png new file mode 100644 index 0000000..e44a432 Binary files /dev/null and b/src/styles/img/true.png differ diff --git a/src/styles/img/tx-account-link.png b/src/styles/img/tx-account-link.png new file mode 100644 index 0000000..5167d52 Binary files /dev/null and b/src/styles/img/tx-account-link.png differ diff --git a/src/styles/img/tx-aggregate.png b/src/styles/img/tx-aggregate.png new file mode 100644 index 0000000..56b04b8 Binary files /dev/null and b/src/styles/img/tx-aggregate.png differ diff --git a/src/styles/img/tx-incoming.png b/src/styles/img/tx-incoming.png new file mode 100644 index 0000000..9bcdfe6 Binary files /dev/null and b/src/styles/img/tx-incoming.png differ diff --git a/src/styles/img/tx-lock.png b/src/styles/img/tx-lock.png new file mode 100644 index 0000000..258fa3d Binary files /dev/null and b/src/styles/img/tx-lock.png differ diff --git a/src/styles/img/tx-metadata.png b/src/styles/img/tx-metadata.png new file mode 100644 index 0000000..e38a196 Binary files /dev/null and b/src/styles/img/tx-metadata.png differ diff --git a/src/styles/img/tx-mosaic.png b/src/styles/img/tx-mosaic.png new file mode 100644 index 0000000..04932b5 Binary files /dev/null and b/src/styles/img/tx-mosaic.png differ diff --git a/src/styles/img/tx-multisig.png b/src/styles/img/tx-multisig.png new file mode 100644 index 0000000..386a20d Binary files /dev/null and b/src/styles/img/tx-multisig.png differ diff --git a/src/styles/img/tx-namespace.png b/src/styles/img/tx-namespace.png new file mode 100644 index 0000000..0b9c5bd Binary files /dev/null and b/src/styles/img/tx-namespace.png differ diff --git a/src/styles/img/tx-outgoing-2.png b/src/styles/img/tx-outgoing-2.png new file mode 100644 index 0000000..494f70a Binary files /dev/null and b/src/styles/img/tx-outgoing-2.png differ diff --git a/src/styles/img/tx-outgoing.png b/src/styles/img/tx-outgoing.png new file mode 100644 index 0000000..5df1cc7 Binary files /dev/null and b/src/styles/img/tx-outgoing.png differ diff --git a/src/styles/img/tx-restriction.png b/src/styles/img/tx-restriction.png new file mode 100644 index 0000000..9fd5ff3 Binary files /dev/null and b/src/styles/img/tx-restriction.png differ diff --git a/src/styles/img/tx-transfer.png b/src/styles/img/tx-transfer.png new file mode 100644 index 0000000..9706afb Binary files /dev/null and b/src/styles/img/tx-transfer.png differ diff --git a/src/styles/main.scss b/src/styles/main.scss new file mode 100644 index 0000000..67aedf5 --- /dev/null +++ b/src/styles/main.scss @@ -0,0 +1,74 @@ +@import url('https://fonts.googleapis.com/css?family=Noto+Sans&display=swap'); + +$primary: $primary-color; +$secondary: $secondary-color; +$info: $secondary-color; +$danger: $red-color; +$pink: $pink-color; +$blue: $blue-color; +$green: $green-color; +$orange: $orange-color; +$dark-white: $dark-white-color; + +$grid-breakpoints: ( + xxxs: 0, + xxs: 320px, + xs: 568px, + sm: 667px, + md: 768px, + lg: 992px, + xl: 1920px +); + +$container-max-widths: ( + xxxs: 0, + xxs: 320px, + xs: 568px, + sm: 667px, + md: 768px, + lg: 992px, + xl: 1920px +); + +$theme-colors: () !default; +$theme-colors: map-merge( + ( + 'primary': $primary, + 'secondary': $secondary, + 'success': $green, + 'info': $info, + 'warning': $orange, + 'title': $pink + ), + $theme-colors +); + +@import '../../node_modules/bootstrap/scss/bootstrap'; +@import '../../node_modules/bootstrap-vue/src/index.scss'; +@import './marker-cluster.scss'; + +.border-transparent { + border-color: transparent; +} + +.bg-transparent { + background: transparent; +} + +body { + font-family: 'Noto Sans', sans-serif; +} + +a { + font-weight: 600; +} + +// a { +// color: var(--secondary); +// text-decoration: none; + +// :hover { +// color: var(--pink); +// text-decoration: none; +// } +// } diff --git a/src/styles/marker-cluster.scss b/src/styles/marker-cluster.scss new file mode 100644 index 0000000..eb3d4bb --- /dev/null +++ b/src/styles/marker-cluster.scss @@ -0,0 +1,225 @@ +.marker-cluster-small { + background-color: #5200c6bb; +} + +.marker-cluster-small div { + background-color: #5200c6; +} + +.marker-cluster-medium { + background-color: #a502bebb; +} + +.marker-cluster-medium div { + background-color: #a502be; +} + +.marker-cluster-large { + background-color: #f0fb; +} + +.marker-cluster-large div { + background-color: #f0f; +} + + /* IE 6-8 fallback colors */ +.leaflet-oldie .marker-cluster-small { + background-color: #5200c6; +} + +.leaflet-oldie .marker-cluster-small div { + background-color: #5200c6; +} + +.leaflet-oldie .marker-cluster-medium { + background-color: #a502be; +} + +.leaflet-oldie .marker-cluster-medium div { + background-color: #a502be; +} + +.leaflet-oldie .marker-cluster-large { + background-color: #f0f; +} + +.leaflet-oldie .marker-cluster-large div { + background-color: #f0f; +} + +.marker-cluster { + background-clip: padding-box; + border-radius: 20px; +} + +.marker-cluster div { + width: 30px; + height: 30px; + margin-left: 5px; + margin-top: 5px; + + text-align: center; + border-radius: 15px; + color: #fff; + font-family: 'Noto Sans', sans-serif; + font-weight: bold; +} + +.marker-cluster span { + line-height: 30px; +} + + +// .marker-cluster-xs { +// border-radius: 10px; +// width: 20px; +// height: 20px; + +// border-color: #ff00ff; +// border-width: 3px; +// border-style: solid; +// background-color: #44004e; +// text-align: center; +// font-size: 12px; +// color: #fff; +// font-family: 'Noto Sans', sans-serif; +// font-weight: bold; +// padding-top: 10px; +// box-sizing: border-box; +// } + +// .marker-cluster-s { +// border-radius: 12px; +// width: 24px; +// height: 24px; + +// border-color: #ff00ff; +// border-width: 3px; +// border-style: solid; +// background-color: #44004e; +// text-align: center; +// font-size: 12px; +// color: #fff; +// font-family: 'Noto Sans', sans-serif; +// font-weight: bold; +// padding-top: 10px; +// box-sizing: border-box; +// } + +// .marker-cluster-m { +// border-radius: 15px; +// width: 30px; +// height: 30px; + +// border-color: #ff00ff; +// border-width: 3px; +// border-style: solid; +// background-color: #44004e; +// text-align: center; +// font-size: 12px; +// color: #fff; +// font-family: 'Noto Sans', sans-serif; +// font-weight: bold; +// padding-top: 10px; +// box-sizing: border-box; +// } + +// .marker-cluster-l { +// border-radius: 20px; +// width: 40px; +// height: 40px; + +// border-color: #ff00ff; +// border-width: 3px; +// border-style: solid; +// background-color: #44004e; +// text-align: center; +// font-size: 12px; +// color: #fff; +// font-family: 'Noto Sans', sans-serif; +// font-weight: bold; +// padding-top: 10px; +// box-sizing: border-box; +// } + +// .marker-cluster-xl { +// //background: radial-gradient(#d600d6 40%, transparent 75%); +// border-radius: 25px; +// width: 50px; +// height: 50px; + +// border-color: #ff00ff; +// border-width: 3px; +// border-style: solid; +// background-color: #44004e; +// text-align: center; +// font-size: 12px; +// color: #fff; +// font-family: 'Noto Sans', sans-serif; +// font-weight: bold; +// padding-top: 10px; +// box-sizing: border-box; +// } + +// .marker-cluster-xxl { +// background: radial-gradient(#ff00ff 40%, transparent 75%); +// border-radius: 60px; +// } + +// .marker-cluster-base { +// border-color: #ff00ff; +// border-width: 3px; +// border-style: solid; +// background-color: #44004e; + +// text-align: center; +// font-size: 12px; +// color: #fff; +// font-family: 'Noto Sans', sans-serif; +// font-weight: bold; +// } + +// .marker-cluster { +// background-clip: padding-box; +// border-radius: 20px; +// } + +// .marker-cluster-base { +// background-clip: padding-box; +// margin-left: 5px; +// margin-top: 5px; + +// text-align: center; +// border-radius: 15px; +// color: #fff; +// font-weight: bold; +// } + +// .marker-cluster-base span { +// line-height: 30px; +// margin: auto auto; +// font-family: 'Noto Sans', sans-serif; +// } + + +// .marker-cluster { +// background-clip: padding-box; +// border-radius: 20px; +// } + +// .marker-cluster div { +// width: 30px; +// height: 30px; +// margin-left: 5px; +// margin-top: 5px; + +// text-align: center; +// border-radius: 15px; +// color: #fff; +// } + +// .marker-cluster span { +// display: flex; +// justify-content: center; +// align-items: center; +// } \ No newline at end of file diff --git a/src/styles/variables.scss b/src/styles/variables.scss new file mode 100644 index 0000000..a1417cc --- /dev/null +++ b/src/styles/variables.scss @@ -0,0 +1,36 @@ +// --- Symbol color palette --- + +$primary-color: #5200c6; +$secondary-color: #44004e; +$red-color: red; +$pink-color: #f0f; +$accent-color: #f0f; +$blue-color: #00c8ff; +$green-color: #33dd50; +$orange-color: #ff9600; +$dark-white-color: #f3f4f8; + +// --- General colors --- + +$title-text-color: $pink-color; +$link-text-color: $primary-color; +$card-error-text-color: #98a8b4; +$clickable-item: #fffc; + + +// --- TableView colors + +$table-text-color: $secondary-color; +$table-text-color-light: #44004e91; +$table-header-text-color: $secondary-color; +$table-title-text-color: $secondary-color; +$table-striped-color-first: #f2f2f244; +$table-striped-color-second: #fff4; +$table-hover-color: #44004e1a; + +// --- Body width-limiter + +$header-max-width: 2400px; +$navmenu-max-width: 2400px; +$page-max-width: 1500px; +$footer-max-width: 2400px; \ No newline at end of file diff --git a/src/views/Home.vue b/src/views/Home.vue new file mode 100644 index 0000000..b3b8c40 --- /dev/null +++ b/src/views/Home.vue @@ -0,0 +1,57 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + + diff --git a/src/views/NotFound.vue b/src/views/NotFound.vue new file mode 100644 index 0000000..9a6c810 --- /dev/null +++ b/src/views/NotFound.vue @@ -0,0 +1,43 @@ + + + diff --git a/src/views/PageAssembler.vue b/src/views/PageAssembler.vue new file mode 100644 index 0000000..becd0c3 --- /dev/null +++ b/src/views/PageAssembler.vue @@ -0,0 +1,226 @@ + + + + + diff --git a/src/views/Privacy.vue b/src/views/Privacy.vue new file mode 100644 index 0000000..a3732ac --- /dev/null +++ b/src/views/Privacy.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/src/views/Statistics.vue b/src/views/Statistics.vue new file mode 100644 index 0000000..cf2725f --- /dev/null +++ b/src/views/Statistics.vue @@ -0,0 +1,66 @@ +/* + * + * Copyright (c) 2019-present for NEM + * + * Licensed under the Apache License, Version 2.0 (the "License "); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + + + + diff --git a/src/views/Terms.vue b/src/views/Terms.vue new file mode 100644 index 0000000..4b39a39 --- /dev/null +++ b/src/views/Terms.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/src/views/View.vue b/src/views/View.vue new file mode 100644 index 0000000..051ebbd --- /dev/null +++ b/src/views/View.vue @@ -0,0 +1,80 @@ + + + diff --git a/vue.config.js b/vue.config.js new file mode 100644 index 0000000..3df157a --- /dev/null +++ b/vue.config.js @@ -0,0 +1,25 @@ +// Read config files that may not exist. + +module.exports = { + // base url + publicPath: '/', + // output dir + outputDir: './www', + // eslint-loader check + lintOnSave: true, + // webpack-dev-server + devServer: { + host: '0.0.0.0', + port: 8080, + before: app => { + } + }, + css: { + // modules: true, + loaderOptions: { + sass: { + prependData: `@import "~@/styles/variables.scss";` + } + } + } +};