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
+
+
+
+
+
+
+
+
+ We're sorry but dHealth Explorer doesn't work properly without JavaScript enabled. Please enable it to continue.
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
{{getKeyName('innerTransactionTitle')}}
+
+
+
+
{{getKeyName('transactionAwaitingCosignatureTitle')}}
+
{{getKeyName('transactionAwaitingRemarkTitle')}}
+
+
+
+
{{getKeyName('cosignaturesReceivedTitle')}}
+
+
+
+
+
+
+
+
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.
+ *
+ */
+
+
+
+
+ {{metadataEntries}}
+
+
+
+
+
+
+
+
+
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.
+ *
+ */
+
+
+
+
+
+
© {{ currentYear }} dHealth Network
+
|
+
All Rights Reserved
+
|
+
+ Terms &
+ Privacy
+
+
+
+
+
+
+
+
+
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.
+ *
+ */
+
+
+
+
+
+
+ The dHealth Network can align the incentives of all
+ stakeholders in the healthcare system by making its
+ processes more efficient, transparent, and valuable.
+ Healthcare is perfectly positioned to be the next area
+ of blockchain adoption because it is highly fragmented,
+ full of intermediaries, and suffers from a lack of
+ transparency and inefficient processes.
+ dHealth Network addresses these problems because it is
+ not controlled by any single player, can be accessed
+ directly by all stakeholders as a peer-to-peer network,
+ and functions as a layer of trust. dHealth’s proof-of-stake
+ blockchain enables privacy-preserving interactions among
+ healthcare stakeholders without the need to build separate
+ data-processing infrastructures.
+
+
+
+
+
+
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 @@
+
+
+
+ {{years}} years
+ {{days}} days
+ {{hours}} hours
+ {{minutes}} minutes
+ {{seconds}} seconds
+
+
+
+
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 @@
+
+
+ {{getNameByKey(title)}}
+
+ {{infoText}}
+
+
+
+
+
+
+ {{ getNameByKey(emptyDataMessage) }}
+
+
+ {{getNameByKey(errorMessage)}}
+
+
+
+
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 @@
+
+
+
+ {{label}}
+
+
+
+
+
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 @@
+
+
+
+ {{el.label}}
+
+
+
+
+
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 @@
+
+
+
+
+ {{ additionsCount }} {{ getTranslation('added') }}
+
+
+
+
+
+ {{ deletionsCount }} {{ getTranslation('removed') }}
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+ {{ additionsCount }} {{ getTranslation('added') }}
+
+
+
+
+
+ {{ deletionsCount }} {{ getTranslation('removed') }}
+
+
+
+
+
+
+
+
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 @@
+
+
+ {{ getTranslation(linkAction) }}
+
+
+
+
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 @@
+
+
+ {{ networkCurrency }}
+
+
+
+
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 @@
+
+
+ {{ getTranslation(linkAction) }}
+
+
+
+
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 @@
+
+
+ {{ getTranslation(metadataValue) }}
+
+
+
+
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 @@
+
+
+
+
+
+ {{ truncString(mosaicId) }}
+
+
+
+
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 @@
+
+
+
+
+ {{ truncString(referenceMosaicId) }}
+
+
+
+
+
+
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 @@
+
+
+ {{ getTranslation(action) }}
+
+
+
+
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 @@
+
+
+
+
+ {{ truncString(namespace.namespaceName, 8) }}
+
+
+
+
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 @@
+
+
+ {{ truncString(secret, 8) }}
+
+
+
+
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 @@
+
+
+ {{ truncString(proof, 8) }}
+
+
+
+
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.
+ *
+ */
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ networkCurrencySub }}
+
+
+
+
+
+
+
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.
+ *
+ */
+
+
+
+
+ {{ timeSince(interval) }} {{ getNameByKey('ago') }}
+
+
+
+
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.
+ *
+ */
+
+
+
+
+
+ {{row}}
+ {{ row }}
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+ {{ blockHeight }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ blockHeight }}
+
+
+
+
+
+
+
+
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.
+ *
+ */
+
+
+
+
+
+
+
+ {{value.chainHeight}}
+
+
+
+
+
+ {{value.finalizationHeight}}
+
+
+
+
+
+
+
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.
+ *
+ */
+
+
+
+ {{ utcDate(timestamp) }}
+
+ {{ getNameByKey('symbolTime') }} : {{ timestamp }}
+
+
+
+
+
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.
+ *
+ */
+
+
+
+ {{decimalSplit(value)[0]}}
+ .{{decimalSplit(value)[1]}}
+
+
+
+
+
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.
+ *
+ */
+
+
+
+
+ {{ message }}
+
+
+
+
+ {{ title }}
+
+
+
+ {{ message }}
+
+
+
+
+
+
+
+
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.
+ *
+ */
+
+
+
+
+
+
+ {{ getMosaicName(item) }}
+
+
+
+
+
+
+
+
+
+
+
+
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.
+ *
+ */
+
+
+
+
+
+
+ {{getTranslation('restrictionKey')}} {{ item.restrictionKey }} {{ getTranslation(item.restrictionType) || ':' }} {{ item.restrictionValue }}
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+ {{ transactionText }}
+
+
+
+
+
+
+
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 @@
+
+
+ {{ title }}
+
+ {{ truncatedAddress }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+ {{ text }}
+ {{ _value }}
+
+
+
+
+
+
+
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 @@
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
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 @@
+
+
+ {{ title }}
+
+ {{ truncatedLockName }}
+
+
+
+
+
+
+
+
+
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 @@
+
+
+ {{ title }}
+
+
+
+ {{ formattedMessage }}
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+
+ {{ title }}
+
+
+
+
+
+ {{ truncatedMosaicName }}
+
+
+
+
+
+
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 @@
+
+
+
+
+ {{ text }}
+ {{ _value }}
+
+
+
+
+
+
+
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 @@
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+
+ {{ title }}
+
+ {{ truncatedNamespaceName }}
+
+
+
+
+
+
+
+
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 @@
+
+
+ {{ title }}
+
+
+
+ {{ truncString(namespace.namespaceName, 8) }}
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+ {{ title }}
+
+
+
+ {{ truncString(data.restrictionKey, 7) }}
+
+
+ {{ restrictionTypeText }}
+
+
+ {{ truncString(data.newRestrictionValue, 5) }}
+
+
+
+
+ {{ truncString(data.restrictionKey, 7) }}
+
+
+ =
+
+
+ {{ truncString(data.newRestrictionValue, 5) }}
+
+
+
+
+
+
+
+
+
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 @@
+
+
+ {{ title }}
+
+
+
+ {{ truncString(getTranslation(key), 7) }}:
+
+
+ {{ truncString(value, 5) }}
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+ {{ _value }}
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+ {{getKeyName(itemKey)}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ translateValue(itemKey, item) }}
+
+ {{ translateValue(itemKey, item) }}
+
+
+
+
+
{{emptyDataMessageFormatted}}
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+ {{getKeyName(columnName)}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item}}
+ {{ translateValue(itemKey, item) }}
+
+
+
+
{{item}}
+
{{ translateValue(itemKey, item) }}
+
+
+
+
+
+
+
+
{{ pageIndex + 1 }}/{{ getPageNumber(lastPage) }}
+
{{ getPageNumber(timeline.index, timeline.pageNumber) }}/ {{ getPageNumber() }}
+
+
+
+
{{emptyDataMessageFormatted}}
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+ {{ transactionType }}
+ {{ transactionType }}
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+
+ {{ transactionType + subTitle }}
+ {{ transactionType }}
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+ {{ transactionType }}
+ {{ transactionType }}
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+ {{ transactionType }}
+ {{ transactionType }}
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+ {{ transactionType }}
+ {{ transactionType }}
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+
+ {{ transactionType + subTitle }}
+ {{ transactionType }}
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+ {{ transactionType }}
+ {{ transactionType }}
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+ {{ transactionType }}
+ {{ transactionType }}
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+
+ {{ transactionType + subTitle }}
+ {{ transactionType }}
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+ {{ transactionType }}
+ {{ transactionType }}
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+ {{ transactionType }}
+ {{ transactionType }}
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+ {{ transactionType }}
+ {{ transactionType }}
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+ {{ transactionType }}
+ {{ transactionType }}
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+
+
+ {{ transactionType }}
+ {{ transactionType }}
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+ {{ transactionType }}
+ {{ transactionType }}
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+ {{ transactionType }}
+ {{ transactionType }}
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+
+ {{ transactionType + subTitle }}
+ {{ transactionType }}
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+
+ {{ transactionType }}
+ {{ transactionType }}
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+ {{ transactionType }}
+ {{ transactionType }}
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+
+
+ {{ transactionType }}
+ {{ transactionType }}
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+
+ {{ transactionType + subTitle }}
+ {{ transactionType }}
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+
+ {{ transactionType + subTitle }}
+ {{ transactionType }}
+
+
+
+
+
+
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 @@
+
+
+ {{getNameByKey(title)}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{address}}
+
+
+
{{alias}}
+
+
+
+
{{mosaicName}}
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+ {{getNameByKey('baseInfo')}}
+
+
+
+
+ {{getNameByKey('viewMoreStatistics')}}
+
+
+
+
+
+
+
+
+
+ {{getNameByKey('totalTransactions')}}
+
+
+ {{storageInfo.numTransactions}}
+
+
+
+
+ {{getNameByKey('chainHeight')}}
+
+
+ {{currentHeight}}
+
+
+
+
+ {{ getNameByKey('finalizedHeight') }} ({{ getNameByKey(votingNodeText) }})
+
+
+ {{finalizedHeight}}
+
+
+
+
+ {{ getNameByKey('nodes') }}
+
+
+ {{nodeCount}}
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+ {{getNameByKey(blockTimeDifferenceData.name)}}
+
+
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+ {{getNameByKey(transactionPerBlockData.name)}}
+
+
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+ {{getNameByKey('networkFees')}}
+
+
+
+
+
+
+
+ {{getNameByKey('averageFeeMultiplier')}}
+
+
+ {{transactionFees.averageFeeMultiplier}}
+
+
+
+
+ {{getNameByKey('medianFeeMultiplier')}}
+
+
+ {{transactionFees.medianFeeMultiplier}}
+
+
+
+
+ {{getNameByKey('highestFeeMultiplier')}}
+
+
+ {{transactionFees.highestFeeMultiplier}}
+
+
+
+
+ {{getNameByKey('lowestFeeMultiplier')}}
+
+
+ {{transactionFees.lowestFeeMultiplier}}
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+ {{getNameByKey('networkRentalFees')}}
+
+
+
+
+
+
+
+ {{getNameByKey('effectiveRootNamespaceRentalFeePerBlock')}}
+
+
+ {{rentalFees.effectiveRootNamespaceRentalFeePerBlock}}
+
+
+
+
+ {{getNameByKey('effectiveChildNamespaceRentalFee')}}
+
+
+ {{rentalFees.effectiveChildNamespaceRentalFee}}
+
+
+
+
+ {{getNameByKey('effectiveMosaicRentalFee')}}
+
+
+ {{rentalFees.effectiveMosaicRentalFee}}
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+ {{getNameByKey('nodeStatsTitle')}}
+
+
+
+
+ {{getNameByKey('viewMoreStatistics')}}
+
+
+
+
+
+
+ {{getNameByKey('nodeCountByRoles')}}
+
+
+
+
+ {{item.name}}
+
+
+ {{item.count}}
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+ {{getNameByKey(title)}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+ {{getNameByKey('xemPrice')}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+ {{getNameByKey('recentBlocks')}}
+
+
+
+
+ {{getNameByKey('viewAllBlocks')}}
+
+
+
+
+
+
+
+
+
+
+ {{item.height}}
+
+
+
+
+
+ {{ getNameByKey('created') }}
+
+
+
+
+
+ {{getNameByKey('harvester')}}
+
+
+ {{item.signer}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+ {{getNameByKey('recentTransactions')}}
+
+
+
+
+ {{getNameByKey('viewAllTransactions')}}
+
+
+
+
+
+
+
+
+
+
+ {{item.transactionHash}}
+
+
+
+
+
+ {{getNameByKey('block')}}: {{ item.height }}
+
+
+
+
+
+
+
+ {{getNameByKey('sender')}}
+
+
+ {{item.signer}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+ {{getNameByKey('transactionGraphic')}}
+
+
+
+
+
{{ aggregateTitle }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+ {{getNameByKey('checkTransactionStatus')}}
+
+
+
+
+
+
+
+
+
+
+ {{getNameByKey('check')}}
+
+
+
+
+
+ {{getNameByKey(statusText)}}
+
+
+ {{getNameByKey('Show detail')}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
404
+
That's a Four-Oh-Four.
+
Take me home.
+
+
+
+
+
+
+
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";`
+ }
+ }
+ }
+};