From 8919451430d6b807b56946ae338b719bed07e011 Mon Sep 17 00:00:00 2001 From: DerDanilo Date: Tue, 15 Jun 2021 17:58:58 +0200 Subject: [PATCH 01/48] add WG_ALLOWED_IPS; https://github.com/WeeJeWel/wg-easy/issues/19 --- README.md | 1 + docker-compose.yml | 1 + src/config.js | 1 + src/lib/WireGuard.js | 3 ++- 4 files changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 02c2517..b59ce33 100644 --- a/README.md +++ b/README.md @@ -73,5 +73,6 @@ These options can be configured in `docker-compose.yml` under `environment`. | `WG_PORT` | `51820` | `51820` | The public UDP port of your VPN server | | `WG_DEFAULT_ADDRESS` | `10.8.0.x` | `10.6.0.x` | Clients IP address range | | `WG_DEFAULT_DNS` | `1.1.1.1` | `8.8.8.8, 8.8.4.4` | DNS server clients will use | +| `WG_ALLOWED_IPS` | `0.0.0.0/0, ::/0` | `192.168.15.0/24, 10.0.1.0/24` | Allowed IPs clients will use | > If you change `WG_PORT`, make sure to also change the exposed port. diff --git a/docker-compose.yml b/docker-compose.yml index 4a49fe0..601ccf9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,6 +11,7 @@ services: # - WG_PORT=51820 # - WG_DEFAULT_ADDRESS=10.8.0.x # - WG_DEFAULT_DNS=1.1.1.1 + # - WG_ALLOWED_IPS=192.168.15.0/24, 10.0.1.0/24 image: weejewel/wg-easy container_name: wg-easy diff --git a/src/config.js b/src/config.js index 0a7bf43..cade67f 100644 --- a/src/config.js +++ b/src/config.js @@ -7,3 +7,4 @@ module.exports.WG_HOST = process.env.WG_HOST; module.exports.WG_PORT = process.env.WG_PORT || 51820; module.exports.WG_DEFAULT_ADDRESS = process.env.WG_DEFAULT_ADDRESS || '10.8.0.x'; module.exports.WG_DEFAULT_DNS = process.env.WG_DEFAULT_DNS || '1.1.1.1'; +module.exports.WG_ALLOWED_IPS = process.env.WG_ALLOWED_IPS || '0.0.0.0/0, ::/0'; diff --git a/src/lib/WireGuard.js b/src/lib/WireGuard.js index 01ff330..b6d4f9c 100644 --- a/src/lib/WireGuard.js +++ b/src/lib/WireGuard.js @@ -16,6 +16,7 @@ const { WG_PORT, WG_DEFAULT_DNS, WG_DEFAULT_ADDRESS, + WG_ALLOWED_IPS, } = require('../config'); module.exports = class WireGuard { @@ -178,7 +179,7 @@ DNS = ${WG_DEFAULT_DNS} [Peer] PublicKey = ${config.server.publicKey} PresharedKey = ${client.preSharedKey} -AllowedIPs = 0.0.0.0/0, ::/0 +AllowedIPs = ${WG_ALLOWED_IPS} Endpoint = ${WG_HOST}:${WG_PORT}`; } From 016382dd01e50f9f1caf4cca966b1288c2a16e1e Mon Sep 17 00:00:00 2001 From: Emile Nijssen Date: Tue, 13 Jul 2021 20:51:23 +0200 Subject: [PATCH 02/48] allow edit of name + address --- .gitignore | 4 +- docker-compose.dev.yml | 7 ++ package.json | 1 + src/lib/Server.js | 10 ++ src/lib/Util.js | 13 ++ src/lib/WireGuard.js | 22 ++++ src/package-lock.json | 274 +++++++++++------------------------------ src/package.json | 6 +- src/www/index.html | 59 ++++++++- src/www/js/api.js | 16 +++ src/www/js/app.js | 14 +++ 11 files changed, 221 insertions(+), 205 deletions(-) create mode 100644 docker-compose.dev.yml diff --git a/.gitignore b/.gitignore index ef1066e..77574b5 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ -/config \ No newline at end of file +/config +/wg0.conf +/wg0.json \ No newline at end of file diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml new file mode 100644 index 0000000..5c1a610 --- /dev/null +++ b/docker-compose.dev.yml @@ -0,0 +1,7 @@ +version: "3.8" +services: + wg-easy: + image: wg-easy + command: npm run serve + volumes: + - ./src/:/app/ \ No newline at end of file diff --git a/package.json b/package.json index bb62b5d..7a76c53 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "version": "1.0.0", "scripts": { "build": "docker build --tag wg-easy .", + "serve": "docker-compose -f docker-compose.yml -f docker-compose.dev.yml up", "start": "docker run --env WG_HOST=0.0.0.0 --name wg-easy --cap-add=NET_ADMIN --cap-add=SYS_MODULE --sysctl=\"net.ipv4.conf.all.src_valid_mark=1\" --mount type=bind,source=\"$(pwd)\"/config,target=/etc/wireguard -p 51820:51820/udp -p 51821:51821/tcp wg-easy" }, "docker": { diff --git a/src/lib/Server.js b/src/lib/Server.js index 08262e6..0f1c0ed 100644 --- a/src/lib/Server.js +++ b/src/lib/Server.js @@ -114,6 +114,16 @@ module.exports = class Server { const { clientId } = req.params; return WireGuard.disableClient({ clientId }); })) + .put('/api/wireguard/client/:clientId/name', Util.promisify(async req => { + const { clientId } = req.params; + const { name } = req.body; + return WireGuard.updateClientName({ clientId, name }); + })) + .put('/api/wireguard/client/:clientId/address', Util.promisify(async req => { + const { clientId } = req.params; + const { address } = req.body; + return WireGuard.updateClientAddress({ clientId, address }); + })) .listen(PORT, () => { debug(`Listening on http://0.0.0.0:${PORT}`); diff --git a/src/lib/Util.js b/src/lib/Util.js index ccbad79..cf846ac 100644 --- a/src/lib/Util.js +++ b/src/lib/Util.js @@ -4,6 +4,19 @@ const childProcess = require('child_process'); module.exports = class Util { + static isValidIPv4(str) { + const blocks = str.split('.'); + if (blocks.length !== 4) return false; + + for (let value of blocks) { + value = parseInt(value, 10); + if (Number.isNaN(value)) return false; + if (value < 0 || value > 255) return false; + } + + return true; + } + static promisify(fn) { // eslint-disable-next-line func-names return function(req, res) { diff --git a/src/lib/WireGuard.js b/src/lib/WireGuard.js index b6d4f9c..53f11ad 100644 --- a/src/lib/WireGuard.js +++ b/src/lib/WireGuard.js @@ -266,4 +266,26 @@ Endpoint = ${WG_HOST}:${WG_PORT}`; await this.saveConfig(); } + async updateClientName({ clientId, name }) { + const client = await this.getClient({ clientId }); + + client.name = name; + client.updatedAt = new Date(); + + await this.saveConfig(); + } + + async updateClientAddress({ clientId, address }) { + const client = await this.getClient({ clientId }); + + if (!Util.isValidIPv4(address)) { + throw new ServerError(`Invalid Address: ${address}`, 400); + } + + client.address = address; + client.updatedAt = new Date(); + + await this.saveConfig(); + } + }; diff --git a/src/package-lock.json b/src/package-lock.json index ab31728..ec7ad5e 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -209,14 +209,12 @@ "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" }, "@szmarczak/http-timer": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, "requires": { "defer-to-connect": "^1.0.1" } @@ -230,8 +228,7 @@ "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 + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "accepts": { "version": "1.3.7", @@ -270,7 +267,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", - "dev": true, "requires": { "string-width": "^3.0.0" }, @@ -278,26 +274,22 @@ "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 + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "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 + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, "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 + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "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", @@ -308,7 +300,6 @@ "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" } @@ -324,8 +315,7 @@ "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 + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, "ansi-styles": { "version": "3.2.1", @@ -339,7 +329,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -414,8 +403,7 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base64-js": { "version": "1.5.1", @@ -425,8 +413,7 @@ "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, "body-parser": { "version": "1.19.0", @@ -464,7 +451,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", - "dev": true, "requires": { "ansi-align": "^3.0.0", "camelcase": "^5.3.1", @@ -480,7 +466,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -489,7 +474,6 @@ "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" @@ -499,7 +483,6 @@ "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" } @@ -507,20 +490,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -531,7 +511,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -541,7 +520,6 @@ "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" } @@ -588,7 +566,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, "requires": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -603,7 +580,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, "requires": { "pump": "^3.0.0" } @@ -611,8 +587,7 @@ "lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" } } }, @@ -689,32 +664,29 @@ } }, "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", - "dev": true, + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "requires": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + "readdirp": "~3.6.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 + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, "cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" }, "cliui": { "version": "5.0.0", @@ -765,7 +737,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, "requires": { "mimic-response": "^1.0.0" } @@ -786,14 +757,12 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "configstore": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, "requires": { "dot-prop": "^5.2.0", "graceful-fs": "^4.1.2", @@ -846,8 +815,7 @@ "crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" }, "debug": { "version": "4.3.1", @@ -866,7 +834,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, "requires": { "mimic-response": "^1.0.0" } @@ -874,8 +841,7 @@ "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==", - "dev": true + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, "deep-is": { "version": "0.1.3", @@ -886,8 +852,7 @@ "defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" }, "define-properties": { "version": "1.1.3", @@ -926,7 +891,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, "requires": { "is-obj": "^2.0.0" } @@ -934,8 +898,7 @@ "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" }, "ee-first": { "version": "1.1.1", @@ -945,8 +908,7 @@ "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 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "encodeurl": { "version": "1.0.2", @@ -957,7 +919,6 @@ "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" } @@ -1018,8 +979,7 @@ "escape-goat": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" }, "escape-html": { "version": "1.0.3", @@ -1496,7 +1456,6 @@ "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" } @@ -1575,7 +1534,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "optional": true }, "function-bind": { @@ -1610,7 +1568,6 @@ "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" } @@ -1633,7 +1590,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -1642,7 +1598,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", - "dev": true, "requires": { "ini": "1.3.7" } @@ -1668,7 +1623,6 @@ "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, "requires": { "@sindresorhus/is": "^0.14.0", "@szmarczak/http-timer": "^1.1.2", @@ -1686,8 +1640,7 @@ "graceful-fs": { "version": "4.2.6", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" }, "has": { "version": "1.0.3", @@ -1707,8 +1660,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "has-symbols": { "version": "1.0.2", @@ -1719,8 +1671,7 @@ "has-yarn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" }, "hosted-git-info": { "version": "2.8.9", @@ -1731,8 +1682,7 @@ "http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" }, "http-errors": { "version": "1.7.2", @@ -1775,8 +1725,7 @@ "ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" }, "import-fresh": { "version": "3.3.0", @@ -1791,14 +1740,12 @@ "import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, "inflight": { "version": "1.0.6", @@ -1819,8 +1766,7 @@ "ini": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", - "dev": true + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==" }, "ipaddr.js": { "version": "1.9.1", @@ -1843,7 +1789,6 @@ "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, "requires": { "binary-extensions": "^2.0.0" } @@ -1867,7 +1812,6 @@ "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" } @@ -1890,20 +1834,17 @@ "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 + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "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 + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "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" } @@ -1912,7 +1853,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", - "dev": true, "requires": { "global-dirs": "^2.0.1", "is-path-inside": "^3.0.1" @@ -1927,14 +1867,12 @@ "is-npm": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", - "dev": true + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==" }, "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 + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-number-object": { "version": "1.0.5", @@ -1945,14 +1883,12 @@ "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 + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" }, "is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" }, "is-regex": { "version": "1.1.3", @@ -1982,14 +1918,12 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "is-yarn-global": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" }, "isarray": { "version": "2.0.5", @@ -2027,8 +1961,7 @@ "json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" }, "json-parse-better-errors": { "version": "1.0.2", @@ -2061,7 +1994,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, "requires": { "json-buffer": "3.0.0" } @@ -2070,7 +2002,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, "requires": { "package-json": "^6.3.0" } @@ -2128,8 +2059,7 @@ "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" }, "lru-cache": { "version": "6.0.0", @@ -2144,7 +2074,6 @@ "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" }, @@ -2152,8 +2081,7 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -2193,14 +2121,12 @@ "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -2208,8 +2134,7 @@ "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "ms": { "version": "2.1.2", @@ -2228,10 +2153,9 @@ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, "nodemon": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.7.tgz", - "integrity": "sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA==", - "dev": true, + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.12.tgz", + "integrity": "sha512-egCTmNZdObdBxUBw6ZNwvZ/xzk24CKRs5K6d+5zbmrMr7rOpPmfPeF6OxM3DDpaRx331CQRFEktn+wrFFfBSOA==", "requires": { "chokidar": "^3.2.2", "debug": "^3.2.6", @@ -2249,7 +2173,6 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, "requires": { "ms": "^2.1.1" } @@ -2257,8 +2180,7 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, @@ -2266,7 +2188,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, "requires": { "abbrev": "1" } @@ -2294,14 +2215,12 @@ "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 + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", - "dev": true + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" }, "object-inspect": { "version": "1.10.3", @@ -2368,7 +2287,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } @@ -2390,8 +2308,7 @@ "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" }, "p-limit": { "version": "1.3.0", @@ -2421,7 +2338,6 @@ "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, "requires": { "got": "^9.6.0", "registry-auth-token": "^4.0.0", @@ -2432,8 +2348,7 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -2501,8 +2416,7 @@ "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" }, "pify": { "version": "3.0.0", @@ -2542,8 +2456,7 @@ "prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" }, "progress": { "version": "2.0.3", @@ -2563,14 +2476,12 @@ "pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" }, "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" @@ -2586,7 +2497,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, "requires": { "escape-goat": "^2.0.0" } @@ -2641,7 +2551,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -2652,8 +2561,7 @@ "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 + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" } } }, @@ -2679,10 +2587,9 @@ } }, "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "requires": { "picomatch": "^2.2.1" } @@ -2697,7 +2604,6 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "dev": true, "requires": { "rc": "^1.2.8" } @@ -2706,7 +2612,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, "requires": { "rc": "^1.2.8" } @@ -2747,7 +2652,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, "requires": { "lowercase-keys": "^1.0.0" } @@ -2784,7 +2688,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, "requires": { "semver": "^6.3.0" }, @@ -2792,8 +2695,7 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -2878,8 +2780,7 @@ "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, "slice-ansi": { "version": "4.0.0", @@ -2971,7 +2872,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -3002,7 +2902,6 @@ "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" } @@ -3023,7 +2922,6 @@ "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" } @@ -3065,8 +2963,7 @@ "term-size": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "dev": true + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==" }, "text-table": { "version": "0.2.0", @@ -3083,14 +2980,12 @@ "to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" }, "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" } @@ -3104,7 +2999,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, "requires": { "nopt": "~1.0.10" } @@ -3133,8 +3027,7 @@ "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 + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" }, "type-is": { "version": "1.6.18", @@ -3149,7 +3042,6 @@ "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" } @@ -3178,7 +3070,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", - "dev": true, "requires": { "debug": "^2.2.0" }, @@ -3187,7 +3078,6 @@ "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" } @@ -3195,8 +3085,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -3204,7 +3093,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, "requires": { "crypto-random-string": "^2.0.0" } @@ -3218,7 +3106,6 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", - "dev": true, "requires": { "boxen": "^4.2.0", "chalk": "^3.0.0", @@ -3239,7 +3126,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -3248,7 +3134,6 @@ "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" @@ -3258,7 +3143,6 @@ "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" } @@ -3266,20 +3150,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -3299,7 +3180,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, "requires": { "prepend-http": "^2.0.0" } @@ -3366,7 +3246,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, "requires": { "string-width": "^4.0.0" } @@ -3425,14 +3304,12 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "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", @@ -3443,8 +3320,7 @@ "xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" }, "y18n": { "version": "4.0.3", diff --git a/src/package.json b/src/package.json index f061e5b..f2b6519 100644 --- a/src/package.json +++ b/src/package.json @@ -4,7 +4,7 @@ "description": "", "main": "server.js", "scripts": { - "serve": "DEBUG=Server,WireGuard WG_HOST=0.0.0.0 WG_PATH=../config/ nodemon server.js", + "serve": "DEBUG=Server,WireGuard nodemon server.js", "serve-with-password": "PASSWORD=wg npm run serve", "lint": "eslint ." }, @@ -14,13 +14,13 @@ "debug": "^4.3.1", "express": "^4.17.1", "express-session": "^1.17.1", + "nodemon": "^2.0.12", "qrcode": "^1.4.4", "uuid": "^8.3.2" }, "devDependencies": { "eslint": "^7.27.0", - "eslint-config-athom": "^2.1.0", - "nodemon": "^2.0.7" + "eslint-config-athom": "^2.1.0" }, "nodemonConfig": { "ignore": [ diff --git a/src/www/index.html b/src/www/index.html index c75e43d..f8a955a 100644 --- a/src/www/index.html +++ b/src/www/index.html @@ -64,9 +64,60 @@
-
{{client.name}} + +
+ + + + {{client.name}} + + + + + + +
-
{{client.address}} + + +
+ + + + + + + {{client.address}} + + + + + + + + + + · {{client.transferTx | bytes}} + + · {{client.transferRx | bytes}} + + · {{new Date(client.latestHandshakeAt) | timeago}} diff --git a/src/www/js/api.js b/src/www/js/api.js index c7edae0..7fbf3b6 100644 --- a/src/www/js/api.js +++ b/src/www/js/api.js @@ -94,4 +94,20 @@ class API { }); } + async updateClientName({ clientId, name }) { + return this.call({ + method: 'put', + path: `/wireguard/client/${clientId}/name/`, + body: { name }, + }); + } + + async updateClientAddress({ clientId, address }) { + return this.call({ + method: 'put', + path: `/wireguard/client/${clientId}/address/`, + body: { address }, + }); + } + } diff --git a/src/www/js/app.js b/src/www/js/app.js index fb2cd71..e0e48c9 100644 --- a/src/www/js/app.js +++ b/src/www/js/app.js @@ -17,6 +17,10 @@ new Vue({ clientDelete: null, clientCreate: null, clientCreateName: '', + clientEditName: null, + clientEditNameId: null, + clientEditAddress: null, + clientEditAddressId: null, qrcode: null, }, methods: { @@ -101,6 +105,16 @@ new Vue({ .catch(err => alert(err.message || err.toString())) .finally(() => this.refresh().catch(console.error)); }, + updateClientName(client, name) { + this.api.updateClientName({ clientId: client.id, name }) + .catch(err => alert(err.message || err.toString())) + .finally(() => this.refresh().catch(console.error)); + }, + updateClientAddress(client, address) { + this.api.updateClientAddress({ clientId: client.id, address }) + .catch(err => alert(err.message || err.toString())) + .finally(() => this.refresh().catch(console.error)); + }, }, filters: { timeago: value => { From 985d8863620e700ba67813fd5fa4a01a1b845c55 Mon Sep 17 00:00:00 2001 From: Emile Nijssen Date: Tue, 13 Jul 2021 21:00:40 +0200 Subject: [PATCH 03/48] make WG_DEFAULT_DNS optional, fixes #40 --- README.md | 6 +++++- src/config.js | 4 +++- src/lib/WireGuard.js | 3 ++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b59ce33..63c0469 100644 --- a/README.md +++ b/README.md @@ -16,12 +16,16 @@ You have found the easiest way to install & manage WireGuard on any Linux host! * All-in-one: WireGuard + Web UI. * Easy installation, simple to use. -* List, create, delete, enable & disable clients. +* List, create, edit, delete, enable & disable clients. * Show a client's QR code. * Download a client's configuration file. * Statistics for which clients are connected. * Gravatar support. +## Requirements + +* A host with a kernel that supports WireGuard (all modern kernels). + ## Installation ### 1. Install Docker diff --git a/src/config.js b/src/config.js index cade67f..8412344 100644 --- a/src/config.js +++ b/src/config.js @@ -6,5 +6,7 @@ module.exports.WG_PATH = process.env.WG_PATH || '/etc/wireguard/'; module.exports.WG_HOST = process.env.WG_HOST; module.exports.WG_PORT = process.env.WG_PORT || 51820; module.exports.WG_DEFAULT_ADDRESS = process.env.WG_DEFAULT_ADDRESS || '10.8.0.x'; -module.exports.WG_DEFAULT_DNS = process.env.WG_DEFAULT_DNS || '1.1.1.1'; +module.exports.WG_DEFAULT_DNS = typeof process.env.WG_DEFAULT_DNS === 'string' + ? process.env.WG_DEFAULT_DNS + : '1.1.1.1'; module.exports.WG_ALLOWED_IPS = process.env.WG_ALLOWED_IPS || '0.0.0.0/0, ::/0'; diff --git a/src/lib/WireGuard.js b/src/lib/WireGuard.js index 53f11ad..565cd3e 100644 --- a/src/lib/WireGuard.js +++ b/src/lib/WireGuard.js @@ -51,6 +51,7 @@ module.exports = class WireGuard { } await this.__saveConfig(config); + await Util.exec('wg-quick down wg0').catch(() => {}); await Util.exec('wg-quick up wg0'); await Util.exec(`iptables -t nat -A POSTROUTING -s ${WG_DEFAULT_ADDRESS.replace('x', '0')}/24 -o eth0 -j MASQUERADE`); await Util.exec('iptables -A INPUT -p udp -m udp --dport 51820 -j ACCEPT'); @@ -174,7 +175,7 @@ AllowedIPs = ${client.address}/32`; [Interface] PrivateKey = ${client.privateKey} Address = ${client.address}/24 -DNS = ${WG_DEFAULT_DNS} +${WG_DEFAULT_DNS ? `DNS = ${WG_DEFAULT_DNS}` : ''} [Peer] PublicKey = ${config.server.publicKey} From c7f508fbfbddf21fbc17239f2b6acf72fd385c07 Mon Sep 17 00:00:00 2001 From: Emile Nijssen Date: Tue, 13 Jul 2021 21:11:45 +0200 Subject: [PATCH 04/48] Create changelog.json --- docs/changelog.json | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 docs/changelog.json diff --git a/docs/changelog.json b/docs/changelog.json new file mode 100644 index 0000000..ea1b3e6 --- /dev/null +++ b/docs/changelog.json @@ -0,0 +1,4 @@ +{ + "1": "Initial version. Enjoy!", + "2": "You can now rename a client, and update the address. Enjoy!" +} From 91832c8e208f6d8c618371b72cddc0bbb0309f00 Mon Sep 17 00:00:00 2001 From: Emile Nijssen Date: Tue, 13 Jul 2021 21:39:45 +0200 Subject: [PATCH 05/48] wip --- .github/workflows/deploy.yml | 7 +- README.md | 11 + package.json | 8 - src/config.js | 3 + src/lib/Server.js | 5 + src/package.json | 1 + src/www/index.html | 758 ++++++++++++++++++----------------- src/www/js/api.js | 7 + src/www/js/app.js | 28 ++ 9 files changed, 449 insertions(+), 379 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 7cbfd6b..46636e5 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -35,10 +35,7 @@ jobs: password: ${{ secrets.DOCKER_PASSWORD }} # Set environment variables - - run: echo GH_BRANCH=${GITHUB_REF#refs/heads/} >> $GITHUB_ENV - - run: echo VERSION=$(cat package.json | jq -r .version) >> $GITHUB_ENV - - run: echo DOCKER_TAGS=$(cat package.json | jq -r .docker[\"$GH_BRANCH\"].tags) >> $GITHUB_ENV - - run: echo Branch ${{ env.GH_BRANCH }}, Tags ${{ env.DOCKER_TAGS }} + - run: echo RELEASE=$(cat ./src/package.json | jq -r .release) >> $GITHUB_ENV # Build & Publish - name: Build & Publish Docker Image @@ -46,4 +43,4 @@ jobs: with: push: true platforms: linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8 - tags: weejewel/wg-easy:v${{ env.VERSION }}, weejewel/wg-easy:${{ env.DOCKER_TAGS }} + tags: weejewel/wg-easy:latest, weejewel/wg-easy:${{ env.RELEASE }} diff --git a/README.md b/README.md index 63c0469..3dce467 100644 --- a/README.md +++ b/README.md @@ -80,3 +80,14 @@ These options can be configured in `docker-compose.yml` under `environment`. | `WG_ALLOWED_IPS` | `0.0.0.0/0, ::/0` | `192.168.15.0/24, 10.0.1.0/24` | Allowed IPs clients will use | > If you change `WG_PORT`, make sure to also change the exposed port. + +# Updating + +To update to the latest version, run: + +```bash +docker-compose down +docker-compose pull +docker-compose up --detach --remove-orphans +docker image prune +``` \ No newline at end of file diff --git a/package.json b/package.json index 7a76c53..20f2858 100644 --- a/package.json +++ b/package.json @@ -4,13 +4,5 @@ "build": "docker build --tag wg-easy .", "serve": "docker-compose -f docker-compose.yml -f docker-compose.dev.yml up", "start": "docker run --env WG_HOST=0.0.0.0 --name wg-easy --cap-add=NET_ADMIN --cap-add=SYS_MODULE --sysctl=\"net.ipv4.conf.all.src_valid_mark=1\" --mount type=bind,source=\"$(pwd)\"/config,target=/etc/wireguard -p 51820:51820/udp -p 51821:51821/tcp wg-easy" - }, - "docker": { - "production": { - "tags": "latest" - }, - "staging": { - "tags": "beta" - } } } \ No newline at end of file diff --git a/src/config.js b/src/config.js index 8412344..c60d25b 100644 --- a/src/config.js +++ b/src/config.js @@ -1,5 +1,8 @@ 'use strict'; +const { release } = require('./package.json'); + +module.exports.RELEASE = release; module.exports.PORT = process.env.PORT || 51821; module.exports.PASSWORD = process.env.PASSWORD; module.exports.WG_PATH = process.env.WG_PATH || '/etc/wireguard/'; diff --git a/src/lib/Server.js b/src/lib/Server.js index 0f1c0ed..cf6b26e 100644 --- a/src/lib/Server.js +++ b/src/lib/Server.js @@ -12,6 +12,7 @@ const WireGuard = require('../services/WireGuard'); const { PORT, + RELEASE, PASSWORD, } = require('../config'); @@ -29,6 +30,10 @@ module.exports = class Server { saveUninitialized: true, })) + .get('/api/release', (Util.promisify(async () => { + return RELEASE; + }))) + // Authentication .get('/api/session', Util.promisify(async req => { const requiresPassword = !!process.env.PASSWORD; diff --git a/src/package.json b/src/package.json index f2b6519..0acd348 100644 --- a/src/package.json +++ b/src/package.json @@ -1,4 +1,5 @@ { + "release": 2, "name": "wg-easy", "version": "1.0.0", "description": "", diff --git a/src/www/index.html b/src/www/index.html index f8a955a..56d29eb 100644 --- a/src/www/index.html +++ b/src/www/index.html @@ -12,101 +12,94 @@ -
-
- - Logout - - - - -

- - WireGuard -

-

-
-
-
-

Clients

-
-
- +
+ +
+ +
+ + Logout + + + + +

+ + WireGuard +

+

+ +
+
+
+

There is an update available!

+

{{latestRelease.changelog}}

+
+ + + Update → +
-
-
-
- - - - - -
-
-
-
-
- +
+
- -
+

Clients

+
+
+ +
+
- - - {{client.name}} +
+
+
+ + + + - - - - - - +
+
+
+
- -
- - - +
+ +
- - {{client.address}} + + {{client.name}} - - - - - - · - - - - {{client.transferTx | bytes}} - - - - - · - - - - {{client.transferRx | bytes}} - - - - - · {{new Date(client.latestHandshakeAt) | timeago}} - -
-
- -
-
- - -
-
-
-
-
- - + +
- - - - - - + + - - + + + {{client.address}} + + + + + + + + + + + + · + + + + {{client.transferTx | bytes}} + + + + + · + + + + {{client.transferRx | bytes}} + + + + + · {{new Date(client.latestHandshakeAt) | timeago}} + +
-
+
+
+ + +
+
+
+
+
+
+ + + + + + + + + + + + + +
+
+ +
+
+

There are no clients yet.

+ +

+
+
+ + + + + +
-
-

There are no clients yet.

- -

+ +
-
+
+ + +
+
+ + + + + + + +
+
+ + +
+
+ + + + + + + +
+
+
+ +
+

WireGuard

+ +
+ +
+ + + +
+ + + +
-
+ + + +
- -
-
-
- - -
-
+
+ + + + + + +
- -
-
- - - - - - - -
-
- - -
-
- - - - - - - -
-
-
- -
-

WireGuard

- -
- -
- - - -
- - - - - - -
-
- -
- - - - - - -

Made by Emile Nijssen · Donate · GitHub

diff --git a/src/www/js/api.js b/src/www/js/api.js index 7fbf3b6..accbb57 100644 --- a/src/www/js/api.js +++ b/src/www/js/api.js @@ -29,6 +29,13 @@ class API { return json; } + async getRelease() { + return this.call({ + method: 'get', + path: '/release', + }); + } + async getSession() { return this.call({ method: 'get', diff --git a/src/www/js/app.js b/src/www/js/app.js index e0e48c9..97a50a3 100644 --- a/src/www/js/app.js +++ b/src/www/js/app.js @@ -22,6 +22,9 @@ new Vue({ clientEditAddress: null, clientEditAddressId: null, qrcode: null, + + currentRelease: null, + latestRelease: null, }, methods: { dateTime: value => { @@ -155,5 +158,30 @@ new Vue({ setInterval(() => { this.refresh().catch(console.error); }, 1000); + + Promise.resolve().then(async () => { + const currentRelease = await this.api.getRelease(); + const latestRelease = await fetch('https://weejewel.github.io/wg-easy/changelog.json') + .then(res => res.json()) + .then(releases => { + const releasesArray = Object.entries(releases).map(([version, changelog]) => ({ + version: parseInt(version, 10), + changelog, + })); + releasesArray.sort((a, b) => { + return b.version - a.version; + }); + + return releasesArray[0]; + }); + + console.log(`Current Release: ${currentRelease}`); + console.log(`Latest Release: ${latestRelease.version}`); + + if (currentRelease >= latestRelease.version) return; + + this.currentRelease = currentRelease; + this.latestRelease = latestRelease; + }).catch(console.error); }, }); From e0b5045c89881832770ff4e1f40b01eaabc0bcc8 Mon Sep 17 00:00:00 2001 From: Emile Nijssen Date: Tue, 13 Jul 2021 21:45:52 +0200 Subject: [PATCH 06/48] add license --- LICENSE.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 LICENSE.md diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..0548bb6 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,11 @@ +**You may:** + +* Use this software for yourself; +* Use this software for a company; +* Modify this software, as long as you: + * Publish the changes on GitHub as an open-source & linked fork; + * Don't remove any links to the original project or donation pages; + +**You may not:** + +* Use this software in a commercial product without a license from the original author; \ No newline at end of file From 0b74b77d8b699fdd269e418f33d0bbdb823e89e3 Mon Sep 17 00:00:00 2001 From: Emile Nijssen Date: Tue, 13 Jul 2021 21:54:14 +0200 Subject: [PATCH 07/48] build production --- .github/workflows/deploy.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 46636e5..de784f8 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -19,6 +19,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 + with: + - ref: production - uses: benjlevesque/short-sha@v1.2 From 6ddc5cdea3d024b7b7d6d921822f7d6fd6504839 Mon Sep 17 00:00:00 2001 From: Emile Nijssen Date: Tue, 13 Jul 2021 21:55:12 +0200 Subject: [PATCH 08/48] fix --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index de784f8..0995e0f 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v2 with: - - ref: production + ref: production - uses: benjlevesque/short-sha@v1.2 From 587bb7a3f0f4399a4c911800b418b51e6615ca7a Mon Sep 17 00:00:00 2001 From: Fastidious Date: Wed, 14 Jul 2021 20:49:29 -0400 Subject: [PATCH 09/48] Adding Persistent keepalive --- src/config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/config.js b/src/config.js index c60d25b..18f99c1 100644 --- a/src/config.js +++ b/src/config.js @@ -8,6 +8,7 @@ module.exports.PASSWORD = process.env.PASSWORD; module.exports.WG_PATH = process.env.WG_PATH || '/etc/wireguard/'; module.exports.WG_HOST = process.env.WG_HOST; module.exports.WG_PORT = process.env.WG_PORT || 51820; +module.exports.WG_PERSISTENTKEEPALIVE = process.env.WG_PERSISTENTKEEPALIVE || 25; module.exports.WG_DEFAULT_ADDRESS = process.env.WG_DEFAULT_ADDRESS || '10.8.0.x'; module.exports.WG_DEFAULT_DNS = typeof process.env.WG_DEFAULT_DNS === 'string' ? process.env.WG_DEFAULT_DNS From 31d1cb96fc4236d9e974a45e64f0376ff7cbec9f Mon Sep 17 00:00:00 2001 From: Fastidious Date: Wed, 14 Jul 2021 20:53:59 -0400 Subject: [PATCH 10/48] Adding Persistent Keepalive --- src/lib/WireGuard.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lib/WireGuard.js b/src/lib/WireGuard.js index 565cd3e..5a5086e 100644 --- a/src/lib/WireGuard.js +++ b/src/lib/WireGuard.js @@ -16,6 +16,7 @@ const { WG_PORT, WG_DEFAULT_DNS, WG_DEFAULT_ADDRESS, + WG_PERSISTENTKEEPALIVE; WG_ALLOWED_IPS, } = require('../config'); @@ -181,6 +182,7 @@ ${WG_DEFAULT_DNS ? `DNS = ${WG_DEFAULT_DNS}` : ''} PublicKey = ${config.server.publicKey} PresharedKey = ${client.preSharedKey} AllowedIPs = ${WG_ALLOWED_IPS} +PersistentKeepalive = ${WG_PERSISTENTKEEPALIVE} Endpoint = ${WG_HOST}:${WG_PORT}`; } From 5248dfec77174ac194e976ef4a5271ef8e8aa721 Mon Sep 17 00:00:00 2001 From: Fastidious Date: Thu, 15 Jul 2021 06:54:08 -0400 Subject: [PATCH 11/48] Binding web address Ability to change whether app binds to 0.0.0.0 or other address (127.0.0.1, for proxying). --- src/config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/config.js b/src/config.js index 18f99c1..0184974 100644 --- a/src/config.js +++ b/src/config.js @@ -4,6 +4,7 @@ const { release } = require('./package.json'); module.exports.RELEASE = release; module.exports.PORT = process.env.PORT || 51821; +module.exports.WEBHOST = process.env.WEBHOST || '0.0.0.0'; module.exports.PASSWORD = process.env.PASSWORD; module.exports.WG_PATH = process.env.WG_PATH || '/etc/wireguard/'; module.exports.WG_HOST = process.env.WG_HOST; From ef7570777d752cd63e98c00efb043d760e011b0a Mon Sep 17 00:00:00 2001 From: Fastidious Date: Thu, 15 Jul 2021 06:57:22 -0400 Subject: [PATCH 12/48] Binding web address Adding the ability to change the binding address for the web server (0.0.0.0, open to everyone, or 127.0.0.1, for example, for proxying). --- src/lib/Server.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/lib/Server.js b/src/lib/Server.js index cf6b26e..6f157c5 100644 --- a/src/lib/Server.js +++ b/src/lib/Server.js @@ -14,6 +14,7 @@ const { PORT, RELEASE, PASSWORD, + WEBHOST, } = require('../config'); module.exports = class Server { @@ -130,8 +131,8 @@ module.exports = class Server { return WireGuard.updateClientAddress({ clientId, address }); })) - .listen(PORT, () => { - debug(`Listening on http://0.0.0.0:${PORT}`); + .listen(PORT,WEBHOST, () => { + debug(`Listening on http://${WEBHOST}:${PORT}`); }); } From 9d555730dbb34015ac131fcec9193794e32ec0c7 Mon Sep 17 00:00:00 2001 From: Fastidious Date: Thu, 15 Jul 2021 07:01:08 -0400 Subject: [PATCH 13/48] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3dce467..82ccbc0 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,7 @@ These options can be configured in `docker-compose.yml` under `environment`. | - | - | - | - | | `PASSWORD` | - | `foobar123` | When set, requires a password when logging in to the Web UI. | | `WG_HOST` | - | `vpn.myserver.com` | The public hostname of your VPN server | +| `WEBHOST` | - | `0.0.0.0` | IP where the the web server listens | `WG_PORT` | `51820` | `51820` | The public UDP port of your VPN server | | `WG_DEFAULT_ADDRESS` | `10.8.0.x` | `10.6.0.x` | Clients IP address range | | `WG_DEFAULT_DNS` | `1.1.1.1` | `8.8.8.8, 8.8.4.4` | DNS server clients will use | @@ -90,4 +91,4 @@ docker-compose down docker-compose pull docker-compose up --detach --remove-orphans docker image prune -``` \ No newline at end of file +``` From 83ebd8af4a10f87616447100ab7185541e9cdebe Mon Sep 17 00:00:00 2001 From: Fastidious Date: Thu, 15 Jul 2021 07:01:26 -0400 Subject: [PATCH 14/48] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 82ccbc0..4c2b2cf 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ These options can be configured in `docker-compose.yml` under `environment`. | - | - | - | - | | `PASSWORD` | - | `foobar123` | When set, requires a password when logging in to the Web UI. | | `WG_HOST` | - | `vpn.myserver.com` | The public hostname of your VPN server | -| `WEBHOST` | - | `0.0.0.0` | IP where the the web server listens +| `WEBHOST` | - | `0.0.0.0` | IP where the web server listens | `WG_PORT` | `51820` | `51820` | The public UDP port of your VPN server | | `WG_DEFAULT_ADDRESS` | `10.8.0.x` | `10.6.0.x` | Clients IP address range | | `WG_DEFAULT_DNS` | `1.1.1.1` | `8.8.8.8, 8.8.4.4` | DNS server clients will use | From 8069985c9209fea851c82f4098cd3803cdb68d4d Mon Sep 17 00:00:00 2001 From: Fastidious Date: Thu, 15 Jul 2021 09:45:00 -0400 Subject: [PATCH 15/48] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 4c2b2cf..953cefc 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,7 @@ These options can be configured in `docker-compose.yml` under `environment`. | `WG_HOST` | - | `vpn.myserver.com` | The public hostname of your VPN server | | `WEBHOST` | - | `0.0.0.0` | IP where the web server listens | `WG_PORT` | `51820` | `51820` | The public UDP port of your VPN server | +| `WG_PERSISTENTKEEPALIVE` | `25` | `60` | Value in seconds to keep the "connection" open | | `WG_DEFAULT_ADDRESS` | `10.8.0.x` | `10.6.0.x` | Clients IP address range | | `WG_DEFAULT_DNS` | `1.1.1.1` | `8.8.8.8, 8.8.4.4` | DNS server clients will use | | `WG_ALLOWED_IPS` | `0.0.0.0/0, ::/0` | `192.168.15.0/24, 10.0.1.0/24` | Allowed IPs clients will use | From 00135d0c35b04cb787ec11254bf15c5c449884c1 Mon Sep 17 00:00:00 2001 From: Fastidious Date: Fri, 16 Jul 2021 07:02:46 -0400 Subject: [PATCH 16/48] Small fix --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 953cefc..26dc3d8 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ These options can be configured in `docker-compose.yml` under `environment`. | - | - | - | - | | `PASSWORD` | - | `foobar123` | When set, requires a password when logging in to the Web UI. | | `WG_HOST` | - | `vpn.myserver.com` | The public hostname of your VPN server | -| `WEBHOST` | - | `0.0.0.0` | IP where the web server listens +| `WEBHOST` | `0.0.0.0` | `127.0.0.1` | IP where the web server listens | `WG_PORT` | `51820` | `51820` | The public UDP port of your VPN server | | `WG_PERSISTENTKEEPALIVE` | `25` | `60` | Value in seconds to keep the "connection" open | | `WG_DEFAULT_ADDRESS` | `10.8.0.x` | `10.6.0.x` | Clients IP address range | From 49a2949aea79bc0da4a71e7d27b9af9a99dfd319 Mon Sep 17 00:00:00 2001 From: Fastidious Date: Sat, 17 Jul 2021 10:18:19 -0400 Subject: [PATCH 17/48] Renaming and settings values Renaming environmental variable, and changing its default value. --- src/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config.js b/src/config.js index 0184974..de13f85 100644 --- a/src/config.js +++ b/src/config.js @@ -9,7 +9,7 @@ module.exports.PASSWORD = process.env.PASSWORD; module.exports.WG_PATH = process.env.WG_PATH || '/etc/wireguard/'; module.exports.WG_HOST = process.env.WG_HOST; module.exports.WG_PORT = process.env.WG_PORT || 51820; -module.exports.WG_PERSISTENTKEEPALIVE = process.env.WG_PERSISTENTKEEPALIVE || 25; +module.exports.WG_PERSISTENT_KEEPALIVE = process.env.WG_PERSISTENT_KEEPALIVEE || 0; module.exports.WG_DEFAULT_ADDRESS = process.env.WG_DEFAULT_ADDRESS || '10.8.0.x'; module.exports.WG_DEFAULT_DNS = typeof process.env.WG_DEFAULT_DNS === 'string' ? process.env.WG_DEFAULT_DNS From 6a0a5a10beba9db866e37e905dc99100f6b39228 Mon Sep 17 00:00:00 2001 From: Fastidious Date: Sat, 17 Jul 2021 10:19:17 -0400 Subject: [PATCH 18/48] Update WireGuard.js --- src/lib/WireGuard.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/WireGuard.js b/src/lib/WireGuard.js index 5a5086e..80af6c4 100644 --- a/src/lib/WireGuard.js +++ b/src/lib/WireGuard.js @@ -16,7 +16,7 @@ const { WG_PORT, WG_DEFAULT_DNS, WG_DEFAULT_ADDRESS, - WG_PERSISTENTKEEPALIVE; + WG_PERSISTENT_KEEPALIVE; WG_ALLOWED_IPS, } = require('../config'); @@ -182,7 +182,7 @@ ${WG_DEFAULT_DNS ? `DNS = ${WG_DEFAULT_DNS}` : ''} PublicKey = ${config.server.publicKey} PresharedKey = ${client.preSharedKey} AllowedIPs = ${WG_ALLOWED_IPS} -PersistentKeepalive = ${WG_PERSISTENTKEEPALIVE} +PersistentKeepalive = ${WG_PERSISTENT_KEEPALIVE} Endpoint = ${WG_HOST}:${WG_PORT}`; } From 534fb0ab798df529b512849fc18305dd86db3948 Mon Sep 17 00:00:00 2001 From: Fastidious Date: Sat, 17 Jul 2021 10:20:01 -0400 Subject: [PATCH 19/48] Update config.js --- src/config.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/config.js b/src/config.js index de13f85..4c535be 100644 --- a/src/config.js +++ b/src/config.js @@ -4,7 +4,6 @@ const { release } = require('./package.json'); module.exports.RELEASE = release; module.exports.PORT = process.env.PORT || 51821; -module.exports.WEBHOST = process.env.WEBHOST || '0.0.0.0'; module.exports.PASSWORD = process.env.PASSWORD; module.exports.WG_PATH = process.env.WG_PATH || '/etc/wireguard/'; module.exports.WG_HOST = process.env.WG_HOST; From b3ab0a9ddf4a13ebe5cb738f04f197f4652d8f74 Mon Sep 17 00:00:00 2001 From: Fastidious Date: Sat, 17 Jul 2021 10:20:46 -0400 Subject: [PATCH 20/48] Update Server.js --- src/lib/Server.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/lib/Server.js b/src/lib/Server.js index 6f157c5..cf6b26e 100644 --- a/src/lib/Server.js +++ b/src/lib/Server.js @@ -14,7 +14,6 @@ const { PORT, RELEASE, PASSWORD, - WEBHOST, } = require('../config'); module.exports = class Server { @@ -131,8 +130,8 @@ module.exports = class Server { return WireGuard.updateClientAddress({ clientId, address }); })) - .listen(PORT,WEBHOST, () => { - debug(`Listening on http://${WEBHOST}:${PORT}`); + .listen(PORT, () => { + debug(`Listening on http://0.0.0.0:${PORT}`); }); } From 31abeaeff73d61f441ebc0f0bc43af045b48c9f9 Mon Sep 17 00:00:00 2001 From: Fastidious Date: Sat, 17 Jul 2021 10:22:10 -0400 Subject: [PATCH 21/48] Update README.md --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 26dc3d8..d75733f 100644 --- a/README.md +++ b/README.md @@ -74,9 +74,8 @@ These options can be configured in `docker-compose.yml` under `environment`. | - | - | - | - | | `PASSWORD` | - | `foobar123` | When set, requires a password when logging in to the Web UI. | | `WG_HOST` | - | `vpn.myserver.com` | The public hostname of your VPN server | -| `WEBHOST` | `0.0.0.0` | `127.0.0.1` | IP where the web server listens | `WG_PORT` | `51820` | `51820` | The public UDP port of your VPN server | -| `WG_PERSISTENTKEEPALIVE` | `25` | `60` | Value in seconds to keep the "connection" open | +| `WG_PERSISTENT_KEEPALIVE` | `0` | `25` | Value in seconds to keep the "connection" open | | `WG_DEFAULT_ADDRESS` | `10.8.0.x` | `10.6.0.x` | Clients IP address range | | `WG_DEFAULT_DNS` | `1.1.1.1` | `8.8.8.8, 8.8.4.4` | DNS server clients will use | | `WG_ALLOWED_IPS` | `0.0.0.0/0, ::/0` | `192.168.15.0/24, 10.0.1.0/24` | Allowed IPs clients will use | From 0c46cbf30a51cac4dde805eec6bdd2fa73497a52 Mon Sep 17 00:00:00 2001 From: Fastidious Date: Sat, 17 Jul 2021 10:44:33 -0400 Subject: [PATCH 22/48] Extra E Removed an extra E. Sorry! --- src/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config.js b/src/config.js index 4c535be..d9cf5af 100644 --- a/src/config.js +++ b/src/config.js @@ -8,7 +8,7 @@ module.exports.PASSWORD = process.env.PASSWORD; module.exports.WG_PATH = process.env.WG_PATH || '/etc/wireguard/'; module.exports.WG_HOST = process.env.WG_HOST; module.exports.WG_PORT = process.env.WG_PORT || 51820; -module.exports.WG_PERSISTENT_KEEPALIVE = process.env.WG_PERSISTENT_KEEPALIVEE || 0; +module.exports.WG_PERSISTENT_KEEPALIVE = process.env.WG_PERSISTENT_KEEPALIVE || 0; module.exports.WG_DEFAULT_ADDRESS = process.env.WG_DEFAULT_ADDRESS || '10.8.0.x'; module.exports.WG_DEFAULT_DNS = typeof process.env.WG_DEFAULT_DNS === 'string' ? process.env.WG_DEFAULT_DNS From dae700ef3d1d7554dfdc04b3076f40ec67a46692 Mon Sep 17 00:00:00 2001 From: Emile Nijssen Date: Sun, 18 Jul 2021 16:48:09 +0200 Subject: [PATCH 23/48] dev env --- .github/workflows/deploy.yml | 2 -- docker-compose.dev.yml | 4 +++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 0995e0f..46bc6d4 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -21,8 +21,6 @@ jobs: - uses: actions/checkout@v2 with: ref: production - - - uses: benjlevesque/short-sha@v1.2 - name: Set up QEMU uses: docker/setup-qemu-action@v1 diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 5c1a610..20e7851 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -4,4 +4,6 @@ services: image: wg-easy command: npm run serve volumes: - - ./src/:/app/ \ No newline at end of file + - ./src/:/app/ + environment: + - PASSWORD=p \ No newline at end of file From d8eaafbcfb25d1c6d56cc10d4f895ed4d3fda5ff Mon Sep 17 00:00:00 2001 From: Emile Nijssen Date: Sun, 18 Jul 2021 16:48:33 +0200 Subject: [PATCH 24/48] fix --- src/lib/WireGuard.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/WireGuard.js b/src/lib/WireGuard.js index 80af6c4..18d51c4 100644 --- a/src/lib/WireGuard.js +++ b/src/lib/WireGuard.js @@ -16,7 +16,7 @@ const { WG_PORT, WG_DEFAULT_DNS, WG_DEFAULT_ADDRESS, - WG_PERSISTENT_KEEPALIVE; + WG_PERSISTENT_KEEPALIVE, WG_ALLOWED_IPS, } = require('../config'); From 13749f1e0498d920f62d92caa10919e8afc961e9 Mon Sep 17 00:00:00 2001 From: Emile Nijssen Date: Sun, 18 Jul 2021 17:04:20 +0200 Subject: [PATCH 25/48] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d75733f..4f451b4 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ You have found the easiest way to install & manage WireGuard on any Linux host! ## Requirements * A host with a kernel that supports WireGuard (all modern kernels). +* A host with Docker installed. ## Installation From f77c26dc0c402bded554d50e3494491cf7b16a24 Mon Sep 17 00:00:00 2001 From: Emile Nijssen Date: Mon, 19 Jul 2021 11:26:42 +0200 Subject: [PATCH 26/48] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 4f451b4..0a1655b 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,12 @@ $ sudo usermod -aG docker $(whoami) $ bash ``` +You might need to install docker-compose separately. For example, on a Raspberry Pi: + +```bash +sudo apt-get install docker-compose +``` + ### 2. Configure WireGuard Run these commands to prepare and configure WireGuard. From a4592849579470675b13b86b41a641faeb258c71 Mon Sep 17 00:00:00 2001 From: Juan Calderon-Perez <835733+gaby@users.noreply.github.com> Date: Wed, 15 Sep 2021 21:35:37 -0400 Subject: [PATCH 27/48] Add dumb-init to avoid zombie processes. --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index de1b453..89f0c08 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM node:14-alpine # Install Linux packages -RUN apk add -U wireguard-tools +RUN apk add -U --no-cache wireguard-tools dumb-init # Copy Web UI COPY src/ /app/ @@ -16,4 +16,4 @@ EXPOSE 51821/tcp ENV DEBUG=Server,WireGuard # Run Web UI -CMD ["node", "server.js"] +CMD ["/usr/bin/dumb-init", "node", "server.js"] From 60da315c7e10111e069eb2dda601db5c9e211689 Mon Sep 17 00:00:00 2001 From: Emile Nijssen Date: Wed, 29 Sep 2021 12:53:22 +0200 Subject: [PATCH 28/48] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 0a1655b..73df501 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,6 @@ If you haven't installed Docker yet, install it by running: ```bash $ curl -sSL https://get.docker.com | sh -$ sudo sh get-docker.sh $ sudo usermod -aG docker $(whoami) $ bash ``` From 67b820d985f9b6139677cee28016dde85eebd704 Mon Sep 17 00:00:00 2001 From: Emile Nijssen Date: Wed, 29 Sep 2021 12:56:09 +0200 Subject: [PATCH 29/48] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 73df501..2e43fbb 100644 --- a/README.md +++ b/README.md @@ -36,9 +36,11 @@ If you haven't installed Docker yet, install it by running: ```bash $ curl -sSL https://get.docker.com | sh $ sudo usermod -aG docker $(whoami) -$ bash +$ exit ``` +And log in again. + You might need to install docker-compose separately. For example, on a Raspberry Pi: ```bash From 722bd18999ae73b9b76fb03a20fff4cb0a8f4619 Mon Sep 17 00:00:00 2001 From: Vojta Drbohlav Date: Mon, 11 Oct 2021 21:50:53 +0200 Subject: [PATCH 30/48] normalize config file name for download to make it work on Windows Windows client name is derived from config file name when importing to WireGuard and it only accepts names satisfying /^[a-zA-Z0-9_=+.-]{1,32}$/. For more information look at https://github.com/WireGuard/wireguard-windows/blob/af60ab229954519b8295bb3ef453231f4d3b9087/conf/name.go#L24. --- src/lib/Server.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lib/Server.js b/src/lib/Server.js index cf6b26e..e204fa5 100644 --- a/src/lib/Server.js +++ b/src/lib/Server.js @@ -99,7 +99,8 @@ module.exports = class Server { const { clientId } = req.params; const client = await WireGuard.getClient({ clientId }); const config = await WireGuard.getClientConfiguration({ clientId }); - res.header('Content-Disposition', `attachment; filename="${client.name}.conf"`); + const configName = client.name.replace(/[^a-zA-Z0-9_=+.-]/g, '-').replace(/(-{2,}|-$)/g, '-').replace(/-$/, '').substring(0, 32); + res.header('Content-Disposition', `attachment; filename="${configName}.conf"`); res.header('Content-Type', 'text/plain'); res.send(config); })) From 3a2e1002b639e7719fb6f514869f2e91353f6e49 Mon Sep 17 00:00:00 2001 From: Emile Nijssen Date: Fri, 22 Oct 2021 13:35:02 +0200 Subject: [PATCH 31/48] Update README.md --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 2e43fbb..c5e11f5 100644 --- a/README.md +++ b/README.md @@ -81,12 +81,12 @@ These options can be configured in `docker-compose.yml` under `environment`. | Env | Default | Example | Description | | - | - | - | - | | `PASSWORD` | - | `foobar123` | When set, requires a password when logging in to the Web UI. | -| `WG_HOST` | - | `vpn.myserver.com` | The public hostname of your VPN server | -| `WG_PORT` | `51820` | `51820` | The public UDP port of your VPN server | -| `WG_PERSISTENT_KEEPALIVE` | `0` | `25` | Value in seconds to keep the "connection" open | -| `WG_DEFAULT_ADDRESS` | `10.8.0.x` | `10.6.0.x` | Clients IP address range | -| `WG_DEFAULT_DNS` | `1.1.1.1` | `8.8.8.8, 8.8.4.4` | DNS server clients will use | -| `WG_ALLOWED_IPS` | `0.0.0.0/0, ::/0` | `192.168.15.0/24, 10.0.1.0/24` | Allowed IPs clients will use | +| `WG_HOST` | - | `vpn.myserver.com` | The public hostname of your VPN server. | +| `WG_PORT` | `51820` | `12345` | The public UDP port of your VPN server. WireGuard will always listen on `51820` inside the Docker container. | +| `WG_PERSISTENT_KEEPALIVE` | `0` | `25` | Value in seconds to keep the "connection" open. | +| `WG_DEFAULT_ADDRESS` | `10.8.0.x` | `10.6.0.x` | Clients IP address range. | +| `WG_DEFAULT_DNS` | `1.1.1.1` | `8.8.8.8, 8.8.4.4` | DNS server clients will use. | +| `WG_ALLOWED_IPS` | `0.0.0.0/0, ::/0` | `192.168.15.0/24, 10.0.1.0/24` | Allowed IPs clients will use. | > If you change `WG_PORT`, make sure to also change the exposed port. From 8338594ffcd2959d69cdecda2ff2f25d6e17365e Mon Sep 17 00:00:00 2001 From: Emile Nijssen Date: Thu, 11 Nov 2021 21:02:07 +0100 Subject: [PATCH 32/48] simplify build --- Dockerfile | 2 + src/package-lock.json | 822 ++---------------------------------------- src/package.json | 3 +- 3 files changed, 35 insertions(+), 792 deletions(-) diff --git a/Dockerfile b/Dockerfile index 89f0c08..b166491 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,6 +7,8 @@ RUN apk add -U --no-cache wireguard-tools dumb-init COPY src/ /app/ WORKDIR /app RUN npm ci --production +RUN npm i -g nodemon +RUN mv /app/node_modules/ /node_modules/ # Expose Ports EXPOSE 51820/udp diff --git a/src/package-lock.json b/src/package-lock.json index ec7ad5e..80dd23d 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -206,30 +206,12 @@ } } }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "requires": { - "defer-to-connect": "^1.0.1" - } - }, "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "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==" - }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -263,49 +245,6 @@ "uri-js": "^4.2.2" } }, - "ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", - "requires": { - "string-width": "^3.0.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==" - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "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=" - }, - "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==", - "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==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -315,7 +254,8 @@ "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true }, "ansi-styles": { "version": "3.2.1", @@ -325,15 +265,6 @@ "color-convert": "^1.9.0" } }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -403,18 +334,14 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, "body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -447,83 +374,16 @@ } } }, - "boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "cli-boxes": "^2.2.0", - "string-width": "^4.1.0", - "term-size": "^2.1.0", - "type-fest": "^0.8.1", - "widest-line": "^3.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "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==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, "buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -562,35 +422,6 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - } - } - }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -663,31 +494,6 @@ } } }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.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==" - }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" - }, "cliui": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", @@ -733,14 +539,6 @@ } } }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "requires": { - "mimic-response": "^1.0.0" - } - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -757,20 +555,8 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - } + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "confusing-browser-globals": { "version": "1.0.10", @@ -812,11 +598,6 @@ "which": "^2.0.1" } }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" - }, "debug": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", @@ -830,30 +611,12 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "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==" - }, "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 }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -887,19 +650,6 @@ "esutils": "^2.0.2" } }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "requires": { - "is-obj": "^2.0.0" - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -908,21 +658,14 @@ "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==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, - "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==", - "requires": { - "once": "^1.4.0" - } - }, "enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", @@ -976,11 +719,6 @@ "is-symbol": "^1.0.2" } }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" - }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -1452,14 +1190,6 @@ "flat-cache": "^3.0.4" } }, - "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==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, "finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", @@ -1530,12 +1260,6 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -1564,14 +1288,6 @@ "has-symbols": "^1.0.1" } }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, "glob": { "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", @@ -1590,18 +1306,11 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "requires": { "is-glob": "^4.0.1" } }, - "global-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", - "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", - "requires": { - "ini": "1.3.7" - } - }, "globals": { "version": "13.8.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", @@ -1619,28 +1328,11 @@ } } }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - } - }, "graceful-fs": { "version": "4.2.6", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true }, "has": { "version": "1.0.3", @@ -1660,7 +1352,8 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, "has-symbols": { "version": "1.0.2", @@ -1668,22 +1361,12 @@ "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, - "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" - }, "hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - }, "http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", @@ -1722,11 +1405,6 @@ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" - }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -1737,15 +1415,11 @@ "resolve-from": "^4.0.0" } }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" - }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true }, "inflight": { "version": "1.0.6", @@ -1763,11 +1437,6 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "ini": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==" - }, "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -1785,14 +1454,6 @@ "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", "dev": true }, - "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==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, "is-boolean-object": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", @@ -1808,14 +1469,6 @@ "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", "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==", - "requires": { - "ci-info": "^2.0.0" - } - }, "is-core-module": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", @@ -1834,62 +1487,36 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "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==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "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-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", - "requires": { - "global-dirs": "^2.0.1", - "is-path-inside": "^3.0.1" - } - }, "is-negative-zero": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", "dev": true }, - "is-npm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, "is-number-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", "dev": true }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - }, "is-regex": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", @@ -1915,16 +1542,6 @@ "has-symbols": "^1.0.2" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" - }, "isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", @@ -1958,11 +1575,6 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" - }, "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", @@ -1990,22 +1602,6 @@ "minimist": "^1.2.0" } }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "requires": { - "json-buffer": "3.0.0" - } - }, - "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "requires": { - "package-json": "^6.3.0" - } - }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2056,11 +1652,6 @@ "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", "dev": true }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -2070,21 +1661,6 @@ "yallist": "^4.0.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==", - "requires": { - "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==" - } - } - }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -2118,15 +1694,11 @@ "mime-db": "1.47.0" } }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -2134,7 +1706,8 @@ "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true }, "ms": { "version": "2.1.2", @@ -2152,46 +1725,6 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, - "nodemon": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.12.tgz", - "integrity": "sha512-egCTmNZdObdBxUBw6ZNwvZ/xzk24CKRs5K6d+5zbmrMr7rOpPmfPeF6OxM3DDpaRx331CQRFEktn+wrFFfBSOA==", - "requires": { - "chokidar": "^3.2.2", - "debug": "^3.2.6", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.7", - "semver": "^5.7.1", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.3", - "update-notifier": "^4.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "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", @@ -2212,16 +1745,6 @@ } } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" - }, "object-inspect": { "version": "1.10.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", @@ -2287,6 +1810,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -2305,11 +1829,6 @@ "word-wrap": "^1.2.3" } }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" - }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -2334,24 +1853,6 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.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==" - } - } - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -2413,11 +1914,6 @@ "pify": "^3.0.0" } }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" - }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -2453,11 +1949,6 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" - }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -2473,34 +1964,12 @@ "ipaddr.js": "1.9.1" } }, - "pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "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==", "dev": true }, - "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "requires": { - "escape-goat": "^2.0.0" - } - }, "qrcode": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.4.4.tgz", @@ -2547,24 +2016,6 @@ "unpipe": "1.0.0" } }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "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=" - } - } - }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -2586,36 +2037,12 @@ "read-pkg": "^3.0.0" } }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { - "picomatch": "^2.2.1" - } - }, "regexpp": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", "dev": true }, - "registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "requires": { - "rc": "^1.2.8" - } - }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "requires": { - "rc": "^1.2.8" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -2648,14 +2075,6 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "requires": { - "lowercase-keys": "^1.0.0" - } - }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -2684,21 +2103,6 @@ "lru-cache": "^6.0.0" } }, - "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, "send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", @@ -2777,11 +2181,6 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, "slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -2872,6 +2271,7 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -2902,6 +2302,7 @@ "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" } @@ -2922,6 +2323,7 @@ "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" } @@ -2960,11 +2362,6 @@ } } }, - "term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==" - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -2977,32 +2374,11 @@ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" - }, - "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==", - "requires": { - "is-number": "^7.0.0" - } - }, "toidentifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "requires": { - "nopt": "~1.0.10" - } - }, "tsconfig-paths": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", @@ -3027,7 +2403,8 @@ "type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true }, "type-is": { "version": "1.6.18", @@ -3038,14 +2415,6 @@ "mime-types": "~2.1.24" } }, - "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==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, "uid-safe": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", @@ -3066,107 +2435,11 @@ "which-boxed-primitive": "^1.0.2" } }, - "undefsafe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", - "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", - "requires": { - "debug": "^2.2.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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "requires": { - "crypto-random-string": "^2.0.0" - } - }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, - "update-notifier": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", - "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", - "requires": { - "boxen": "^4.2.0", - "chalk": "^3.0.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.3.1", - "is-npm": "^4.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.0.0", - "pupa": "^2.0.1", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "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==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -3176,14 +2449,6 @@ "punycode": "^2.1.0" } }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "requires": { - "prepend-http": "^2.0.0" - } - }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -3242,14 +2507,6 @@ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "requires": { - "string-width": "^4.0.0" - } - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -3304,23 +2561,8 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "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==", - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "y18n": { "version": "4.0.3", diff --git a/src/package.json b/src/package.json index 0acd348..6696738 100644 --- a/src/package.json +++ b/src/package.json @@ -15,7 +15,6 @@ "debug": "^4.3.1", "express": "^4.17.1", "express-session": "^1.17.1", - "nodemon": "^2.0.12", "qrcode": "^1.4.4", "uuid": "^8.3.2" }, @@ -31,4 +30,4 @@ "engines": { "node": "14" } -} \ No newline at end of file +} From 8d8ac536ff5145b1e4e29537f558ef84e7e78ba1 Mon Sep 17 00:00:00 2001 From: Emile Nijssen Date: Fri, 12 Nov 2021 21:11:17 +0000 Subject: [PATCH 33/48] lock node alpine --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index b166491..7a61d83 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:14-alpine +FROM docker.io/library/node:14-alpine@sha256:dc92f36e7cd917816fa2df041d4e9081453366381a00f40398d99e9392e78664 # Install Linux packages RUN apk add -U --no-cache wireguard-tools dumb-init From 5895b986fc98143d88e9b5d60229d5a70760577f Mon Sep 17 00:00:00 2001 From: Emile Nijssen Date: Fri, 12 Nov 2021 21:15:40 +0000 Subject: [PATCH 34/48] fixes #52 --- src/www/js/app.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/www/js/app.js b/src/www/js/app.js index 97a50a3..6236a2d 100644 --- a/src/www/js/app.js +++ b/src/www/js/app.js @@ -47,8 +47,6 @@ new Vue({ return client; }); - - console.log(clients); }, login(e) { e.preventDefault(); @@ -71,6 +69,7 @@ new Vue({ }) .finally(() => { this.authenticating = false; + this.password = null; }); }, logout(e) { From c19cb72b6d5a2a13ee65a6a0e54f92459ad23699 Mon Sep 17 00:00:00 2001 From: Emile Nijssen Date: Fri, 12 Nov 2021 21:20:28 +0000 Subject: [PATCH 35/48] better logging (fixes #100) --- src/lib/Util.js | 15 +++++++++++---- src/lib/WireGuard.js | 10 +++++++--- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/lib/Util.js b/src/lib/Util.js index cf846ac..bb6f8fe 100644 --- a/src/lib/Util.js +++ b/src/lib/Util.js @@ -19,7 +19,7 @@ module.exports = class Util { static promisify(fn) { // eslint-disable-next-line func-names - return function(req, res) { + return function (req, res) { Promise.resolve().then(async () => fn(req, res)) .then(result => { if (res.headersSent) return; @@ -52,9 +52,16 @@ module.exports = class Util { }; } - static async exec(cmd) { - // eslint-disable-next-line no-console - console.log(`$ ${cmd}`); + static async exec(cmd, { + log = true, + } = {}) { + if (typeof log === 'string') { + // eslint-disable-next-line no-console + console.log(`$ ${log}`); + } else if (log === true) { + // eslint-disable-next-line no-console + console.log(`$ ${cmd}`); + } if (process.platform !== 'linux') { return ''; diff --git a/src/lib/WireGuard.js b/src/lib/WireGuard.js index 18d51c4..d37455d 100644 --- a/src/lib/WireGuard.js +++ b/src/lib/WireGuard.js @@ -37,7 +37,9 @@ module.exports = class WireGuard { debug('Configuration loaded.'); } catch (err) { const privateKey = await Util.exec('wg genkey'); - const publicKey = await Util.exec(`echo ${privateKey} | wg pubkey`); + const publicKey = await Util.exec(`echo ${privateKey} | wg pubkey`, { + log: `echo ***hidden*** | wg pubkey` + }); const address = WG_DEFAULT_ADDRESS.replace('x', '1'); config = { @@ -52,7 +54,7 @@ module.exports = class WireGuard { } await this.__saveConfig(config); - await Util.exec('wg-quick down wg0').catch(() => {}); + await Util.exec('wg-quick down wg0').catch(() => { }); await Util.exec('wg-quick up wg0'); await Util.exec(`iptables -t nat -A POSTROUTING -s ${WG_DEFAULT_ADDRESS.replace('x', '0')}/24 -o eth0 -j MASQUERADE`); await Util.exec('iptables -A INPUT -p udp -m udp --dport 51820 -j ACCEPT'); @@ -127,7 +129,9 @@ AllowedIPs = ${client.address}/32`; })); // Loop WireGuard status - const dump = await Util.exec('wg show wg0 dump'); + const dump = await Util.exec('wg show wg0 dump', { + log: false, + }); dump .trim() .split('\n') From e843593b17162eb03027d41e3ff56e779e92ded3 Mon Sep 17 00:00:00 2001 From: Emile Nijssen Date: Fri, 12 Nov 2021 21:27:58 +0000 Subject: [PATCH 36/48] eslint --- package-lock.json | 4 ++++ package.json | 2 +- src/lib/Util.js | 2 +- src/lib/WireGuard.js | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..0fa0c25 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4 @@ +{ + "version": "1.0.0", + "lockfileVersion": 1 +} diff --git a/package.json b/package.json index 20f2858..e3e3284 100644 --- a/package.json +++ b/package.json @@ -5,4 +5,4 @@ "serve": "docker-compose -f docker-compose.yml -f docker-compose.dev.yml up", "start": "docker run --env WG_HOST=0.0.0.0 --name wg-easy --cap-add=NET_ADMIN --cap-add=SYS_MODULE --sysctl=\"net.ipv4.conf.all.src_valid_mark=1\" --mount type=bind,source=\"$(pwd)\"/config,target=/etc/wireguard -p 51820:51820/udp -p 51821:51821/tcp wg-easy" } -} \ No newline at end of file +} diff --git a/src/lib/Util.js b/src/lib/Util.js index bb6f8fe..2a47a20 100644 --- a/src/lib/Util.js +++ b/src/lib/Util.js @@ -19,7 +19,7 @@ module.exports = class Util { static promisify(fn) { // eslint-disable-next-line func-names - return function (req, res) { + return function(req, res) { Promise.resolve().then(async () => fn(req, res)) .then(result => { if (res.headersSent) return; diff --git a/src/lib/WireGuard.js b/src/lib/WireGuard.js index d37455d..271a247 100644 --- a/src/lib/WireGuard.js +++ b/src/lib/WireGuard.js @@ -38,7 +38,7 @@ module.exports = class WireGuard { } catch (err) { const privateKey = await Util.exec('wg genkey'); const publicKey = await Util.exec(`echo ${privateKey} | wg pubkey`, { - log: `echo ***hidden*** | wg pubkey` + log: 'echo ***hidden*** | wg pubkey', }); const address = WG_DEFAULT_ADDRESS.replace('x', '1'); From 9a4b0bff2e9ddc3ff718f7a5c0530e9f82f2f272 Mon Sep 17 00:00:00 2001 From: Emile Nijssen Date: Fri, 12 Nov 2021 21:30:24 +0000 Subject: [PATCH 37/48] release 3 --- docs/changelog.json | 5 +++-- src/package.json | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/changelog.json b/docs/changelog.json index ea1b3e6..93cad84 100644 --- a/docs/changelog.json +++ b/docs/changelog.json @@ -1,4 +1,5 @@ { "1": "Initial version. Enjoy!", - "2": "You can now rename a client, and update the address. Enjoy!" -} + "2": "You can now rename a client, and update the address. Enjoy!", + "3": "Many improvements and small changes. Enjoy!" +} \ No newline at end of file diff --git a/src/package.json b/src/package.json index 6696738..70184b8 100644 --- a/src/package.json +++ b/src/package.json @@ -1,5 +1,5 @@ { - "release": 2, + "release": 3, "name": "wg-easy", "version": "1.0.0", "description": "", @@ -30,4 +30,4 @@ "engines": { "node": "14" } -} +} \ No newline at end of file From 7cd677f7ef2fe20e4a2d22e146b1df6ade08878c Mon Sep 17 00:00:00 2001 From: Emile Nijssen Date: Mon, 22 Nov 2021 22:15:09 +0100 Subject: [PATCH 38/48] add charts --- docker-compose.dev.yml | 4 +- src/.eslintrc.json | 3 +- src/www/index.html | 267 +++++++++++++----------- src/www/js/app.js | 116 +++++++++- src/www/js/vendor/apexcharts.min.js | 14 ++ src/www/js/vendor/vue-apexcharts.min.js | 7 + 6 files changed, 280 insertions(+), 131 deletions(-) create mode 100644 src/www/js/vendor/apexcharts.min.js create mode 100644 src/www/js/vendor/vue-apexcharts.min.js diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 20e7851..de0347c 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -5,5 +5,5 @@ services: command: npm run serve volumes: - ./src/:/app/ - environment: - - PASSWORD=p \ No newline at end of file + # environment: + # - PASSWORD=p diff --git a/src/.eslintrc.json b/src/.eslintrc.json index 4652c8d..9fc48da 100644 --- a/src/.eslintrc.json +++ b/src/.eslintrc.json @@ -5,6 +5,7 @@ ], "rules": { "consistent-return": "off", - "no-shadow": "off" + "no-shadow": "off", + "max-len": "off" } } \ No newline at end of file diff --git a/src/www/index.html b/src/www/index.html index 56d29eb..6db84e1 100644 --- a/src/www/index.html +++ b/src/www/index.html @@ -3,7 +3,7 @@ WireGuard - + @@ -67,67 +67,54 @@
+
-
- - - - + class="relative overflow-hidden border-b border-gray-100 border-solid"> -
-
-
-
+ +
+ + +
+
+ +
-
- -
+
+
+ + + + - - - {{client.name}} - - - - - - - +
+
+
+
- -
+
- - + +
- - {{client.address}} + + {{client.name}} - - - - - - · - - - - {{client.transferTx | bytes}} - - - - - · - - - - {{client.transferRx | bytes}} - - - - - · {{new Date(client.latestHandshakeAt) | timeago}} - -
-
- -
-
- - -
-
-
-
-
- - + +
- - - - - - + + - - + + + {{client.address}} + + + + + + + + + + + + · + + + + {{client.transferTxCurrent | bytes}}/s + + + + + · + + + + {{client.transferRxCurrent | bytes}}/s + + + + + · {{new Date(client.latestHandshakeAt) | timeago}} + +
+ +
+
+ + +
+
+
+
+
+
+ + + + + + + + + + + + + +
+
+
@@ -244,7 +261,7 @@
-
+
"),e+="
".concat(i.val,"
")})),v.innerHTML=t+"
",m.innerHTML=e+"
"};o?l.globals.seriesGoals[e][i]&&Array.isArray(l.globals.seriesGoals[e][i])?y():(v.innerHTML="",m.innerHTML=""):y()}else v.innerHTML="",m.innerHTML="";null!==p&&(a[e].querySelector(".apexcharts-tooltip-text-z-label").innerHTML=l.config.tooltip.z.title,a[e].querySelector(".apexcharts-tooltip-text-z-value").innerHTML=void 0!==p?p:"");o&&f[0]&&(null==c||l.globals.collapsedSeriesIndices.indexOf(e)>-1?f[0].parentNode.style.display="none":f[0].parentNode.style.display=l.config.tooltip.items.display)}},{key:"toggleActiveInactiveSeries",value:function(t){var e=this.w;if(t)this.tooltipUtil.toggleAllTooltipSeriesGroups("enable");else{this.tooltipUtil.toggleAllTooltipSeriesGroups("disable");var i=e.globals.dom.baseEl.querySelector(".apexcharts-tooltip-series-group");i&&(i.classList.add("apexcharts-active"),i.style.display=e.config.tooltip.items.display)}}},{key:"getValuesToPrint",value:function(t){var e=t.i,i=t.j,a=this.w,s=this.ctx.series.filteredSeriesX(),r="",o="",n=null,l=null,h={series:a.globals.series,seriesIndex:e,dataPointIndex:i,w:a},c=a.globals.ttZFormatter;null===i?l=a.globals.series[e]:a.globals.isXNumeric&&"treemap"!==a.config.chart.type?(r=s[e][i],0===s[e].length&&(r=s[this.tooltipUtil.getFirstActiveXArray(s)][i])):r=void 0!==a.globals.labels[i]?a.globals.labels[i]:"";var d=r;a.globals.isXNumeric&&"datetime"===a.config.xaxis.type?r=new W(this.ctx).xLabelFormat(a.globals.ttKeyFormatter,d,d,{i:void 0,dateFormatter:new Y(this.ctx).formatDate,w:this.w}):r=a.globals.isBarHorizontal?a.globals.yLabelFormatters[0](d,h):a.globals.xLabelFormatter(d,h);return void 0!==a.config.tooltip.x.formatter&&(r=a.globals.ttKeyFormatter(d,h)),a.globals.seriesZ.length>0&&a.globals.seriesZ[e].length>0&&(n=c(a.globals.seriesZ[e][i],a)),o="function"==typeof a.config.xaxis.tooltip.formatter?a.globals.xaxisTooltipFormatter(d,h):r,{val:Array.isArray(l)?l.join(" "):l,xVal:Array.isArray(r)?r.join(" "):r,xAxisTTVal:Array.isArray(o)?o.join(" "):o,zVal:n}}},{key:"handleCustomTooltip",value:function(t){var e=t.i,i=t.j,a=t.y1,s=t.y2,r=t.w,o=this.ttCtx.getElTooltip(),n=r.config.tooltip.custom;Array.isArray(n)&&n[e]&&(n=n[e]),o.innerHTML=n({ctx:this.ctx,series:r.globals.series,seriesIndex:e,dataPointIndex:i,y1:a,y2:s,w:r})}}]),t}(),ut=function(){function t(i){e(this,t),this.ttCtx=i,this.ctx=i.ctx,this.w=i.w}return a(t,[{key:"moveXCrosshairs",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.ttCtx,a=this.w,s=i.getElXCrosshairs(),r=t-i.xcrosshairsWidth/2,o=a.globals.labels.slice().length;if(null!==e&&(r=a.globals.gridWidth/o*e),null!==s&&(s.setAttribute("x",r),s.setAttribute("x1",r),s.setAttribute("x2",r),s.setAttribute("y2",a.globals.gridHeight),s.classList.add("apexcharts-active")),r<0&&(r=0),r>a.globals.gridWidth&&(r=a.globals.gridWidth),i.blxaxisTooltip){var n=r;"tickWidth"!==a.config.xaxis.crosshairs.width&&"barWidth"!==a.config.xaxis.crosshairs.width||(n=r+i.xcrosshairsWidth/2),this.moveXAxisTooltip(n)}}},{key:"moveYCrosshairs",value:function(t){var e=this.ttCtx;null!==e.ycrosshairs&&b.setAttrs(e.ycrosshairs,{y1:t,y2:t}),null!==e.ycrosshairsHidden&&b.setAttrs(e.ycrosshairsHidden,{y1:t,y2:t})}},{key:"moveXAxisTooltip",value:function(t){var e=this.w,i=this.ttCtx;if(null!==i.xaxisTooltip){i.xaxisTooltip.classList.add("apexcharts-active");var a=i.xaxisOffY+e.config.xaxis.tooltip.offsetY+e.globals.translateY+1+e.config.xaxis.offsetY;if(t-=i.xaxisTooltip.getBoundingClientRect().width/2,!isNaN(t)){t+=e.globals.translateX;var s;s=new b(this.ctx).getTextRects(i.xaxisTooltipText.innerHTML),i.xaxisTooltipText.style.minWidth=s.width+"px",i.xaxisTooltip.style.left=t+"px",i.xaxisTooltip.style.top=a+"px"}}}},{key:"moveYAxisTooltip",value:function(t){var e=this.w,i=this.ttCtx;null===i.yaxisTTEls&&(i.yaxisTTEls=e.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxistooltip"));var a=parseInt(i.ycrosshairsHidden.getAttribute("y1"),10),s=e.globals.translateY+a,r=i.yaxisTTEls[t].getBoundingClientRect().height,o=e.globals.translateYAxisX[t]-2;e.config.yaxis[t].opposite&&(o-=26),s-=r/2,-1===e.globals.ignoreYAxisIndexes.indexOf(t)?(i.yaxisTTEls[t].classList.add("apexcharts-active"),i.yaxisTTEls[t].style.top=s+"px",i.yaxisTTEls[t].style.left=o+e.config.yaxis[t].tooltip.offsetX+"px"):i.yaxisTTEls[t].classList.remove("apexcharts-active")}},{key:"moveTooltip",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=this.w,s=this.ttCtx,r=s.getElTooltip(),o=s.tooltipRect,n=null!==i?parseFloat(i):1,l=parseFloat(t)+n+5,h=parseFloat(e)+n/2;if(l>a.globals.gridWidth/2&&(l=l-o.ttWidth-n-15),l>a.globals.gridWidth-o.ttWidth-10&&(l=a.globals.gridWidth-o.ttWidth),l<-20&&(l=-20),a.config.tooltip.followCursor){var c=s.getElGrid(),d=c.getBoundingClientRect();h=s.e.clientY+a.globals.translateY-d.top-o.ttHeight/2}else a.globals.isBarHorizontal?h-=o.ttHeight:(o.ttHeight/2+h>a.globals.gridHeight&&(h=a.globals.gridHeight-o.ttHeight+a.globals.translateY),h<0&&(h=0));isNaN(l)||(l+=a.globals.translateX,r.style.left=l+"px",r.style.top=h+"px")}},{key:"moveMarkers",value:function(t,e){var i=this.w,a=this.ttCtx;if(i.globals.markers.size[t]>0)for(var s=i.globals.dom.baseEl.querySelectorAll(" .apexcharts-series[data\\:realIndex='".concat(t,"'] .apexcharts-marker")),r=0;r0&&(h.setAttribute("r",n),h.setAttribute("cx",i),h.setAttribute("cy",a)),this.moveXCrosshairs(i),r.fixedTooltip||this.moveTooltip(i,a,n)}}},{key:"moveDynamicPointsOnHover",value:function(t){var e,i=this.ttCtx,a=i.w,s=0,r=0,o=a.globals.pointsArray;e=new z(this.ctx).getActiveConfigSeriesIndex(!0);var n=i.tooltipUtil.getHoverMarkerSize(e);o[e]&&(s=o[e][t][0],r=o[e][t][1]);var l=i.tooltipUtil.getAllMarkers();if(null!==l)for(var h=0;h0?(l[h]&&l[h].setAttribute("r",n),l[h]&&l[h].setAttribute("cy",d)):l[h]&&l[h].setAttribute("r",0)}}if(this.moveXCrosshairs(s),!i.fixedTooltip){var g=r||a.globals.gridHeight;this.moveTooltip(s,g,n)}}},{key:"moveStickyTooltipOverBars",value:function(t){var e=this.w,i=this.ttCtx,a=e.globals.columnSeries?e.globals.columnSeries.length:e.globals.series.length,s=a>=2&&a%2==0?Math.floor(a/2):Math.floor(a/2)+1;e.globals.isBarHorizontal&&(s=new z(this.ctx).getActiveConfigSeriesIndex(!1,"desc")+1);var r=e.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[rel='".concat(s,"'] path[j='").concat(t,"'], .apexcharts-candlestick-series .apexcharts-series[rel='").concat(s,"'] path[j='").concat(t,"'], .apexcharts-boxPlot-series .apexcharts-series[rel='").concat(s,"'] path[j='").concat(t,"'], .apexcharts-rangebar-series .apexcharts-series[rel='").concat(s,"'] path[j='").concat(t,"']")),o=r?parseFloat(r.getAttribute("cx")):0,n=r?parseFloat(r.getAttribute("cy")):0,l=r?parseFloat(r.getAttribute("barWidth")):0,h=r?parseFloat(r.getAttribute("barHeight")):0,c=i.getElGrid().getBoundingClientRect();if(e.globals.isXNumeric?(o-=a%2!=0?l/2:0,r&&(r.classList.contains("apexcharts-candlestick-area")||r.classList.contains("apexcharts-boxPlot-area"))&&e.globals.comboCharts&&(o-=l/2)):e.globals.isBarHorizontal||(o=i.xAxisTicksPositions[t-1]+i.dataPointsDividedWidth/2,isNaN(o)&&(o=i.xAxisTicksPositions[t]-i.dataPointsDividedWidth/2)),e.globals.isBarHorizontal?n+=h/3:n=i.e.clientY-c.top-i.tooltipRect.ttHeight/2,e.globals.isBarHorizontal||this.moveXCrosshairs(o),!i.fixedTooltip){var d=n||e.globals.gridHeight;this.moveTooltip(o,d)}}}]),t}(),pt=function(){function t(i){e(this,t),this.w=i.w,this.ttCtx=i,this.ctx=i.ctx,this.tooltipPosition=new ut(i)}return a(t,[{key:"drawDynamicPoints",value:function(){var t=this.w,e=new b(this.ctx),i=new P(this.ctx),a=t.globals.dom.baseEl.querySelectorAll(".apexcharts-series");a=g(a),t.config.chart.stacked&&a.sort((function(t,e){return parseFloat(t.getAttribute("data:realIndex"))-parseFloat(e.getAttribute("data:realIndex"))}));for(var s=0;s2&&void 0!==arguments[2]?arguments[2]:null,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,s=this.w;"bubble"!==s.config.chart.type&&this.newPointSize(t,e);var r=e.getAttribute("cx"),o=e.getAttribute("cy");if(null!==i&&null!==a&&(r=i,o=a),this.tooltipPosition.moveXCrosshairs(r),!this.fixedTooltip){if("radar"===s.config.chart.type){var n=this.ttCtx.getElGrid(),l=n.getBoundingClientRect();r=this.ttCtx.e.clientX-l.left}this.tooltipPosition.moveTooltip(r,o,s.config.markers.hover.size)}}},{key:"enlargePoints",value:function(t){for(var e=this.w,i=this,a=this.ttCtx,s=t,r=e.globals.dom.baseEl.querySelectorAll(".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker"),o=e.config.markers.hover.size,n=0;n=0?t[e].setAttribute("r",i):t[e].setAttribute("r",0)}}}]),t}(),ft=function(){function t(i){e(this,t),this.w=i.w,this.ttCtx=i}return a(t,[{key:"getAttr",value:function(t,e){return parseFloat(t.target.getAttribute(e))}},{key:"handleHeatTreeTooltip",value:function(t){var e=t.e,i=t.opt,a=t.x,s=t.y,r=t.type,o=this.ttCtx,n=this.w;if(e.target.classList.contains("apexcharts-".concat(r,"-rect"))){var l=this.getAttr(e,"i"),h=this.getAttr(e,"j"),c=this.getAttr(e,"cx"),d=this.getAttr(e,"cy"),g=this.getAttr(e,"width"),u=this.getAttr(e,"height");if(o.tooltipLabels.drawSeriesTexts({ttItems:i.ttItems,i:l,j:h,shared:!1,e:e}),n.globals.capturedSeriesIndex=l,n.globals.capturedDataPointIndex=h,a=c+o.tooltipRect.ttWidth/2+g,s=d+o.tooltipRect.ttHeight/2-u/2,o.tooltipPosition.moveXCrosshairs(c+g/2),a>n.globals.gridWidth/2&&(a=c-o.tooltipRect.ttWidth/2+g),o.w.config.tooltip.followCursor){var p=n.globals.dom.elWrap.getBoundingClientRect();a=n.globals.clientX-p.left-o.tooltipRect.ttWidth/2,s=n.globals.clientY-p.top-o.tooltipRect.ttHeight-5}}return{x:a,y:s}}},{key:"handleMarkerTooltip",value:function(t){var e,i,a=t.e,s=t.opt,r=t.x,o=t.y,n=this.w,l=this.ttCtx;if(a.target.classList.contains("apexcharts-marker")){var h=parseInt(s.paths.getAttribute("cx"),10),c=parseInt(s.paths.getAttribute("cy"),10),d=parseFloat(s.paths.getAttribute("val"));if(i=parseInt(s.paths.getAttribute("rel"),10),e=parseInt(s.paths.parentNode.parentNode.parentNode.getAttribute("rel"),10)-1,l.intersect){var g=p.findAncestor(s.paths,"apexcharts-series");g&&(e=parseInt(g.getAttribute("data:realIndex"),10))}if(l.tooltipLabels.drawSeriesTexts({ttItems:s.ttItems,i:e,j:i,shared:!l.showOnIntersect&&n.config.tooltip.shared,e:a}),"mouseup"===a.type&&l.markerClick(a,e,i),n.globals.capturedSeriesIndex=e,n.globals.capturedDataPointIndex=i,r=h,o=c+n.globals.translateY-1.4*l.tooltipRect.ttHeight,l.w.config.tooltip.followCursor){var u=l.getElGrid().getBoundingClientRect();o=l.e.clientY+n.globals.translateY-u.top}d<0&&(o=c),l.marker.enlargeCurrentPoint(i,s.paths,r,o)}return{x:r,y:o}}},{key:"handleBarTooltip",value:function(t){var e,i,a=t.e,s=t.opt,r=this.w,o=this.ttCtx,n=o.getElTooltip(),l=0,h=0,c=0,d=this.getBarTooltipXY({e:a,opt:s});e=d.i;var g=d.barHeight,u=d.j;r.globals.capturedSeriesIndex=e,r.globals.capturedDataPointIndex=u,r.globals.isBarHorizontal&&o.tooltipUtil.hasBars()||!r.config.tooltip.shared?(h=d.x,c=d.y,i=Array.isArray(r.config.stroke.width)?r.config.stroke.width[e]:r.config.stroke.width,l=h):r.globals.comboCharts||r.config.tooltip.shared||(l/=2),isNaN(c)?c=r.globals.svgHeight-o.tooltipRect.ttHeight:c<0&&(c=0);var p=parseInt(s.paths.parentNode.getAttribute("data:realIndex"),10),f=r.globals.isMultipleYAxis?r.config.yaxis[p]&&r.config.yaxis[p].reversed:r.config.yaxis[0].reversed;if(h+o.tooltipRect.ttWidth>r.globals.gridWidth&&!f?h-=o.tooltipRect.ttWidth:h<0&&(h=0),o.w.config.tooltip.followCursor){var x=o.getElGrid().getBoundingClientRect();c=o.e.clientY-x.top}null===o.tooltip&&(o.tooltip=r.globals.dom.baseEl.querySelector(".apexcharts-tooltip")),r.config.tooltip.shared||(r.globals.comboBarCount>0?o.tooltipPosition.moveXCrosshairs(l+i/2):o.tooltipPosition.moveXCrosshairs(l)),!o.fixedTooltip&&(!r.config.tooltip.shared||r.globals.isBarHorizontal&&o.tooltipUtil.hasBars())&&(f&&(h-=o.tooltipRect.ttWidth)<0&&(h=0),n.style.left=h+r.globals.translateX+"px",!f||r.globals.isBarHorizontal&&o.tooltipUtil.hasBars()||(c=c+g-2*(r.globals.series[e][u]<0?g:0)),o.tooltipRect.ttHeight+c>r.globals.gridHeight?(c=r.globals.gridHeight-o.tooltipRect.ttHeight+r.globals.translateY,n.style.top=c+"px"):n.style.top=c+r.globals.translateY-o.tooltipRect.ttHeight/2+"px")}},{key:"getBarTooltipXY",value:function(t){var e=t.e,i=t.opt,a=this.w,s=null,r=this.ttCtx,o=0,n=0,l=0,h=0,c=0,d=e.target.classList;if(d.contains("apexcharts-bar-area")||d.contains("apexcharts-candlestick-area")||d.contains("apexcharts-boxPlot-area")||d.contains("apexcharts-rangebar-area")){var g=e.target,u=g.getBoundingClientRect(),p=i.elGrid.getBoundingClientRect(),f=u.height;c=u.height;var x=u.width,b=parseInt(g.getAttribute("cx"),10),v=parseInt(g.getAttribute("cy"),10);h=parseFloat(g.getAttribute("barWidth"));var m="touchmove"===e.type?e.touches[0].clientX:e.clientX;s=parseInt(g.getAttribute("j"),10),o=parseInt(g.parentNode.getAttribute("rel"),10)-1;var y=g.getAttribute("data-range-y1"),w=g.getAttribute("data-range-y2");a.globals.comboCharts&&(o=parseInt(g.parentNode.getAttribute("data:realIndex"),10)),r.tooltipLabels.drawSeriesTexts({ttItems:i.ttItems,i:o,j:s,y1:y?parseInt(y,10):null,y2:w?parseInt(w,10):null,shared:!r.showOnIntersect&&a.config.tooltip.shared,e:e}),a.config.tooltip.followCursor?a.globals.isBarHorizontal?(n=m-p.left+15,l=v-r.dataPointsDividedHeight+f/2-r.tooltipRect.ttHeight/2):(n=a.globals.isXNumeric?b-x/2:b-r.dataPointsDividedWidth+x/2,l=e.clientY-p.top-r.tooltipRect.ttHeight/2-15):a.globals.isBarHorizontal?((n=b)0&&i.setAttribute("width",e.xcrosshairsWidth)}},{key:"handleYCrosshair",value:function(){var t=this.w,e=this.ttCtx;e.ycrosshairs=t.globals.dom.baseEl.querySelector(".apexcharts-ycrosshairs"),e.ycrosshairsHidden=t.globals.dom.baseEl.querySelector(".apexcharts-ycrosshairs-hidden")}},{key:"drawYaxisTooltipText",value:function(t,e,i){var a=this.ttCtx,s=this.w,r=s.globals.yLabelFormatters[t];if(a.yaxisTooltips[t]){var o=a.getElGrid().getBoundingClientRect(),n=(e-o.top)*i.yRatio[t],l=s.globals.maxYArr[t]-s.globals.minYArr[t],h=s.globals.minYArr[t]+(l-n);a.tooltipPosition.moveYCrosshairs(e-o.top),a.yaxisTooltipText[t].innerHTML=r(h),a.tooltipPosition.moveYAxisTooltip(t)}}}]),t}(),bt=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w;var a=this.w;this.tConfig=a.config.tooltip,this.tooltipUtil=new dt(this),this.tooltipLabels=new gt(this),this.tooltipPosition=new ut(this),this.marker=new pt(this),this.intersect=new ft(this),this.axesTooltip=new xt(this),this.showOnIntersect=this.tConfig.intersect,this.showTooltipTitle=this.tConfig.x.show,this.fixedTooltip=this.tConfig.fixed.enabled,this.xaxisTooltip=null,this.yaxisTTEls=null,this.isBarShared=!a.globals.isBarHorizontal&&this.tConfig.shared,this.lastHoverTime=Date.now()}return a(t,[{key:"getElTooltip",value:function(t){return t||(t=this),t.w.globals.dom.baseEl.querySelector(".apexcharts-tooltip")}},{key:"getElXCrosshairs",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-xcrosshairs")}},{key:"getElGrid",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-grid")}},{key:"drawTooltip",value:function(t){var e=this.w;this.xyRatios=t,this.blxaxisTooltip=e.config.xaxis.tooltip.enabled&&e.globals.axisCharts,this.yaxisTooltips=e.config.yaxis.map((function(t,i){return!!(t.show&&t.tooltip.enabled&&e.globals.axisCharts)})),this.allTooltipSeriesGroups=[],e.globals.axisCharts||(this.showTooltipTitle=!1);var i=document.createElement("div");if(i.classList.add("apexcharts-tooltip"),i.classList.add("apexcharts-theme-".concat(this.tConfig.theme)),e.globals.dom.elWrap.appendChild(i),e.globals.axisCharts){this.axesTooltip.drawXaxisTooltip(),this.axesTooltip.drawYaxisTooltip(),this.axesTooltip.setXCrosshairWidth(),this.axesTooltip.handleYCrosshair();var a=new G(this.ctx);this.xAxisTicksPositions=a.getXAxisTicksPositions()}if(!e.globals.comboCharts&&!this.tConfig.intersect&&"rangeBar"!==e.config.chart.type||this.tConfig.shared||(this.showOnIntersect=!0),0!==e.config.markers.size&&0!==e.globals.markers.largestSize||this.marker.drawDynamicPoints(this),e.globals.collapsedSeries.length!==e.globals.series.length){this.dataPointsDividedHeight=e.globals.gridHeight/e.globals.dataPoints,this.dataPointsDividedWidth=e.globals.gridWidth/e.globals.dataPoints,this.showTooltipTitle&&(this.tooltipTitle=document.createElement("div"),this.tooltipTitle.classList.add("apexcharts-tooltip-title"),this.tooltipTitle.style.fontFamily=this.tConfig.style.fontFamily||e.config.chart.fontFamily,this.tooltipTitle.style.fontSize=this.tConfig.style.fontSize,i.appendChild(this.tooltipTitle));var s=e.globals.series.length;(e.globals.xyCharts||e.globals.comboCharts)&&this.tConfig.shared&&(s=this.showOnIntersect?1:e.globals.series.length),this.legendLabels=e.globals.dom.baseEl.querySelectorAll(".apexcharts-legend-text"),this.ttItems=this.createTTElements(s),this.addSVGEvents()}}},{key:"createTTElements",value:function(t){for(var e=this,i=this.w,a=[],s=this.getElTooltip(),r=function(r){var o=document.createElement("div");o.classList.add("apexcharts-tooltip-series-group"),o.style.order=i.config.tooltip.inverseOrder?t-r:r+1,e.tConfig.shared&&e.tConfig.enabledOnSeries&&Array.isArray(e.tConfig.enabledOnSeries)&&e.tConfig.enabledOnSeries.indexOf(r)<0&&o.classList.add("apexcharts-tooltip-series-group-hidden");var n=document.createElement("span");n.classList.add("apexcharts-tooltip-marker"),n.style.backgroundColor=i.globals.colors[r],o.appendChild(n);var l=document.createElement("div");l.classList.add("apexcharts-tooltip-text"),l.style.fontFamily=e.tConfig.style.fontFamily||i.config.chart.fontFamily,l.style.fontSize=e.tConfig.style.fontSize,["y","goals","z"].forEach((function(t){var e=document.createElement("div");e.classList.add("apexcharts-tooltip-".concat(t,"-group"));var i=document.createElement("span");i.classList.add("apexcharts-tooltip-text-".concat(t,"-label")),e.appendChild(i);var a=document.createElement("span");a.classList.add("apexcharts-tooltip-text-".concat(t,"-value")),e.appendChild(a),l.appendChild(e)})),o.appendChild(l),s.appendChild(o),a.push(o)},o=0;o0&&this.addPathsEventListeners(u,c),this.tooltipUtil.hasBars()&&!this.tConfig.shared&&this.addDatapointEventsListeners(c)}}},{key:"drawFixedTooltipRect",value:function(){var t=this.w,e=this.getElTooltip(),i=e.getBoundingClientRect(),a=i.width+10,s=i.height+10,r=this.tConfig.fixed.offsetX,o=this.tConfig.fixed.offsetY,n=this.tConfig.fixed.position.toLowerCase();return n.indexOf("right")>-1&&(r=r+t.globals.svgWidth-a+10),n.indexOf("bottom")>-1&&(o=o+t.globals.svgHeight-s-10),e.style.left=r+"px",e.style.top=o+"px",{x:r,y:o,ttWidth:a,ttHeight:s}}},{key:"addDatapointEventsListeners",value:function(t){var e=this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers .apexcharts-marker, .apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-boxPlot-area, .apexcharts-rangebar-area");this.addPathsEventListeners(e,t)}},{key:"addPathsEventListeners",value:function(t,e){for(var i=this,a=function(a){var s={paths:t[a],tooltipEl:e.tooltipEl,tooltipY:e.tooltipY,tooltipX:e.tooltipX,elGrid:e.elGrid,hoverArea:e.hoverArea,ttItems:e.ttItems};["mousemove","mouseup","touchmove","mouseout","touchend"].map((function(e){return t[a].addEventListener(e,i.onSeriesHover.bind(i,s),{capture:!1,passive:!0})}))},s=0;s=100?this.seriesHover(t,e):(clearTimeout(this.seriesHoverTimeout),this.seriesHoverTimeout=setTimeout((function(){i.seriesHover(t,e)}),100-a))}},{key:"seriesHover",value:function(t,e){var i=this;this.lastHoverTime=Date.now();var a=[],s=this.w;s.config.chart.group&&(a=this.ctx.getGroupedCharts()),s.globals.axisCharts&&(s.globals.minX===-1/0&&s.globals.maxX===1/0||0===s.globals.dataPoints)||(a.length?a.forEach((function(a){var s=i.getElTooltip(a),r={paths:t.paths,tooltipEl:s,tooltipY:t.tooltipY,tooltipX:t.tooltipX,elGrid:t.elGrid,hoverArea:t.hoverArea,ttItems:a.w.globals.tooltip.ttItems};a.w.globals.minX===i.w.globals.minX&&a.w.globals.maxX===i.w.globals.maxX&&a.w.globals.tooltip.seriesHoverByContext({chartCtx:a,ttCtx:a.w.globals.tooltip,opt:r,e:e})})):this.seriesHoverByContext({chartCtx:this.ctx,ttCtx:this.w.globals.tooltip,opt:t,e:e}))}},{key:"seriesHoverByContext",value:function(t){var e=t.chartCtx,i=t.ttCtx,a=t.opt,s=t.e,r=e.w,o=this.getElTooltip();(i.tooltipRect={x:0,y:0,ttWidth:o.getBoundingClientRect().width,ttHeight:o.getBoundingClientRect().height},i.e=s,!i.tooltipUtil.hasBars()||r.globals.comboCharts||i.isBarShared)||this.tConfig.onDatasetHover.highlightDataSeries&&new z(e).toggleSeriesOnHover(s,s.target.parentNode);i.fixedTooltip&&i.drawFixedTooltipRect(),r.globals.axisCharts?i.axisChartsTooltips({e:s,opt:a,tooltipRect:i.tooltipRect}):i.nonAxisChartsTooltips({e:s,opt:a,tooltipRect:i.tooltipRect})}},{key:"axisChartsTooltips",value:function(t){var e,i,a=t.e,s=t.opt,r=this.w,o=s.elGrid.getBoundingClientRect(),n="touchmove"===a.type?a.touches[0].clientX:a.clientX,l="touchmove"===a.type?a.touches[0].clientY:a.clientY;if(this.clientY=l,this.clientX=n,r.globals.capturedSeriesIndex=-1,r.globals.capturedDataPointIndex=-1,lo.top+o.height)this.handleMouseOut(s);else{if(Array.isArray(this.tConfig.enabledOnSeries)&&!r.config.tooltip.shared){var h=parseInt(s.paths.getAttribute("index"),10);if(this.tConfig.enabledOnSeries.indexOf(h)<0)return void this.handleMouseOut(s)}var c=this.getElTooltip(),d=this.getElXCrosshairs(),g=r.globals.xyCharts||"bar"===r.config.chart.type&&!r.globals.isBarHorizontal&&this.tooltipUtil.hasBars()&&this.tConfig.shared||r.globals.comboCharts&&this.tooltipUtil.hasBars();if("mousemove"===a.type||"touchmove"===a.type||"mouseup"===a.type){null!==d&&d.classList.add("apexcharts-active");var u=this.yaxisTooltips.filter((function(t){return!0===t}));if(null!==this.ycrosshairs&&u.length&&this.ycrosshairs.classList.add("apexcharts-active"),g&&!this.showOnIntersect)this.handleStickyTooltip(a,n,l,s);else if("heatmap"===r.config.chart.type||"treemap"===r.config.chart.type){var p=this.intersect.handleHeatTreeTooltip({e:a,opt:s,x:e,y:i,type:r.config.chart.type});e=p.x,i=p.y,c.style.left=e+"px",c.style.top=i+"px"}else this.tooltipUtil.hasBars()&&this.intersect.handleBarTooltip({e:a,opt:s}),this.tooltipUtil.hasMarkers()&&this.intersect.handleMarkerTooltip({e:a,opt:s,x:e,y:i});if(this.yaxisTooltips.length)for(var f=0;fl.width?this.handleMouseOut(a):null!==n?this.handleStickyCapturedSeries(t,n,a,o):(this.tooltipUtil.isXoverlap(o)||s.globals.isBarHorizontal)&&this.create(t,this,0,o,a.ttItems)}},{key:"handleStickyCapturedSeries",value:function(t,e,i,a){var s=this.w;if(!this.tConfig.shared&&null===s.globals.series[e][a])return void this.handleMouseOut(i);void 0!==s.globals.series[e][a]?this.tConfig.shared&&this.tooltipUtil.isXoverlap(a)&&this.tooltipUtil.isInitialSeriesSameLen()?this.create(t,this,e,a,i.ttItems):this.create(t,this,e,a,i.ttItems,!1):this.tooltipUtil.isXoverlap(a)&&this.create(t,this,0,a,i.ttItems)}},{key:"deactivateHoverFilter",value:function(){for(var t=this.w,e=new b(this.ctx),i=t.globals.dom.Paper.select(".apexcharts-bar-area"),a=0;a5&&void 0!==arguments[5]?arguments[5]:null,o=this.w,n=e;"mouseup"===t.type&&this.markerClick(t,i,a),null===r&&(r=this.tConfig.shared);var l=this.tooltipUtil.hasMarkers(),h=this.tooltipUtil.getElBars();if(o.config.legend.tooltipHoverFormatter){var c=o.config.legend.tooltipHoverFormatter,d=Array.from(this.legendLabels);d.forEach((function(t){var e=t.getAttribute("data:default-text");t.innerHTML=decodeURIComponent(e)}));for(var g=0;g0?n.marker.enlargePoints(a):n.tooltipPosition.moveDynamicPointsOnHover(a)),this.tooltipUtil.hasBars()&&(this.barSeriesHeight=this.tooltipUtil.getBarsHeight(h),this.barSeriesHeight>0)){var v=new b(this.ctx),m=o.globals.dom.Paper.select(".apexcharts-bar-area[j='".concat(a,"']"));this.deactivateHoverFilter(),this.tooltipPosition.moveStickyTooltipOverBars(a);for(var y=0;y0&&(this.totalItems+=t[r].length);for(var n=this.graphics.group({class:"apexcharts-bar-series apexcharts-plot-series"}),l=0,h=0,c=function(s,r){var c=void 0,d=void 0,g=void 0,u=void 0,f=[],x=[],b=a.globals.comboCharts?e[s]:s;i.yRatio.length>1&&(i.yaxisIndex=b),i.isReversed=a.config.yaxis[i.yaxisIndex]&&a.config.yaxis[i.yaxisIndex].reversed;var v=i.graphics.group({class:"apexcharts-series",seriesName:p.escapeString(a.globals.seriesNames[b]),rel:s+1,"data:realIndex":b});i.ctx.series.addCollapsedClassToSeries(v,b);var m=i.graphics.group({class:"apexcharts-datalabels","data:realIndex":b}),y=0,w=0,k=i.initialPositions(l,h,c,d,g,u);h=k.y,y=k.barHeight,d=k.yDivision,u=k.zeroW,l=k.x,w=k.barWidth,c=k.xDivision,g=k.zeroH,i.yArrj=[],i.yArrjF=[],i.yArrjVal=[],i.xArrj=[],i.xArrjF=[],i.xArrjVal=[],1===i.prevY.length&&i.prevY[0].every((function(t){return isNaN(t)}))&&(i.prevY[0]=i.prevY[0].map((function(t){return g})),i.prevYF[0]=i.prevYF[0].map((function(t){return 0})));for(var A=0;A1?(i=l.globals.minXDiff/this.xRatio)*parseInt(this.barOptions.columnWidth,10)/100:n*parseInt(l.config.plotOptions.bar.columnWidth,10)/100,s=this.baseLineY[this.yaxisIndex]+(this.isReversed?l.globals.gridHeight:0)-(this.isReversed?2*this.baseLineY[this.yaxisIndex]:0),t=l.globals.padHorizontal+(i-n)/2),{x:t,y:e,yDivision:a,xDivision:i,barHeight:o,barWidth:n,zeroH:s,zeroW:r}}},{key:"drawStackedBarPaths",value:function(t){for(var e,i=t.indexes,a=t.barHeight,s=t.strokeWidth,r=t.zeroW,o=t.x,n=t.y,l=t.yDivision,h=t.elSeries,c=this.w,d=n,g=i.i,u=i.j,p=0,f=0;f0){var x=r;this.prevXVal[g-1][u]<0?x=this.series[g][u]>=0?this.prevX[g-1][u]+p-2*(this.isReversed?p:0):this.prevX[g-1][u]:this.prevXVal[g-1][u]>=0&&(x=this.series[g][u]>=0?this.prevX[g-1][u]:this.prevX[g-1][u]-p+2*(this.isReversed?p:0)),e=x}else e=r;o=null===this.series[g][u]?e:e+this.series[g][u]/this.invertedYRatio-2*(this.isReversed?this.series[g][u]/this.invertedYRatio:0);var b=this.barHelpers.getBarpaths({barYPosition:d,barHeight:a,x1:e,x2:o,strokeWidth:s,series:this.series,realIndex:i.realIndex,i:g,j:u,w:c});return this.barHelpers.barBackground({j:u,i:g,y1:d,y2:a,elSeries:h}),n+=l,{pathTo:b.pathTo,pathFrom:b.pathFrom,x:o,y:n}}},{key:"drawStackedColumnPaths",value:function(t){var e=t.indexes,i=t.x,a=t.y,s=t.xDivision,r=t.barWidth,o=t.zeroH;t.strokeWidth;var n=t.elSeries,l=this.w,h=e.i,c=e.j,d=e.bc;if(l.globals.isXNumeric){var g=l.globals.seriesX[h][c];g||(g=0),i=(g-l.globals.minX)/this.xRatio-r/2}for(var u,p=i,f=0,x=0;x0&&!l.globals.isXNumeric||h>0&&l.globals.isXNumeric&&l.globals.seriesX[h-1][c]===l.globals.seriesX[h][c]){var b,v,m=Math.min(this.yRatio.length+1,h+1);if(void 0!==this.prevY[h-1])for(var y=1;y=0?v-f+2*(this.isReversed?f:0):v;break}if(this.prevYVal[h-w][c]>=0){b=this.series[h][c]>=0?v:v+f-2*(this.isReversed?f:0);break}}void 0===b&&(b=l.globals.gridHeight),u=this.prevYF[0].every((function(t){return 0===t}))&&this.prevYF.slice(1,h).every((function(t){return t.every((function(t){return isNaN(t)}))}))?l.globals.gridHeight-o:b}else u=l.globals.gridHeight-o;a=u-this.series[h][c]/this.yRatio[this.yaxisIndex]+2*(this.isReversed?this.series[h][c]/this.yRatio[this.yaxisIndex]:0);var k=this.barHelpers.getColumnPaths({barXPosition:p,barWidth:r,y1:u,y2:a,yRatio:this.yRatio[this.yaxisIndex],strokeWidth:this.strokeWidth,series:this.series,realIndex:e.realIndex,i:h,j:c,w:l});return this.barHelpers.barBackground({bc:d,j:c,i:h,x1:p,x2:r,elSeries:n}),i+=s,{pathTo:k.pathTo,pathFrom:k.pathFrom,x:l.globals.isXNumeric?i-s:i,y:a}}}]),s}(E),mt=function(t){n(s,t);var i=d(s);function s(){return e(this,s),i.apply(this,arguments)}return a(s,[{key:"draw",value:function(t,e){var i=this,a=this.w,s=new b(this.ctx),r=new L(this.ctx);this.candlestickOptions=this.w.config.plotOptions.candlestick,this.boxOptions=this.w.config.plotOptions.boxPlot;var o=new y(this.ctx,a);t=o.getLogSeries(t),this.series=t,this.yRatio=o.getLogYRatios(this.yRatio),this.barHelpers.initVariables(t);for(var n=s.group({class:"apexcharts-".concat(a.config.chart.type,"-series apexcharts-plot-series")}),l=function(o){i.isBoxPlot="boxPlot"===a.config.chart.type||"boxPlot"===a.config.series[o].type;var l,h,c=void 0,d=void 0,g=[],u=[],f=a.globals.comboCharts?e[o]:o,x=s.group({class:"apexcharts-series",seriesName:p.escapeString(a.globals.seriesNames[f]),rel:o+1,"data:realIndex":f});i.ctx.series.addCollapsedClassToSeries(x,f),t[o].length>0&&(i.visibleI=i.visibleI+1);var b,v;i.yRatio.length>1&&(i.yaxisIndex=f);var m=i.barHelpers.initialPositions();d=m.y,b=m.barHeight,c=m.x,v=m.barWidth,l=m.xDivision,h=m.zeroH,u.push(c+v/2);for(var y=s.group({class:"apexcharts-datalabels","data:realIndex":f}),w=function(e){var s=i.barHelpers.getStrokeWidth(o,e,f),n=i.drawBoxPaths({indexes:{i:o,j:e,realIndex:f},x:c,y:d,xDivision:l,barWidth:v,zeroH:h,strokeWidth:s,elSeries:x});d=n.y,c=n.x,e>0&&u.push(c+v/2),g.push(d),n.pathTo.forEach((function(l,h){var g=!i.isBoxPlot&&i.candlestickOptions.wick.useFillColor?n.color[h]:a.globals.stroke.colors[o],u=r.fillPath({seriesNumber:f,dataPointIndex:e,color:n.color[h],value:t[o][e]});i.renderSeries({realIndex:f,pathFill:u,lineFill:g,j:e,i:o,pathFrom:n.pathFrom,pathTo:l,strokeWidth:s,elSeries:x,x:c,y:d,series:t,barHeight:b,barWidth:v,elDataLabelsWrap:y,visibleSeries:i.visibleI,type:a.config.chart.type})}))},k=0;kv.c&&(d=!1);var w=Math.min(v.o,v.c),k=Math.max(v.o,v.c),A=v.m;n.globals.isXNumeric&&(i=(n.globals.seriesX[x][c]-n.globals.minX)/this.xRatio-s/2);var S=i+s*this.visibleI;void 0===this.series[h][c]||null===this.series[h][c]?(w=r,k=r):(w=r-w/f,k=r-k/f,m=r-v.h/f,y=r-v.l/f,A=r-v.m/f);var C=l.move(S,r),L=l.move(S+s/2,w);return n.globals.previousPaths.length>0&&(L=this.getPreviousPath(x,c,!0)),C=this.isBoxPlot?[l.move(S,w)+l.line(S+s/2,w)+l.line(S+s/2,m)+l.line(S+s/4,m)+l.line(S+s-s/4,m)+l.line(S+s/2,m)+l.line(S+s/2,w)+l.line(S+s,w)+l.line(S+s,A)+l.line(S,A)+l.line(S,w+o/2),l.move(S,A)+l.line(S+s,A)+l.line(S+s,k)+l.line(S+s/2,k)+l.line(S+s/2,y)+l.line(S+s-s/4,y)+l.line(S+s/4,y)+l.line(S+s/2,y)+l.line(S+s/2,k)+l.line(S,k)+l.line(S,A)+"z"]:[l.move(S,k)+l.line(S+s/2,k)+l.line(S+s/2,m)+l.line(S+s/2,k)+l.line(S+s,k)+l.line(S+s,w)+l.line(S+s/2,w)+l.line(S+s/2,y)+l.line(S+s/2,w)+l.line(S,w)+l.line(S,k-o/2)],L+=l.move(S,w),n.globals.isXNumeric||(i+=a),{pathTo:C,pathFrom:L,x:i,y:k,barXPosition:S,color:this.isBoxPlot?p:d?[g]:[u]}}},{key:"getOHLCValue",value:function(t,e){var i=this.w;return{o:this.isBoxPlot?i.globals.seriesCandleH[t][e]:i.globals.seriesCandleO[t][e],h:this.isBoxPlot?i.globals.seriesCandleO[t][e]:i.globals.seriesCandleH[t][e],m:i.globals.seriesCandleM[t][e],l:this.isBoxPlot?i.globals.seriesCandleC[t][e]:i.globals.seriesCandleL[t][e],c:this.isBoxPlot?i.globals.seriesCandleL[t][e]:i.globals.seriesCandleC[t][e]}}}]),s}(E),yt=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return a(t,[{key:"checkColorRange",value:function(){var t=this.w,e=!1,i=t.config.plotOptions[t.config.chart.type];return i.colorScale.ranges.length>0&&i.colorScale.ranges.map((function(t,i){t.from<=0&&(e=!0)})),e}},{key:"getShadeColor",value:function(t,e,i,a){var s=this.w,r=1,o=s.config.plotOptions[t].shadeIntensity,n=this.determineColor(t,e,i);s.globals.hasNegs||a?r=s.config.plotOptions[t].reverseNegativeShade?n.percent<0?n.percent/100*(1.25*o):(1-n.percent/100)*(1.25*o):n.percent<=0?1-(1+n.percent/100)*o:(1-n.percent/100)*o:(r=1-n.percent/100,"treemap"===t&&(r=(1-n.percent/100)*(1.25*o)));var l=n.color,h=new p;return s.config.plotOptions[t].enableShades&&(l="dark"===this.w.config.theme.mode?p.hexToRgba(h.shadeColor(-1*r,n.color),s.config.fill.opacity):p.hexToRgba(h.shadeColor(r,n.color),s.config.fill.opacity)),{color:l,colorProps:n}}},{key:"determineColor",value:function(t,e,i){var a=this.w,s=a.globals.series[e][i],r=a.config.plotOptions[t],o=r.colorScale.inverse?i:e;a.config.plotOptions[t].distributed&&(o=i);var n=a.globals.colors[o],l=null,h=Math.min.apply(Math,g(a.globals.series[e])),c=Math.max.apply(Math,g(a.globals.series[e]));r.distributed||"heatmap"!==t||(h=a.globals.minY,c=a.globals.maxY),void 0!==r.colorScale.min&&(h=r.colorScale.mina.globals.maxY?r.colorScale.max:a.globals.maxY);var d=Math.abs(c)+Math.abs(h),u=100*s/(0===d?d-1e-6:d);r.colorScale.ranges.length>0&&r.colorScale.ranges.map((function(t,e){if(s>=t.from&&s<=t.to){n=t.color,l=t.foreColor?t.foreColor:null,h=t.from,c=t.to;var i=Math.abs(c)+Math.abs(h);u=100*s/(0===i?i-1e-6:i)}}));return{color:n,foreColor:l,percent:u}}},{key:"calculateDataLabels",value:function(t){var e=t.text,i=t.x,a=t.y,s=t.i,r=t.j,o=t.colorProps,n=t.fontSize,l=this.w.config.dataLabels,h=new b(this.ctx),c=new T(this.ctx),d=null;if(l.enabled){d=h.group({class:"apexcharts-data-labels"});var g=l.offsetX,u=l.offsetY,p=i+g,f=a+parseFloat(l.style.fontSize)/3+u;c.plotDataLabelsText({x:p,y:f,text:e,i:s,j:r,color:o.foreColor,parent:d,fontSize:n,dataLabelsConfig:l})}return d}},{key:"addListeners",value:function(t){var e=new b(this.ctx);t.node.addEventListener("mouseenter",e.pathMouseEnter.bind(this,t)),t.node.addEventListener("mouseleave",e.pathMouseLeave.bind(this,t)),t.node.addEventListener("mousedown",e.pathMouseDown.bind(this,t))}}]),t}(),wt=function(){function t(i,a){e(this,t),this.ctx=i,this.w=i.w,this.xRatio=a.xRatio,this.yRatio=a.yRatio,this.dynamicAnim=this.w.config.chart.animations.dynamicAnimation,this.helpers=new yt(i),this.rectRadius=this.w.config.plotOptions.heatmap.radius,this.strokeWidth=this.w.config.stroke.show?this.w.config.stroke.width:0}return a(t,[{key:"draw",value:function(t){var e=this.w,i=new b(this.ctx),a=i.group({class:"apexcharts-heatmap"});a.attr("clip-path","url(#gridRectMask".concat(e.globals.cuid,")"));var s=e.globals.gridWidth/e.globals.dataPoints,r=e.globals.gridHeight/e.globals.series.length,o=0,n=!1;this.negRange=this.helpers.checkColorRange();var l=t.slice();e.config.yaxis[0].reversed&&(n=!0,l.reverse());for(var h=n?0:l.length-1;n?h=0;n?h++:h--){var c=i.group({class:"apexcharts-series apexcharts-heatmap-series",seriesName:p.escapeString(e.globals.seriesNames[h]),rel:h+1,"data:realIndex":h});if(this.ctx.series.addCollapsedClassToSeries(c,h),e.config.chart.dropShadow.enabled){var d=e.config.chart.dropShadow;new x(this.ctx).dropShadow(c,d,h)}for(var g=0,u=e.config.plotOptions.heatmap.shadeIntensity,f=0;f-1&&this.pieClicked(d),i.config.dataLabels.enabled){var A=w.x,S=w.y,C=100*u/this.fullAngle+"%";if(0!==u&&i.config.plotOptions.pie.dataLabels.minAngleToShowLabelthis.fullAngle?e.endAngle=e.endAngle-(a+o):a+o=this.fullAngle+this.w.config.plotOptions.pie.startAngle%this.fullAngle&&(n=this.fullAngle+this.w.config.plotOptions.pie.startAngle%this.fullAngle-.01),Math.ceil(n)>this.fullAngle&&(n-=this.fullAngle);var l=Math.PI*(n-90)/180,h=e.centerX+s*Math.cos(o),c=e.centerY+s*Math.sin(o),d=e.centerX+s*Math.cos(l),g=e.centerY+s*Math.sin(l),u=p.polarToCartesian(e.centerX,e.centerY,e.donutSize,n),f=p.polarToCartesian(e.centerX,e.centerY,e.donutSize,r),x=a>180?1:0,b=["M",h,c,"A",s,s,0,x,1,d,g];return"donut"===e.chartType?[].concat(b,["L",u.x,u.y,"A",e.donutSize,e.donutSize,0,x,0,f.x,f.y,"L",h,c,"z"]).join(" "):"pie"===e.chartType||"polarArea"===e.chartType?[].concat(b,["L",e.centerX,e.centerY,"L",h,c]).join(" "):[].concat(b).join(" ")}},{key:"drawPolarElements",value:function(t){var e=this.w,i=new j(this.ctx),a=new b(this.ctx),s=new kt(this.ctx),r=a.group(),o=a.group(),n=i.niceScale(0,Math.ceil(this.maxY),e.config.yaxis[0].tickAmount,0,!0),l=n.result.reverse(),h=n.result.length;this.maxY=n.niceMax;for(var c=e.globals.radialSize,d=c/(h-1),g=0;g1&&t.total.show&&(s=t.total.color);var o=r.globals.dom.baseEl.querySelector(".apexcharts-datalabel-label"),n=r.globals.dom.baseEl.querySelector(".apexcharts-datalabel-value");i=(0,t.value.formatter)(i,r),a||"function"!=typeof t.total.formatter||(i=t.total.formatter(r));var l=e===t.total.label;e=t.name.formatter(e,l,r),null!==o&&(o.textContent=e),null!==n&&(n.textContent=i),null!==o&&(o.style.fill=s)}},{key:"printDataLabelsInner",value:function(t,e){var i=this.w,a=t.getAttribute("data:value"),s=i.globals.seriesNames[parseInt(t.parentNode.getAttribute("rel"),10)-1];i.globals.series.length>1&&this.printInnerLabels(e,s,a,t);var r=i.globals.dom.baseEl.querySelector(".apexcharts-datalabels-group");null!==r&&(r.style.opacity=1)}},{key:"drawSpokes",value:function(t){var e=this,i=this.w,a=new b(this.ctx),s=i.config.plotOptions.polarArea.spokes;if(0!==s.strokeWidth){for(var r=[],o=360/i.globals.series.length,n=0;n1)o&&!e.total.showAlways?l({makeSliceOut:!1,printLabel:!0}):this.printInnerLabels(e,e.total.label,e.total.formatter(s));else if(l({makeSliceOut:!1,printLabel:!0}),!o)if(s.globals.selectedDataPoints.length&&s.globals.series.length>1)if(s.globals.selectedDataPoints[0].length>0){var h=s.globals.selectedDataPoints[0],c=s.globals.dom.baseEl.querySelector(".apexcharts-".concat(this.chartType.toLowerCase(),"-slice-").concat(h));this.printDataLabelsInner(c,e)}else r&&s.globals.selectedDataPoints.length&&0===s.globals.selectedDataPoints[0].length&&(r.style.opacity=0);else r&&s.globals.series.length>1&&(r.style.opacity=0)}}]),t}(),St=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.chartType=this.w.config.chart.type,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled,this.animDur=0;var a=this.w;this.graphics=new b(this.ctx),this.lineColorArr=void 0!==a.globals.stroke.colors?a.globals.stroke.colors:a.globals.colors,this.defaultSize=a.globals.svgHeight0&&(b=e.getPreviousPath(n));for(var v=0;v=10?t.x>0?(i="start",a+=10):t.x<0&&(i="end",a-=10):i="middle",Math.abs(t.y)>=e-10&&(t.y<0?s-=10:t.y>0&&(s+=10)),{textAnchor:i,newX:a,newY:s}}},{key:"getPreviousPath",value:function(t){for(var e=this.w,i=null,a=0;a0&&parseInt(s.realIndex,10)===parseInt(t,10)&&void 0!==e.globals.previousPaths[a].paths[0]&&(i=e.globals.previousPaths[a].paths[0].d)}return i}},{key:"getDataPointsPos",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.dataPointsLen;t=t||[],e=e||[];for(var a=[],s=0;s=360&&(g=360-Math.abs(this.startAngle)-.1);var u=i.drawPath({d:"",stroke:c,strokeWidth:o*parseInt(h.strokeWidth,10)/100,fill:"none",strokeOpacity:h.opacity,classes:"apexcharts-radialbar-area"});if(h.dropShadow.enabled){var p=h.dropShadow;s.dropShadow(u,p)}l.add(u),u.attr("id","apexcharts-radialbarTrack-"+n),this.animatePaths(u,{centerX:t.centerX,centerY:t.centerY,endAngle:g,startAngle:d,size:t.size,i:n,totalItems:2,animBeginArr:0,dur:0,isTrack:!0,easing:e.globals.easing})}return a}},{key:"drawArcs",value:function(t){var e=this.w,i=new b(this.ctx),a=new L(this.ctx),s=new x(this.ctx),r=i.group(),o=this.getStrokeWidth(t);t.size=t.size-o/2;var n=e.config.plotOptions.radialBar.hollow.background,l=t.size-o*t.series.length-this.margin*t.series.length-o*parseInt(e.config.plotOptions.radialBar.track.strokeWidth,10)/100/2,h=l-e.config.plotOptions.radialBar.hollow.margin;void 0!==e.config.plotOptions.radialBar.hollow.image&&(n=this.drawHollowImage(t,r,l,n));var c=this.drawHollow({size:h,centerX:t.centerX,centerY:t.centerY,fill:n||"transparent"});if(e.config.plotOptions.radialBar.hollow.dropShadow.enabled){var d=e.config.plotOptions.radialBar.hollow.dropShadow;s.dropShadow(c,d)}var g=1;!this.radialDataLabels.total.show&&e.globals.series.length>1&&(g=0);var u=null;this.radialDataLabels.show&&(u=this.renderInnerDataLabels(this.radialDataLabels,{hollowSize:l,centerX:t.centerX,centerY:t.centerY,opacity:g})),"back"===e.config.plotOptions.radialBar.hollow.position&&(r.add(c),u&&r.add(u));var f=!1;e.config.plotOptions.radialBar.inverseOrder&&(f=!0);for(var v=f?t.series.length-1:0;f?v>=0:v100?100:t.series[v])/100,S=Math.round(this.totalAngle*A)+this.startAngle,C=void 0;e.globals.dataChanged&&(k=this.startAngle,C=Math.round(this.totalAngle*p.negToZero(e.globals.previousPaths[v])/100)+k),Math.abs(S)+Math.abs(w)>=360&&(S-=.01),Math.abs(C)+Math.abs(k)>=360&&(C-=.01);var P=S-w,M=Array.isArray(e.config.stroke.dashArray)?e.config.stroke.dashArray[v]:e.config.stroke.dashArray,T=i.drawPath({d:"",stroke:y,strokeWidth:o,fill:"none",fillOpacity:e.config.fill.opacity,classes:"apexcharts-radialbar-area apexcharts-radialbar-slice-"+v,strokeDashArray:M});if(b.setAttrs(T.node,{"data:angle":P,"data:value":t.series[v]}),e.config.chart.dropShadow.enabled){var I=e.config.chart.dropShadow;s.dropShadow(T,I,v)}s.setSelectionFilter(T,0,v),this.addListeners(T,this.radialDataLabels),m.add(T),T.attr({index:0,j:v});var z=0;!this.initialAnim||e.globals.resized||e.globals.dataChanged||(z=(S-w)/360*e.config.chart.animations.speed,this.animDur=z/(1.2*t.series.length)+this.animDur,this.animBeginArr.push(this.animDur)),e.globals.dataChanged&&(z=(S-w)/360*e.config.chart.animations.dynamicAnimation.speed,this.animDur=z/(1.2*t.series.length)+this.animDur,this.animBeginArr.push(this.animDur)),this.animatePaths(T,{centerX:t.centerX,centerY:t.centerY,endAngle:S,startAngle:w,prevEndAngle:C,prevStartAngle:k,size:t.size,i:v,totalItems:2,animBeginArr:this.animBeginArr,dur:z,shouldSetPrevPaths:!0,easing:e.globals.easing})}return{g:r,elHollow:c,dataLabels:u}}},{key:"drawHollow",value:function(t){var e=new b(this.ctx).drawCircle(2*t.size);return e.attr({class:"apexcharts-radialbar-hollow",cx:t.centerX,cy:t.centerY,r:t.size,fill:t.fill}),e}},{key:"drawHollowImage",value:function(t,e,i,a){var s=this.w,r=new L(this.ctx),o=p.randomId(),n=s.config.plotOptions.radialBar.hollow.image;if(s.config.plotOptions.radialBar.hollow.imageClipped)r.clippedImgArea({width:i,height:i,image:n,patternID:"pattern".concat(s.globals.cuid).concat(o)}),a="url(#pattern".concat(s.globals.cuid).concat(o,")");else{var l=s.config.plotOptions.radialBar.hollow.imageWidth,h=s.config.plotOptions.radialBar.hollow.imageHeight;if(void 0===l&&void 0===h){var c=s.globals.dom.Paper.image(n).loaded((function(e){this.move(t.centerX-e.width/2+s.config.plotOptions.radialBar.hollow.imageOffsetX,t.centerY-e.height/2+s.config.plotOptions.radialBar.hollow.imageOffsetY)}));e.add(c)}else{var d=s.globals.dom.Paper.image(n).loaded((function(e){this.move(t.centerX-l/2+s.config.plotOptions.radialBar.hollow.imageOffsetX,t.centerY-h/2+s.config.plotOptions.radialBar.hollow.imageOffsetY),this.size(l,h)}));e.add(d)}}return a}},{key:"getStrokeWidth",value:function(t){var e=this.w;return t.size*(100-parseInt(e.config.plotOptions.radialBar.hollow.size,10))/100/(t.series.length+1)-this.margin}}]),s}(At),Lt=function(){function t(i){e(this,t),this.w=i.w,this.lineCtx=i}return a(t,[{key:"sameValueSeriesFix",value:function(t,e){var i=this.w;if("line"===i.config.chart.type&&("gradient"===i.config.fill.type||"gradient"===i.config.fill.type[t])&&new y(this.lineCtx.ctx,i).seriesHaveSameValues(t)){var a=e[t].slice();a[a.length-1]=a[a.length-1]+1e-6,e[t]=a}return e}},{key:"calculatePoints",value:function(t){var e=t.series,i=t.realIndex,a=t.x,s=t.y,r=t.i,o=t.j,n=t.prevY,l=this.w,h=[],c=[];if(0===o){var d=this.lineCtx.categoryAxisCorrection+l.config.markers.offsetX;l.globals.isXNumeric&&(d=(l.globals.seriesX[i][0]-l.globals.minX)/this.lineCtx.xRatio+l.config.markers.offsetX),h.push(d),c.push(p.isNumber(e[r][0])?n+l.config.markers.offsetY:null),h.push(a+l.config.markers.offsetX),c.push(p.isNumber(e[r][o+1])?s+l.config.markers.offsetY:null)}else h.push(a+l.config.markers.offsetX),c.push(p.isNumber(e[r][o+1])?s+l.config.markers.offsetY:null);return{x:h,y:c}}},{key:"checkPreviousPaths",value:function(t){for(var e=t.pathFromLine,i=t.pathFromArea,a=t.realIndex,s=this.w,r=0;r0&&parseInt(o.realIndex,10)===parseInt(a,10)&&("line"===o.type?(this.lineCtx.appendPathFrom=!1,e=s.globals.previousPaths[r].paths[0].d):"area"===o.type&&(this.lineCtx.appendPathFrom=!1,i=s.globals.previousPaths[r].paths[0].d,s.config.stroke.show&&s.globals.previousPaths[r].paths[1]&&(e=s.globals.previousPaths[r].paths[1].d)))}return{pathFromLine:e,pathFromArea:i}}},{key:"determineFirstPrevY",value:function(t){var e=t.i,i=t.series,a=t.prevY,s=t.lineYPosition,r=this.w;if(void 0!==i[e][0])a=(s=r.config.chart.stacked&&e>0?this.lineCtx.prevSeriesY[e-1][0]:this.lineCtx.zeroY)-i[e][0]/this.lineCtx.yRatio[this.lineCtx.yaxisIndex]+2*(this.lineCtx.isReversed?i[e][0]/this.lineCtx.yRatio[this.lineCtx.yaxisIndex]:0);else if(r.config.chart.stacked&&e>0&&void 0===i[e][0])for(var o=e-1;o>=0;o--)if(null!==i[o][0]&&void 0!==i[o][0]){a=s=this.lineCtx.prevSeriesY[o][0];break}return{prevY:a,lineYPosition:s}}}]),t}(),Pt=function(){function t(i,a,s){e(this,t),this.ctx=i,this.w=i.w,this.xyRatios=a,this.pointsChart=!("bubble"!==this.w.config.chart.type&&"scatter"!==this.w.config.chart.type)||s,this.scatter=new M(this.ctx),this.noNegatives=this.w.globals.minX===Number.MAX_VALUE,this.lineHelpers=new Lt(this),this.markers=new P(this.ctx),this.prevSeriesY=[],this.categoryAxisCorrection=0,this.yaxisIndex=0}return a(t,[{key:"draw",value:function(t,e,i){var a=this.w,s=new b(this.ctx),r=a.globals.comboCharts?e:a.config.chart.type,o=s.group({class:"apexcharts-".concat(r,"-series apexcharts-plot-series")}),n=new y(this.ctx,a);this.yRatio=this.xyRatios.yRatio,this.zRatio=this.xyRatios.zRatio,this.xRatio=this.xyRatios.xRatio,this.baseLineY=this.xyRatios.baseLineY,t=n.getLogSeries(t),this.yRatio=n.getLogYRatios(this.yRatio);for(var l=[],h=0;h0&&(u=(a.globals.seriesX[c][0]-a.globals.minX)/this.xRatio),g.push(u);var p,f=u,x=f,v=this.zeroY;v=this.lineHelpers.determineFirstPrevY({i:h,series:t,prevY:v,lineYPosition:0}).prevY,d.push(v),p=v;var m=this._calculatePathsFrom({series:t,i:h,realIndex:c,prevX:x,prevY:v}),w=this._iterateOverDataPoints({series:t,realIndex:c,i:h,x:u,y:1,pX:f,pY:p,pathsFrom:m,linePaths:[],areaPaths:[],seriesIndex:i,lineYPosition:0,xArrj:g,yArrj:d});this._handlePaths({type:r,realIndex:c,i:h,paths:w}),this.elSeries.add(this.elPointsMain),this.elSeries.add(this.elDataLabelsWrap),l.push(this.elSeries)}if(a.config.chart.stacked)for(var k=l.length;k>0;k--)o.add(l[k-1]);else for(var A=0;A1&&(this.yaxisIndex=i),this.isReversed=a.config.yaxis[this.yaxisIndex]&&a.config.yaxis[this.yaxisIndex].reversed,this.zeroY=a.globals.gridHeight-this.baseLineY[this.yaxisIndex]-(this.isReversed?a.globals.gridHeight:0)+(this.isReversed?2*this.baseLineY[this.yaxisIndex]:0),this.areaBottomY=this.zeroY,(this.zeroY>a.globals.gridHeight||"end"===a.config.plotOptions.area.fillTo)&&(this.areaBottomY=a.globals.gridHeight),this.categoryAxisCorrection=this.xDivision/2,this.elSeries=s.group({class:"apexcharts-series",seriesName:p.escapeString(a.globals.seriesNames[i])}),this.elPointsMain=s.group({class:"apexcharts-series-markers-wrap","data:realIndex":i}),this.elDataLabelsWrap=s.group({class:"apexcharts-datalabels","data:realIndex":i});var r=t[e].length===a.globals.dataPoints;this.elSeries.attr({"data:longestSeries":r,rel:e+1,"data:realIndex":i}),this.appendPathFrom=!0}},{key:"_calculatePathsFrom",value:function(t){var e,i,a,s,r=t.series,o=t.i,n=t.realIndex,l=t.prevX,h=t.prevY,c=this.w,d=new b(this.ctx);if(null===r[o][0]){for(var g=0;g0){var u=this.lineHelpers.checkPreviousPaths({pathFromLine:a,pathFromArea:s,realIndex:n});a=u.pathFromLine,s=u.pathFromArea}return{prevX:l,prevY:h,linePath:e,areaPath:i,pathFromLine:a,pathFromArea:s}}},{key:"_handlePaths",value:function(t){var e=t.type,i=t.realIndex,a=t.i,s=t.paths,r=this.w,n=new b(this.ctx),l=new L(this.ctx);this.prevSeriesY.push(s.yArrj),r.globals.seriesXvalues[i]=s.xArrj,r.globals.seriesYvalues[i]=s.yArrj;var h=r.config.forecastDataPoints;if(h.count>0){var c=r.globals.seriesXvalues[i][r.globals.seriesXvalues[i].length-h.count-1],d=n.drawRect(c,0,r.globals.gridWidth,r.globals.gridHeight,0);r.globals.dom.elForecastMask.appendChild(d.node);var g=n.drawRect(0,0,c,r.globals.gridHeight,0);r.globals.dom.elNonForecastMask.appendChild(g.node)}this.pointsChart||r.globals.delayedElements.push({el:this.elPointsMain.node,index:i});var u={i:a,realIndex:i,animationDelay:a,initialSpeed:r.config.chart.animations.speed,dataChangeSpeed:r.config.chart.animations.dynamicAnimation.speed,className:"apexcharts-".concat(e)};if("area"===e)for(var p=l.fillPath({seriesNumber:i}),f=0;f0){var k=n.renderPaths(y);k.node.setAttribute("stroke-dasharray",h.dashArray),h.strokeWidth&&k.node.setAttribute("stroke-width",h.strokeWidth),this.elSeries.add(k),k.attr("clip-path","url(#forecastMask".concat(r.globals.cuid,")")),w.attr("clip-path","url(#nonForecastMask".concat(r.globals.cuid,")"))}}}}},{key:"_iterateOverDataPoints",value:function(t){for(var e=t.series,i=t.realIndex,a=t.i,s=t.x,r=t.y,o=t.pX,n=t.pY,l=t.pathsFrom,h=t.linePaths,c=t.areaPaths,d=t.seriesIndex,g=t.lineYPosition,u=t.xArrj,f=t.yArrj,x=this.w,v=new b(this.ctx),m=this.yRatio,y=l.prevY,w=l.linePath,k=l.areaPath,A=l.pathFromLine,S=l.pathFromArea,C=p.isNumber(x.globals.minYArr[i])?x.globals.minYArr[i]:x.globals.minY,L=x.globals.dataPoints>1?x.globals.dataPoints-1:x.globals.dataPoints,P=0;P0&&x.globals.collapsedSeries.length-1){e--;break}return e>=0?e:0}(a-1)][P+1]}else g=this.zeroY;else g=this.zeroY;r=M?g-C/m[this.yaxisIndex]+2*(this.isReversed?C/m[this.yaxisIndex]:0):g-e[a][P+1]/m[this.yaxisIndex]+2*(this.isReversed?e[a][P+1]/m[this.yaxisIndex]:0),u.push(s),f.push(r);var I=this.lineHelpers.calculatePoints({series:e,x:s,y:r,realIndex:i,i:a,j:P,prevY:y}),z=this._createPaths({series:e,i:a,realIndex:i,j:P,x:s,y:r,pX:o,pY:n,linePath:w,areaPath:k,linePaths:h,areaPaths:c,seriesIndex:d});c=z.areaPaths,h=z.linePaths,o=z.pX,n=z.pY,k=z.areaPath,w=z.linePath,this.appendPathFrom&&(A+=v.line(s,this.zeroY),S+=v.line(s,this.zeroY)),this.handleNullDataPoints(e,I,a,P,i),this._handleMarkersAndLabels({pointsPos:I,series:e,x:s,y:r,prevY:y,i:a,j:P,realIndex:i})}return{yArrj:f,xArrj:u,pathFromArea:S,areaPaths:c,pathFromLine:A,linePaths:h}}},{key:"_handleMarkersAndLabels",value:function(t){var e=t.pointsPos;t.series,t.x,t.y,t.prevY;var i=t.i,a=t.j,s=t.realIndex,r=this.w,o=new T(this.ctx);if(this.pointsChart)this.scatter.draw(this.elSeries,a,{realIndex:s,pointsPos:e,zRatio:this.zRatio,elParent:this.elPointsMain});else{r.globals.series[i].length>1&&this.elPointsMain.node.classList.add("apexcharts-element-hidden");var n=this.markers.plotChartMarkers(e,s,a+1);null!==n&&this.elPointsMain.add(n)}var l=o.drawDataLabel(e,s,a+1,null);null!==l&&this.elDataLabelsWrap.add(l)}},{key:"_createPaths",value:function(t){var e=t.series,i=t.i,a=t.realIndex,s=t.j,r=t.x,o=t.y,n=t.pX,l=t.pY,h=t.linePath,c=t.areaPath,d=t.linePaths,g=t.areaPaths,u=t.seriesIndex,p=this.w,f=new b(this.ctx),x=p.config.stroke.curve,v=this.areaBottomY;if(Array.isArray(p.config.stroke.curve)&&(x=Array.isArray(u)?p.config.stroke.curve[u[i]]:p.config.stroke.curve[i]),"smooth"===x){var m=.35*(r-n);p.globals.hasNullValues?(null!==e[i][s]&&(null!==e[i][s+1]?(h=f.move(n,l)+f.curve(n+m,l,r-m,o,r+1,o),c=f.move(n+1,l)+f.curve(n+m,l,r-m,o,r+1,o)+f.line(r,v)+f.line(n,v)+"z"):(h=f.move(n,l),c=f.move(n,l)+"z")),d.push(h),g.push(c)):(h+=f.curve(n+m,l,r-m,o,r,o),c+=f.curve(n+m,l,r-m,o,r,o)),n=r,l=o,s===e[i].length-2&&(c=c+f.curve(n,l,r,o,r,v)+f.move(r,o)+"z",p.globals.hasNullValues||(d.push(h),g.push(c)))}else{if(null===e[i][s+1]){h+=f.move(r,o);var y=p.globals.isXNumeric?(p.globals.seriesX[a][s]-p.globals.minX)/this.xRatio:r-this.xDivision;c=c+f.line(y,v)+f.move(r,o)+"z"}null===e[i][s]&&(h+=f.move(r,o),c+=f.move(r,v)),"stepline"===x?(h=h+f.line(r,null,"H")+f.line(null,o,"V"),c=c+f.line(r,null,"H")+f.line(null,o,"V")):"straight"===x&&(h+=f.line(r,o),c+=f.line(r,o)),s===e[i].length-2&&(c=c+f.line(r,v)+f.move(r,o)+"z",d.push(h),g.push(c))}return{linePaths:d,areaPaths:g,pX:n,pY:l,linePath:h,areaPath:c}}},{key:"handleNullDataPoints",value:function(t,e,i,a,s){var r=this.w;if(null===t[i][a]&&r.config.markers.showNullDataPoints||1===t[i].length){var o=this.markers.plotChartMarkers(e,s,a+1,this.strokeWidth-r.config.markers.strokeWidth/2,!0);null!==o&&this.elPointsMain.add(o)}}}]),t}();window.TreemapSquared={},window.TreemapSquared.generate=function(){function t(e,i,a,s){this.xoffset=e,this.yoffset=i,this.height=s,this.width=a,this.shortestEdge=function(){return Math.min(this.height,this.width)},this.getCoordinates=function(t){var e,i=[],a=this.xoffset,s=this.yoffset,o=r(t)/this.height,n=r(t)/this.width;if(this.width>=this.height)for(e=0;e=this.height){var a=e/this.height,s=this.width-a;i=new t(this.xoffset+a,this.yoffset,s,this.height)}else{var r=e/this.width,o=this.height-r;i=new t(this.xoffset,this.yoffset+r,this.width,o)}return i}}function e(e,a,s,o,n){return o=void 0===o?0:o,n=void 0===n?0:n,function(t){var e,i,a=[];for(e=0;e=o}(e,l=t[0],n)?(e.push(l),i(t.slice(1),e,s,o)):(h=s.cutArea(r(e),o),o.push(s.getCoordinates(e)),i(t,[],h,o)),o;o.push(s.getCoordinates(e))}function a(t,e){var i=Math.min.apply(Math,t),a=Math.max.apply(Math,t),s=r(t);return Math.max(Math.pow(e,2)*a/Math.pow(s,2),Math.pow(s,2)/(Math.pow(e,2)*i))}function s(t){return t&&t.constructor===Array}function r(t){var e,i=0;for(e=0;es-i&&n.width<=r-a){var l=o.rotateAroundCenter(t.node);t.node.setAttribute("transform","rotate(-90 ".concat(l.x," ").concat(l.y,")"))}}},{key:"animateTreemap",value:function(t,e,i,a){var s=new f(this.ctx);s.animateRect(t,{x:e.x,y:e.y,width:e.width,height:e.height},{x:i.x,y:i.y,width:i.width,height:i.height},a,(function(){s.animationCompleted(t)}))}}]),t}(),zt=86400,Xt=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.timeScaleArray=[],this.utc=this.w.config.xaxis.labels.datetimeUTC}return a(t,[{key:"calculateTimeScaleTicks",value:function(t,e){var i=this,a=this.w;if(a.globals.allSeriesCollapsed)return a.globals.labels=[],a.globals.timescaleLabels=[],[];var s=new Y(this.ctx),r=(e-t)/864e5;this.determineInterval(r),a.globals.disableZoomIn=!1,a.globals.disableZoomOut=!1,r<.00011574074074074075?a.globals.disableZoomIn=!0:r>5e4&&(a.globals.disableZoomOut=!0);var n=s.getTimeUnitsfromTimestamp(t,e,this.utc),l=a.globals.gridWidth/r,h=l/24,c=h/60,d=c/60,g=Math.floor(24*r),u=Math.floor(1440*r),p=Math.floor(r*zt),f=Math.floor(r),x=Math.floor(r/30),b=Math.floor(r/365),v={minMillisecond:n.minMillisecond,minSecond:n.minSecond,minMinute:n.minMinute,minHour:n.minHour,minDate:n.minDate,minMonth:n.minMonth,minYear:n.minYear},m={firstVal:v,currentMillisecond:v.minMillisecond,currentSecond:v.minSecond,currentMinute:v.minMinute,currentHour:v.minHour,currentMonthDate:v.minDate,currentDate:v.minDate,currentMonth:v.minMonth,currentYear:v.minYear,daysWidthOnXAxis:l,hoursWidthOnXAxis:h,minutesWidthOnXAxis:c,secondsWidthOnXAxis:d,numberOfSeconds:p,numberOfMinutes:u,numberOfHours:g,numberOfDays:f,numberOfMonths:x,numberOfYears:b};switch(this.tickInterval){case"years":this.generateYearScale(m);break;case"months":case"half_year":this.generateMonthScale(m);break;case"months_days":case"months_fortnight":case"days":case"week_days":this.generateDayScale(m);break;case"hours":this.generateHourScale(m);break;case"minutes_fives":case"minutes":this.generateMinuteScale(m);break;case"seconds_tens":case"seconds_fives":case"seconds":this.generateSecondScale(m)}var y=this.timeScaleArray.map((function(t){var e={position:t.position,unit:t.unit,year:t.year,day:t.day?t.day:1,hour:t.hour?t.hour:0,month:t.month+1};return"month"===t.unit?o(o({},e),{},{day:1,value:t.value+1}):"day"===t.unit||"hour"===t.unit?o(o({},e),{},{value:t.value}):"minute"===t.unit?o(o({},e),{},{value:t.value,minute:t.value}):"second"===t.unit?o(o({},e),{},{value:t.value,minute:t.minute,second:t.second}):t}));return y.filter((function(t){var e=1,s=Math.ceil(a.globals.gridWidth/120),r=t.value;void 0!==a.config.xaxis.tickAmount&&(s=a.config.xaxis.tickAmount),y.length>s&&(e=Math.floor(y.length/s));var o=!1,n=!1;switch(i.tickInterval){case"years":"year"===t.unit&&(o=!0);break;case"half_year":e=7,"year"===t.unit&&(o=!0);break;case"months":e=1,"year"===t.unit&&(o=!0);break;case"months_fortnight":e=15,"year"!==t.unit&&"month"!==t.unit||(o=!0),30===r&&(n=!0);break;case"months_days":e=10,"month"===t.unit&&(o=!0),30===r&&(n=!0);break;case"week_days":e=8,"month"===t.unit&&(o=!0);break;case"days":e=1,"month"===t.unit&&(o=!0);break;case"hours":"day"===t.unit&&(o=!0);break;case"minutes_fives":r%5!=0&&(n=!0);break;case"seconds_tens":r%10!=0&&(n=!0);break;case"seconds_fives":r%5!=0&&(n=!0)}if("hours"===i.tickInterval||"minutes_fives"===i.tickInterval||"seconds_tens"===i.tickInterval||"seconds_fives"===i.tickInterval){if(!n)return!0}else if((r%e==0||o)&&!n)return!0}))}},{key:"recalcDimensionsBasedOnFormat",value:function(t,e){var i=this.w,a=this.formatDates(t),s=this.removeOverlappingTS(a);i.globals.timescaleLabels=s.slice(),new ot(this.ctx).plotCoords()}},{key:"determineInterval",value:function(t){var e=24*t,i=60*e;switch(!0){case t/365>5:this.tickInterval="years";break;case t>800:this.tickInterval="half_year";break;case t>180:this.tickInterval="months";break;case t>90:this.tickInterval="months_fortnight";break;case t>60:this.tickInterval="months_days";break;case t>30:this.tickInterval="week_days";break;case t>2:this.tickInterval="days";break;case e>2.4:this.tickInterval="hours";break;case i>15:this.tickInterval="minutes_fives";break;case i>5:this.tickInterval="minutes";break;case i>1:this.tickInterval="seconds_tens";break;case 60*i>20:this.tickInterval="seconds_fives";break;default:this.tickInterval="seconds"}}},{key:"generateYearScale",value:function(t){var e=t.firstVal,i=t.currentMonth,a=t.currentYear,s=t.daysWidthOnXAxis,r=t.numberOfYears,o=e.minYear,n=0,l=new Y(this.ctx),h="year";if(e.minDate>1||e.minMonth>0){var c=l.determineRemainingDaysOfYear(e.minYear,e.minMonth,e.minDate);n=(l.determineDaysOfYear(e.minYear)-c+1)*s,o=e.minYear+1,this.timeScaleArray.push({position:n,value:o,unit:h,year:o,month:p.monthMod(i+1)})}else 1===e.minDate&&0===e.minMonth&&this.timeScaleArray.push({position:n,value:o,unit:h,year:a,month:p.monthMod(i+1)});for(var d=o,g=n,u=0;u1){l=(h.determineDaysOfMonths(a+1,e.minYear)-i+1)*r,n=p.monthMod(a+1);var g=s+d,u=p.monthMod(n),f=n;0===n&&(c="year",f=g,u=1,g+=d+=1),this.timeScaleArray.push({position:l,value:f,unit:c,year:g,month:u})}else this.timeScaleArray.push({position:l,value:n,unit:c,year:s,month:p.monthMod(a)});for(var x=n+1,b=l,v=0,m=1;vo.determineDaysOfMonths(e+1,i)?(h=1,n="month",g=e+=1,e):e},d=(24-e.minHour)*s,g=l,u=c(h,i,a);0===e.minHour&&1===e.minDate?(d=0,g=p.monthMod(e.minMonth),n="month",h=e.minDate,r++):1!==e.minDate&&0===e.minHour&&0===e.minMinute&&(d=0,l=e.minDate,g=l,u=c(h=l,i,a)),this.timeScaleArray.push({position:d,value:g,unit:n,year:this._getYear(a,u,0),month:p.monthMod(u),day:h});for(var f=d,x=0;xn.determineDaysOfMonths(e+1,s)&&(x=1,e+=1),{month:e,date:x}},c=function(t,e){return t>n.determineDaysOfMonths(e+1,s)?e+=1:e},d=60-(e.minMinute+e.minSecond/60),g=d*r,u=e.minHour+1,f=u+1;60===d&&(g=0,f=(u=e.minHour)+1);var x=i,b=c(x,a);this.timeScaleArray.push({position:g,value:u,unit:l,day:x,hour:f,year:s,month:p.monthMod(b)});for(var v=g,m=0;m=24)f=0,l="day",b=h(x+=1,b).month,b=c(x,b);var y=this._getYear(s,b,0);v=0===f&&0===m?d*r:60*r+v;var w=0===f?x:f;this.timeScaleArray.push({position:v,value:w,unit:l,hour:f,day:x,year:y,month:p.monthMod(b)}),f++}}},{key:"generateMinuteScale",value:function(t){for(var e=t.currentMillisecond,i=t.currentSecond,a=t.currentMinute,s=t.currentHour,r=t.currentDate,o=t.currentMonth,n=t.currentYear,l=t.minutesWidthOnXAxis,h=t.secondsWidthOnXAxis,c=t.numberOfMinutes,d=a+1,g=r,u=o,f=n,x=s,b=(60-i-e/1e3)*h,v=0;v=60&&(d=0,24===(x+=1)&&(x=0)),this.timeScaleArray.push({position:b,value:d,unit:"minute",hour:x,minute:d,day:g,year:this._getYear(f,u,0),month:p.monthMod(u)}),b+=l,d++}},{key:"generateSecondScale",value:function(t){for(var e=t.currentMillisecond,i=t.currentSecond,a=t.currentMinute,s=t.currentHour,r=t.currentDate,o=t.currentMonth,n=t.currentYear,l=t.secondsWidthOnXAxis,h=t.numberOfSeconds,c=i+1,d=a,g=r,u=o,f=n,x=s,b=(1e3-e)/1e3*l,v=0;v=60&&(c=0,++d>=60&&(d=0,24===++x&&(x=0))),this.timeScaleArray.push({position:b,value:c,unit:"second",hour:x,minute:d,second:c,day:g,year:this._getYear(f,u,0),month:p.monthMod(u)}),b+=l,c++}},{key:"createRawDateString",value:function(t,e){var i=t.year;return 0===t.month&&(t.month=1),i+="-"+("0"+t.month.toString()).slice(-2),"day"===t.unit?i+="day"===t.unit?"-"+("0"+e).slice(-2):"-01":i+="-"+("0"+(t.day?t.day:"1")).slice(-2),"hour"===t.unit?i+="hour"===t.unit?"T"+("0"+e).slice(-2):"T00":i+="T"+("0"+(t.hour?t.hour:"0")).slice(-2),"minute"===t.unit?i+=":"+("0"+e).slice(-2):i+=":"+(t.minute?("0"+t.minute).slice(-2):"00"),"second"===t.unit?i+=":"+("0"+e).slice(-2):i+=":00",this.utc&&(i+=".000Z"),i}},{key:"formatDates",value:function(t){var e=this,i=this.w;return t.map((function(t){var a=t.value.toString(),s=new Y(e.ctx),r=e.createRawDateString(t,a),o=s.getDate(s.parseDate(r));if(e.utc||(o=s.getDate(s.parseDateWithTimezone(r))),void 0===i.config.xaxis.labels.format){var n="dd MMM",l=i.config.xaxis.labels.datetimeFormatter;"year"===t.unit&&(n=l.year),"month"===t.unit&&(n=l.month),"day"===t.unit&&(n=l.day),"hour"===t.unit&&(n=l.hour),"minute"===t.unit&&(n=l.minute),"second"===t.unit&&(n=l.second),a=s.formatDate(o,n)}else a=s.formatDate(o,i.config.xaxis.labels.format);return{dateString:r,position:t.position,value:a,unit:t.unit,year:t.year,month:t.month}}))}},{key:"removeOverlappingTS",value:function(t){var e,i=this,a=new b(this.ctx),s=!1;t.length>0&&t[0].value&&t.every((function(e){return e.value.length===t[0].value.length}))&&(s=!0,e=a.getTextRects(t[0].value).width);var r=0,o=t.map((function(o,n){if(n>0&&i.w.config.xaxis.labels.hideOverlappingLabels){var l=s?e:a.getTextRects(t[r].value).width,h=t[r].position;return o.position>h+l+10?(r=n,o):null}return o}));return o=o.filter((function(t){return null!==t}))}},{key:"_getYear",value:function(t,e,i){return t+Math.floor(e/12)+i}}]),t}(),Et=function(){function t(i,a){e(this,t),this.ctx=a,this.w=a.w,this.el=i}return a(t,[{key:"setupElements",value:function(){var t=this.w.globals,e=this.w.config,i=e.chart.type;t.axisCharts=["line","area","bar","rangeBar","candlestick","boxPlot","scatter","bubble","radar","heatmap","treemap"].indexOf(i)>-1,t.xyCharts=["line","area","bar","rangeBar","candlestick","boxPlot","scatter","bubble"].indexOf(i)>-1,t.isBarHorizontal=("bar"===e.chart.type||"rangeBar"===e.chart.type)&&e.plotOptions.bar.horizontal,t.chartClass=".apexcharts"+t.chartID,t.dom.baseEl=this.el,t.dom.elWrap=document.createElement("div"),b.setAttrs(t.dom.elWrap,{id:t.chartClass.substring(1),class:"apexcharts-canvas "+t.chartClass.substring(1)}),this.el.appendChild(t.dom.elWrap),t.dom.Paper=new window.SVG.Doc(t.dom.elWrap),t.dom.Paper.attr({class:"apexcharts-svg","xmlns:data":"ApexChartsNS",transform:"translate(".concat(e.chart.offsetX,", ").concat(e.chart.offsetY,")")}),t.dom.Paper.node.style.background=e.chart.background,this.setSVGDimensions(),t.dom.elGraphical=t.dom.Paper.group().attr({class:"apexcharts-inner apexcharts-graphical"}),t.dom.elAnnotations=t.dom.Paper.group().attr({class:"apexcharts-annotations"}),t.dom.elDefs=t.dom.Paper.defs(),t.dom.elLegendWrap=document.createElement("div"),t.dom.elLegendWrap.classList.add("apexcharts-legend"),t.dom.elWrap.appendChild(t.dom.elLegendWrap),t.dom.Paper.add(t.dom.elGraphical),t.dom.elGraphical.add(t.dom.elDefs)}},{key:"plotChartType",value:function(t,e){var i=this.w,a=i.config,s=i.globals,r={series:[],i:[]},o={series:[],i:[]},n={series:[],i:[]},l={series:[],i:[]},h={series:[],i:[]},c={series:[],i:[]},d={series:[],i:[]};s.series.map((function(e,g){var u=0;void 0!==t[g].type?("column"===t[g].type||"bar"===t[g].type?(s.series.length>1&&a.plotOptions.bar.horizontal&&console.warn("Horizontal bars are not supported in a mixed/combo chart. Please turn off `plotOptions.bar.horizontal`"),h.series.push(e),h.i.push(g),u++,i.globals.columnSeries=h.series):"area"===t[g].type?(o.series.push(e),o.i.push(g),u++):"line"===t[g].type?(r.series.push(e),r.i.push(g),u++):"scatter"===t[g].type?(n.series.push(e),n.i.push(g)):"bubble"===t[g].type?(l.series.push(e),l.i.push(g),u++):"candlestick"===t[g].type?(c.series.push(e),c.i.push(g),u++):"boxPlot"===t[g].type?(d.series.push(e),d.i.push(g),u++):console.warn("You have specified an unrecognized chart type. Available types for this property are line/area/column/bar/scatter/bubble"),u>1&&(s.comboCharts=!0)):(r.series.push(e),r.i.push(g))}));var g=new Pt(this.ctx,e),u=new mt(this.ctx,e);this.ctx.pie=new At(this.ctx);var p=new Ct(this.ctx);this.ctx.rangeBar=new F(this.ctx,e);var f=new St(this.ctx),x=[];if(s.comboCharts){if(o.series.length>0&&x.push(g.draw(o.series,"area",o.i)),h.series.length>0)if(i.config.chart.stacked){var b=new vt(this.ctx,e);x.push(b.draw(h.series,h.i))}else this.ctx.bar=new E(this.ctx,e),x.push(this.ctx.bar.draw(h.series,h.i));if(r.series.length>0&&x.push(g.draw(r.series,"line",r.i)),c.series.length>0&&x.push(u.draw(c.series,c.i)),d.series.length>0&&x.push(u.draw(d.series,d.i)),n.series.length>0){var v=new Pt(this.ctx,e,!0);x.push(v.draw(n.series,"scatter",n.i))}if(l.series.length>0){var m=new Pt(this.ctx,e,!0);x.push(m.draw(l.series,"bubble",l.i))}}else switch(a.chart.type){case"line":x=g.draw(s.series,"line");break;case"area":x=g.draw(s.series,"area");break;case"bar":if(a.chart.stacked)x=new vt(this.ctx,e).draw(s.series);else this.ctx.bar=new E(this.ctx,e),x=this.ctx.bar.draw(s.series);break;case"candlestick":x=new mt(this.ctx,e).draw(s.series);break;case"boxPlot":x=new mt(this.ctx,e).draw(s.series);break;case"rangeBar":x=this.ctx.rangeBar.draw(s.series);break;case"heatmap":x=new wt(this.ctx,e).draw(s.series);break;case"treemap":x=new It(this.ctx,e).draw(s.series);break;case"pie":case"donut":case"polarArea":x=this.ctx.pie.draw(s.series);break;case"radialBar":x=p.draw(s.series);break;case"radar":x=f.draw(s.series);break;default:x=g.draw(s.series)}return x}},{key:"setSVGDimensions",value:function(){var t=this.w.globals,e=this.w.config;t.svgWidth=e.chart.width,t.svgHeight=e.chart.height;var i=p.getDimensions(this.el),a=e.chart.width.toString().split(/[0-9]+/g).pop();"%"===a?p.isNumber(i[0])&&(0===i[0].width&&(i=p.getDimensions(this.el.parentNode)),t.svgWidth=i[0]*parseInt(e.chart.width,10)/100):"px"!==a&&""!==a||(t.svgWidth=parseInt(e.chart.width,10));var s=e.chart.height.toString().split(/[0-9]+/g).pop();if("auto"!==t.svgHeight&&""!==t.svgHeight)if("%"===s){var r=p.getDimensions(this.el.parentNode);t.svgHeight=r[1]*parseInt(e.chart.height,10)/100}else t.svgHeight=parseInt(e.chart.height,10);else t.axisCharts?t.svgHeight=t.svgWidth/1.61:t.svgHeight=t.svgWidth/1.2;if(t.svgWidth<0&&(t.svgWidth=0),t.svgHeight<0&&(t.svgHeight=0),b.setAttrs(t.dom.Paper.node,{width:t.svgWidth,height:t.svgHeight}),"%"!==s){var o=e.chart.sparkline.enabled?0:t.axisCharts?e.chart.parentHeightOffset:0;t.dom.Paper.node.parentNode.parentNode.style.minHeight=t.svgHeight+o+"px"}t.dom.elWrap.style.width=t.svgWidth+"px",t.dom.elWrap.style.height=t.svgHeight+"px"}},{key:"shiftGraphPosition",value:function(){var t=this.w.globals,e=t.translateY,i={transform:"translate("+t.translateX+", "+e+")"};b.setAttrs(t.dom.elGraphical.node,i)}},{key:"resizeNonAxisCharts",value:function(){var t=this.w,e=t.globals,i=0,a=t.config.chart.sparkline.enabled?1:15;a+=t.config.grid.padding.bottom,"top"!==t.config.legend.position&&"bottom"!==t.config.legend.position||!t.config.legend.show||t.config.legend.floating||(i=new lt(this.ctx).legendHelpers.getLegendBBox().clwh+10);var s=t.globals.dom.baseEl.querySelector(".apexcharts-radialbar, .apexcharts-pie"),r=2.05*t.globals.radialSize;if(s&&!t.config.chart.sparkline.enabled&&0!==t.config.plotOptions.radialBar.startAngle){var o=p.getBoundingClientRect(s);r=o.bottom;var n=o.bottom-o.top;r=Math.max(2.05*t.globals.radialSize,n)}var l=r+e.translateY+i+a;e.dom.elLegendForeign&&e.dom.elLegendForeign.setAttribute("height",l),e.dom.elWrap.style.height=l+"px",b.setAttrs(e.dom.Paper.node,{height:l}),e.dom.Paper.node.parentNode.parentNode.style.minHeight=l+"px"}},{key:"coreCalculations",value:function(){new U(this.ctx).init()}},{key:"resetGlobals",value:function(){var t=this,e=function(){return t.w.config.series.map((function(t){return[]}))},i=new D,a=this.w.globals;i.initGlobalVars(a),a.seriesXvalues=e(),a.seriesYvalues=e()}},{key:"isMultipleY",value:function(){if(this.w.config.yaxis.constructor===Array&&this.w.config.yaxis.length>1)return this.w.globals.isMultipleYAxis=!0,!0}},{key:"xySettings",value:function(){var t=null,e=this.w;if(e.globals.axisCharts){if("back"===e.config.xaxis.crosshairs.position)new Q(this.ctx).drawXCrosshairs();if("back"===e.config.yaxis[0].crosshairs.position)new Q(this.ctx).drawYCrosshairs();if("datetime"===e.config.xaxis.type&&void 0===e.config.xaxis.labels.formatter){this.ctx.timeScale=new Xt(this.ctx);var i=[];isFinite(e.globals.minX)&&isFinite(e.globals.maxX)&&!e.globals.isBarHorizontal?i=this.ctx.timeScale.calculateTimeScaleTicks(e.globals.minX,e.globals.maxX):e.globals.isBarHorizontal&&(i=this.ctx.timeScale.calculateTimeScaleTicks(e.globals.minY,e.globals.maxY)),this.ctx.timeScale.recalcDimensionsBasedOnFormat(i)}t=new y(this.ctx).getCalculatedRatios()}return t}},{key:"updateSourceChart",value:function(t){this.ctx.w.globals.selection=void 0,this.ctx.updateHelpers._updateOptions({chart:{selection:{xaxis:{min:t.w.globals.minX,max:t.w.globals.maxX}}}},!1,!1)}},{key:"setupBrushHandler",value:function(){var t=this,e=this.w;if(e.config.chart.brush.enabled&&"function"!=typeof e.config.chart.events.selection){var i=e.config.chart.brush.targets||[e.config.chart.brush.target];i.forEach((function(e){var i=ApexCharts.getChartByID(e);i.w.globals.brushSource=t.ctx,"function"!=typeof i.w.config.chart.events.zoomed&&(i.w.config.chart.events.zoomed=function(){t.updateSourceChart(i)}),"function"!=typeof i.w.config.chart.events.scrolled&&(i.w.config.chart.events.scrolled=function(){t.updateSourceChart(i)})})),e.config.chart.events.selection=function(t,a){i.forEach((function(t){var i=ApexCharts.getChartByID(t),s=p.clone(e.config.yaxis);if(e.config.chart.brush.autoScaleYaxis&&1===i.w.globals.series.length){var r=new j(i);s=r.autoScaleY(i,s,a)}var n=i.w.config.yaxis.reduce((function(t,e,a){return[].concat(g(t),[o(o({},i.w.config.yaxis[a]),{},{min:s[0].min,max:s[0].max})])}),[]);i.ctx.updateHelpers._updateOptions({xaxis:{min:a.xaxis.min,max:a.xaxis.max},yaxis:n},!1,!1,!1,!1)}))}}}}]),t}(),Yt=function(){function i(t){e(this,i),this.ctx=t,this.w=t.w}return a(i,[{key:"_updateOptions",value:function(e){var i=this,a=arguments.length>1&&void 0!==arguments[1]&&arguments[1],s=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=arguments.length>4&&void 0!==arguments[4]&&arguments[4];return new Promise((function(n){var l=[i.ctx];r&&(l=i.ctx.getSyncedCharts()),i.ctx.w.globals.isExecCalled&&(l=[i.ctx],i.ctx.w.globals.isExecCalled=!1),l.forEach((function(r,h){var c=r.w;return c.globals.shouldAnimate=s,a||(c.globals.resized=!0,c.globals.dataChanged=!0,s&&r.series.getPreviousPaths()),e&&"object"===t(e)&&(r.config=new H(e),e=y.extendArrayProps(r.config,e,c),r.w.globals.chartID!==i.ctx.w.globals.chartID&&delete e.series,c.config=p.extend(c.config,e),o&&(c.globals.lastXAxis=e.xaxis?p.clone(e.xaxis):[],c.globals.lastYAxis=e.yaxis?p.clone(e.yaxis):[],c.globals.initialConfig=p.extend({},c.config),c.globals.initialSeries=p.clone(c.config.series))),r.update(e).then((function(){h===l.length-1&&n(r)}))}))}))}},{key:"_updateSeries",value:function(t,e){var i=this,a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return new Promise((function(s){var r,o=i.w;return o.globals.shouldAnimate=e,o.globals.dataChanged=!0,e&&i.ctx.series.getPreviousPaths(),o.globals.axisCharts?(0===(r=t.map((function(t,e){return i._extendSeries(t,e)}))).length&&(r=[{data:[]}]),o.config.series=r):o.config.series=t.slice(),a&&(o.globals.initialSeries=p.clone(o.config.series)),i.ctx.update().then((function(){s(i.ctx)}))}))}},{key:"_extendSeries",value:function(t,e){var i=this.w,a=i.config.series[e];return o(o({},i.config.series[e]),{},{name:t.name?t.name:a&&a.name,color:t.color?t.color:a&&a.color,type:t.type?t.type:a&&a.type,data:t.data?t.data:a&&a.data})}},{key:"toggleDataPointSelection",value:function(t,e){var i=this.w,a=null,s=".apexcharts-series[data\\:realIndex='".concat(t,"']");return i.globals.axisCharts?a=i.globals.dom.Paper.select("".concat(s," path[j='").concat(e,"'], ").concat(s," circle[j='").concat(e,"'], ").concat(s," rect[j='").concat(e,"']")).members[0]:void 0===e&&(a=i.globals.dom.Paper.select("".concat(s," path[j='").concat(t,"']")).members[0],"pie"!==i.config.chart.type&&"polarArea"!==i.config.chart.type&&"donut"!==i.config.chart.type||this.ctx.pie.pieClicked(t)),a?(new b(this.ctx).pathMouseDown(a,null),a.node?a.node:null):(console.warn("toggleDataPointSelection: Element not found"),null)}},{key:"forceXAxisUpdate",value:function(t){var e=this.w;if(["min","max"].forEach((function(i){void 0!==t.xaxis[i]&&(e.config.xaxis[i]=t.xaxis[i],e.globals.lastXAxis[i]=t.xaxis[i])})),t.xaxis.categories&&t.xaxis.categories.length&&(e.config.xaxis.categories=t.xaxis.categories),e.config.xaxis.convertedCatToNumeric){var i=new R(t);t=i.convertCatToNumericXaxis(t,this.ctx)}return t}},{key:"forceYAxisUpdate",value:function(t){var e=this.w;return e.config.chart.stacked&&"100%"===e.config.chart.stackType&&(Array.isArray(t.yaxis)?t.yaxis.forEach((function(e,i){t.yaxis[i].min=0,t.yaxis[i].max=100})):(t.yaxis.min=0,t.yaxis.max=100)),t}},{key:"revertDefaultAxisMinMax",value:function(t){var e=this,i=this.w,a=i.globals.lastXAxis,s=i.globals.lastYAxis;t&&t.xaxis&&(a=t.xaxis),t&&t.yaxis&&(s=t.yaxis),i.config.xaxis.min=a.min,i.config.xaxis.max=a.max;var r=function(t){void 0!==s[t]&&(i.config.yaxis[t].min=s[t].min,i.config.yaxis[t].max=s[t].max)};i.config.yaxis.map((function(t,a){i.globals.zoomed||void 0!==s[a]?r(a):void 0!==e.ctx.opts.yaxis[a]&&(t.min=e.ctx.opts.yaxis[a].min,t.max=e.ctx.opts.yaxis[a].max)}))}}]),i}();Mt="undefined"!=typeof window?window:void 0,Tt=function(e,i){var a=(void 0!==this?this:e).SVG=function(t){if(a.supported)return t=new a.Doc(t),a.parser.draw||a.prepare(),t};if(a.ns="http://www.w3.org/2000/svg",a.xmlns="http://www.w3.org/2000/xmlns/",a.xlink="http://www.w3.org/1999/xlink",a.svgjs="http://svgjs.dev",a.supported=!0,!a.supported)return!1;a.did=1e3,a.eid=function(t){return"Svgjs"+d(t)+a.did++},a.create=function(t){var e=i.createElementNS(this.ns,t);return e.setAttribute("id",this.eid(t)),e},a.extend=function(){var t,e;e=(t=[].slice.call(arguments)).pop();for(var i=t.length-1;i>=0;i--)if(t[i])for(var s in e)t[i].prototype[s]=e[s];a.Set&&a.Set.inherit&&a.Set.inherit()},a.invent=function(t){var e="function"==typeof t.create?t.create:function(){this.constructor.call(this,a.create(t.create))};return t.inherit&&(e.prototype=new t.inherit),t.extend&&a.extend(e,t.extend),t.construct&&a.extend(t.parent||a.Container,t.construct),e},a.adopt=function(t){return t?t.instance?t.instance:((i="svg"==t.nodeName?t.parentNode instanceof e.SVGElement?new a.Nested:new a.Doc:"linearGradient"==t.nodeName?new a.Gradient("linear"):"radialGradient"==t.nodeName?new a.Gradient("radial"):a[d(t.nodeName)]?new(a[d(t.nodeName)]):new a.Element(t)).type=t.nodeName,i.node=t,t.instance=i,i instanceof a.Doc&&i.namespace().defs(),i.setData(JSON.parse(t.getAttribute("svgjs:data"))||{}),i):null;var i},a.prepare=function(){var t=i.getElementsByTagName("body")[0],e=(t?new a.Doc(t):a.adopt(i.documentElement).nested()).size(2,0);a.parser={body:t||i.documentElement,draw:e.style("opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden").node,poly:e.polyline().node,path:e.path().node,native:a.create("svg")}},a.parser={native:a.create("svg")},i.addEventListener("DOMContentLoaded",(function(){a.parser.draw||a.prepare()}),!1),a.regex={numberAndUnit:/^([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)([a-z%]*)$/i,hex:/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,rgb:/rgb\((\d+),(\d+),(\d+)\)/,reference:/#([a-z0-9\-_]+)/i,transforms:/\)\s*,?\s*/,whitespace:/\s/g,isHex:/^#[a-f0-9]{3,6}$/i,isRgb:/^rgb\(/,isCss:/[^:]+:[^;]+;?/,isBlank:/^(\s+)?$/,isNumber:/^[+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,isPercent:/^-?[\d\.]+%$/,isImage:/\.(jpg|jpeg|png|gif|svg)(\?[^=]+.*)?/i,delimiter:/[\s,]+/,hyphen:/([^e])\-/gi,pathLetters:/[MLHVCSQTAZ]/gi,isPathLetter:/[MLHVCSQTAZ]/i,numbersWithDots:/((\d?\.\d+(?:e[+-]?\d+)?)((?:\.\d+(?:e[+-]?\d+)?)+))+/gi,dots:/\./g},a.utils={map:function(t,e){for(var i=t.length,a=[],s=0;s1?1:t,new a.Color({r:~~(this.r+(this.destination.r-this.r)*t),g:~~(this.g+(this.destination.g-this.g)*t),b:~~(this.b+(this.destination.b-this.b)*t)})):this}}),a.Color.test=function(t){return t+="",a.regex.isHex.test(t)||a.regex.isRgb.test(t)},a.Color.isRgb=function(t){return t&&"number"==typeof t.r&&"number"==typeof t.g&&"number"==typeof t.b},a.Color.isColor=function(t){return a.Color.isRgb(t)||a.Color.test(t)},a.Array=function(t,e){0==(t=(t||[]).valueOf()).length&&e&&(t=e.valueOf()),this.value=this.parse(t)},a.extend(a.Array,{toString:function(){return this.value.join(" ")},valueOf:function(){return this.value},parse:function(t){return t=t.valueOf(),Array.isArray(t)?t:this.split(t)}}),a.PointArray=function(t,e){a.Array.call(this,t,e||[[0,0]])},a.PointArray.prototype=new a.Array,a.PointArray.prototype.constructor=a.PointArray;for(var s={M:function(t,e,i){return e.x=i.x=t[0],e.y=i.y=t[1],["M",e.x,e.y]},L:function(t,e){return e.x=t[0],e.y=t[1],["L",t[0],t[1]]},H:function(t,e){return e.x=t[0],["H",t[0]]},V:function(t,e){return e.y=t[0],["V",t[0]]},C:function(t,e){return e.x=t[4],e.y=t[5],["C",t[0],t[1],t[2],t[3],t[4],t[5]]},Q:function(t,e){return e.x=t[2],e.y=t[3],["Q",t[0],t[1],t[2],t[3]]},Z:function(t,e,i){return e.x=i.x,e.y=i.y,["Z"]}},r="mlhvqtcsaz".split(""),o=0,n=r.length;ol);return r},bbox:function(){return a.parser.draw||a.prepare(),a.parser.path.setAttribute("d",this.toString()),a.parser.path.getBBox()}}),a.Number=a.invent({create:function(t,e){this.value=0,this.unit=e||"","number"==typeof t?this.value=isNaN(t)?0:isFinite(t)?t:t<0?-34e37:34e37:"string"==typeof t?(e=t.match(a.regex.numberAndUnit))&&(this.value=parseFloat(e[1]),"%"==e[5]?this.value/=100:"s"==e[5]&&(this.value*=1e3),this.unit=e[5]):t instanceof a.Number&&(this.value=t.valueOf(),this.unit=t.unit)},extend:{toString:function(){return("%"==this.unit?~~(1e8*this.value)/1e6:"s"==this.unit?this.value/1e3:this.value)+this.unit},toJSON:function(){return this.toString()},valueOf:function(){return this.value},plus:function(t){return t=new a.Number(t),new a.Number(this+t,this.unit||t.unit)},minus:function(t){return t=new a.Number(t),new a.Number(this-t,this.unit||t.unit)},times:function(t){return t=new a.Number(t),new a.Number(this*t,this.unit||t.unit)},divide:function(t){return t=new a.Number(t),new a.Number(this/t,this.unit||t.unit)},to:function(t){var e=new a.Number(this);return"string"==typeof t&&(e.unit=t),e},morph:function(t){return this.destination=new a.Number(t),t.relative&&(this.destination.value+=this.value),this},at:function(t){return this.destination?new a.Number(this.destination).minus(this).times(t).plus(this):this}}}),a.Element=a.invent({create:function(t){this._stroke=a.defaults.attrs.stroke,this._event=null,this.dom={},(this.node=t)&&(this.type=t.nodeName,this.node.instance=this,this._stroke=t.getAttribute("stroke")||this._stroke)},extend:{x:function(t){return this.attr("x",t)},y:function(t){return this.attr("y",t)},cx:function(t){return null==t?this.x()+this.width()/2:this.x(t-this.width()/2)},cy:function(t){return null==t?this.y()+this.height()/2:this.y(t-this.height()/2)},move:function(t,e){return this.x(t).y(e)},center:function(t,e){return this.cx(t).cy(e)},width:function(t){return this.attr("width",t)},height:function(t){return this.attr("height",t)},size:function(t,e){var i=u(this,t,e);return this.width(new a.Number(i.width)).height(new a.Number(i.height))},clone:function(t){this.writeDataToDom();var e=x(this.node.cloneNode(!0));return t?t.add(e):this.after(e),e},remove:function(){return this.parent()&&this.parent().removeElement(this),this},replace:function(t){return this.after(t).remove(),t},addTo:function(t){return t.put(this)},putIn:function(t){return t.add(this)},id:function(t){return this.attr("id",t)},show:function(){return this.style("display","")},hide:function(){return this.style("display","none")},visible:function(){return"none"!=this.style("display")},toString:function(){return this.attr("id")},classes:function(){var t=this.attr("class");return null==t?[]:t.trim().split(a.regex.delimiter)},hasClass:function(t){return-1!=this.classes().indexOf(t)},addClass:function(t){if(!this.hasClass(t)){var e=this.classes();e.push(t),this.attr("class",e.join(" "))}return this},removeClass:function(t){return this.hasClass(t)&&this.attr("class",this.classes().filter((function(e){return e!=t})).join(" ")),this},toggleClass:function(t){return this.hasClass(t)?this.removeClass(t):this.addClass(t)},reference:function(t){return a.get(this.attr(t))},parent:function(t){var i=this;if(!i.node.parentNode)return null;if(i=a.adopt(i.node.parentNode),!t)return i;for(;i&&i.node instanceof e.SVGElement;){if("string"==typeof t?i.matches(t):i instanceof t)return i;if(!i.node.parentNode||"#document"==i.node.parentNode.nodeName)return null;i=a.adopt(i.node.parentNode)}},doc:function(){return this instanceof a.Doc?this:this.parent(a.Doc)},parents:function(t){var e=[],i=this;do{if(!(i=i.parent(t))||!i.node)break;e.push(i)}while(i.parent);return e},matches:function(t){return function(t,e){return(t.matches||t.matchesSelector||t.msMatchesSelector||t.mozMatchesSelector||t.webkitMatchesSelector||t.oMatchesSelector).call(t,e)}(this.node,t)},native:function(){return this.node},svg:function(t){var e=i.createElement("svg");if(!(t&&this instanceof a.Parent))return e.appendChild(t=i.createElement("svg")),this.writeDataToDom(),t.appendChild(this.node.cloneNode(!0)),e.innerHTML.replace(/^/,"").replace(/<\/svg>$/,"");e.innerHTML=""+t.replace(/\n/,"").replace(/<([\w:-]+)([^<]+?)\/>/g,"<$1$2>")+"";for(var s=0,r=e.firstChild.childNodes.length;s":function(t){return-Math.cos(t*Math.PI)/2+.5},">":function(t){return Math.sin(t*Math.PI/2)},"<":function(t){return 1-Math.cos(t*Math.PI/2)}},a.morph=function(t){return function(e,i){return new a.MorphObj(e,i).at(t)}},a.Situation=a.invent({create:function(t){this.init=!1,this.reversed=!1,this.reversing=!1,this.duration=new a.Number(t.duration).valueOf(),this.delay=new a.Number(t.delay).valueOf(),this.start=+new Date+this.delay,this.finish=this.start+this.duration,this.ease=t.ease,this.loop=0,this.loops=!1,this.animations={},this.attrs={},this.styles={},this.transforms=[],this.once={}}}),a.FX=a.invent({create:function(t){this._target=t,this.situations=[],this.active=!1,this.situation=null,this.paused=!1,this.lastPos=0,this.pos=0,this.absPos=0,this._speed=1},extend:{animate:function(e,i,s){"object"===t(e)&&(i=e.ease,s=e.delay,e=e.duration);var r=new a.Situation({duration:e||1e3,delay:s||0,ease:a.easing[i||"-"]||i});return this.queue(r),this},target:function(t){return t&&t instanceof a.Element?(this._target=t,this):this._target},timeToAbsPos:function(t){return(t-this.situation.start)/(this.situation.duration/this._speed)},absPosToTime:function(t){return this.situation.duration/this._speed*t+this.situation.start},startAnimFrame:function(){this.stopAnimFrame(),this.animationFrame=e.requestAnimationFrame(function(){this.step()}.bind(this))},stopAnimFrame:function(){e.cancelAnimationFrame(this.animationFrame)},start:function(){return!this.active&&this.situation&&(this.active=!0,this.startCurrent()),this},startCurrent:function(){return this.situation.start=+new Date+this.situation.delay/this._speed,this.situation.finish=this.situation.start+this.situation.duration/this._speed,this.initAnimations().step()},queue:function(t){return("function"==typeof t||t instanceof a.Situation)&&this.situations.push(t),this.situation||(this.situation=this.situations.shift()),this},dequeue:function(){return this.stop(),this.situation=this.situations.shift(),this.situation&&(this.situation instanceof a.Situation?this.start():this.situation.call(this)),this},initAnimations:function(){var t,e=this.situation;if(e.init)return this;for(var i in e.animations){t=this.target()[i](),Array.isArray(t)||(t=[t]),Array.isArray(e.animations[i])||(e.animations[i]=[e.animations[i]]);for(var s=t.length;s--;)e.animations[i][s]instanceof a.Number&&(t[s]=new a.Number(t[s])),e.animations[i][s]=t[s].morph(e.animations[i][s])}for(var i in e.attrs)e.attrs[i]=new a.MorphObj(this.target().attr(i),e.attrs[i]);for(var i in e.styles)e.styles[i]=new a.MorphObj(this.target().style(i),e.styles[i]);return e.initialTransformation=this.target().matrixify(),e.init=!0,this},clearQueue:function(){return this.situations=[],this},clearCurrent:function(){return this.situation=null,this},stop:function(t,e){var i=this.active;return this.active=!1,e&&this.clearQueue(),t&&this.situation&&(!i&&this.startCurrent(),this.atEnd()),this.stopAnimFrame(),this.clearCurrent()},after:function(t){var e=this.last();return this.target().on("finished.fx",(function i(a){a.detail.situation==e&&(t.call(this,e),this.off("finished.fx",i))})),this._callStart()},during:function(t){var e=this.last(),i=function(i){i.detail.situation==e&&t.call(this,i.detail.pos,a.morph(i.detail.pos),i.detail.eased,e)};return this.target().off("during.fx",i).on("during.fx",i),this.after((function(){this.off("during.fx",i)})),this._callStart()},afterAll:function(t){var e=function e(i){t.call(this),this.off("allfinished.fx",e)};return this.target().off("allfinished.fx",e).on("allfinished.fx",e),this._callStart()},last:function(){return this.situations.length?this.situations[this.situations.length-1]:this.situation},add:function(t,e,i){return this.last()[i||"animations"][t]=e,this._callStart()},step:function(t){var e,i,a;t||(this.absPos=this.timeToAbsPos(+new Date)),!1!==this.situation.loops?(e=Math.max(this.absPos,0),i=Math.floor(e),!0===this.situation.loops||ithis.lastPos&&r<=s&&(this.situation.once[r].call(this.target(),this.pos,s),delete this.situation.once[r]);return this.active&&this.target().fire("during",{pos:this.pos,eased:s,fx:this,situation:this.situation}),this.situation?(this.eachAt(),1==this.pos&&!this.situation.reversed||this.situation.reversed&&0==this.pos?(this.stopAnimFrame(),this.target().fire("finished",{fx:this,situation:this.situation}),this.situations.length||(this.target().fire("allfinished"),this.situations.length||(this.target().off(".fx"),this.active=!1)),this.active?this.dequeue():this.clearCurrent()):!this.paused&&this.active&&this.startAnimFrame(),this.lastPos=s,this):this},eachAt:function(){var t,e=this,i=this.target(),s=this.situation;for(var r in s.animations)t=[].concat(s.animations[r]).map((function(t){return"string"!=typeof t&&t.at?t.at(s.ease(e.pos),e.pos):t})),i[r].apply(i,t);for(var r in s.attrs)t=[r].concat(s.attrs[r]).map((function(t){return"string"!=typeof t&&t.at?t.at(s.ease(e.pos),e.pos):t})),i.attr.apply(i,t);for(var r in s.styles)t=[r].concat(s.styles[r]).map((function(t){return"string"!=typeof t&&t.at?t.at(s.ease(e.pos),e.pos):t})),i.style.apply(i,t);if(s.transforms.length){t=s.initialTransformation,r=0;for(var o=s.transforms.length;r=0;--s)this[m[s]]=null!=e[m[s]]?e[m[s]]:i[m[s]]},extend:{extract:function(){var t=p(this,0,1);p(this,1,0);var e=180/Math.PI*Math.atan2(t.y,t.x)-90;return{x:this.e,y:this.f,transformedX:(this.e*Math.cos(e*Math.PI/180)+this.f*Math.sin(e*Math.PI/180))/Math.sqrt(this.a*this.a+this.b*this.b),transformedY:(this.f*Math.cos(e*Math.PI/180)+this.e*Math.sin(-e*Math.PI/180))/Math.sqrt(this.c*this.c+this.d*this.d),rotation:e,a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f,matrix:new a.Matrix(this)}},clone:function(){return new a.Matrix(this)},morph:function(t){return this.destination=new a.Matrix(t),this},multiply:function(t){return new a.Matrix(this.native().multiply(function(t){return t instanceof a.Matrix||(t=new a.Matrix(t)),t}(t).native()))},inverse:function(){return new a.Matrix(this.native().inverse())},translate:function(t,e){return new a.Matrix(this.native().translate(t||0,e||0))},native:function(){for(var t=a.parser.native.createSVGMatrix(),e=m.length-1;e>=0;e--)t[m[e]]=this[m[e]];return t},toString:function(){return"matrix("+v(this.a)+","+v(this.b)+","+v(this.c)+","+v(this.d)+","+v(this.e)+","+v(this.f)+")"}},parent:a.Element,construct:{ctm:function(){return new a.Matrix(this.node.getCTM())},screenCTM:function(){if(this instanceof a.Nested){var t=this.rect(1,1),e=t.node.getScreenCTM();return t.remove(),new a.Matrix(e)}return new a.Matrix(this.node.getScreenCTM())}}}),a.Point=a.invent({create:function(e,i){var a;a=Array.isArray(e)?{x:e[0],y:e[1]}:"object"===t(e)?{x:e.x,y:e.y}:null!=e?{x:e,y:null!=i?i:e}:{x:0,y:0},this.x=a.x,this.y=a.y},extend:{clone:function(){return new a.Point(this)},morph:function(t,e){return this.destination=new a.Point(t,e),this}}}),a.extend(a.Element,{point:function(t,e){return new a.Point(t,e).transform(this.screenCTM().inverse())}}),a.extend(a.Element,{attr:function(e,i,s){if(null==e){for(e={},s=(i=this.node.attributes).length-1;s>=0;s--)e[i[s].nodeName]=a.regex.isNumber.test(i[s].nodeValue)?parseFloat(i[s].nodeValue):i[s].nodeValue;return e}if("object"===t(e))for(var r in e)this.attr(r,e[r]);else if(null===i)this.node.removeAttribute(e);else{if(null==i)return null==(i=this.node.getAttribute(e))?a.defaults.attrs[e]:a.regex.isNumber.test(i)?parseFloat(i):i;"stroke-width"==e?this.attr("stroke",parseFloat(i)>0?this._stroke:null):"stroke"==e&&(this._stroke=i),"fill"!=e&&"stroke"!=e||(a.regex.isImage.test(i)&&(i=this.doc().defs().image(i,0,0)),i instanceof a.Image&&(i=this.doc().defs().pattern(0,0,(function(){this.add(i)})))),"number"==typeof i?i=new a.Number(i):a.Color.isColor(i)?i=new a.Color(i):Array.isArray(i)&&(i=new a.Array(i)),"leading"==e?this.leading&&this.leading(i):"string"==typeof s?this.node.setAttributeNS(s,e,i.toString()):this.node.setAttribute(e,i.toString()),!this.rebuild||"font-size"!=e&&"x"!=e||this.rebuild(e,i)}return this}}),a.extend(a.Element,{transform:function(e,i){var s;return"object"!==t(e)?(s=new a.Matrix(this).extract(),"string"==typeof e?s[e]:s):(s=new a.Matrix(this),i=!!i||!!e.relative,null!=e.a&&(s=i?s.multiply(new a.Matrix(e)):new a.Matrix(e)),this.attr("transform",s))}}),a.extend(a.Element,{untransform:function(){return this.attr("transform",null)},matrixify:function(){return(this.attr("transform")||"").split(a.regex.transforms).slice(0,-1).map((function(t){var e=t.trim().split("(");return[e[0],e[1].split(a.regex.delimiter).map((function(t){return parseFloat(t)}))]})).reduce((function(t,e){return"matrix"==e[0]?t.multiply(f(e[1])):t[e[0]].apply(t,e[1])}),new a.Matrix)},toParent:function(t){if(this==t)return this;var e=this.screenCTM(),i=t.screenCTM().inverse();return this.addTo(t).untransform().transform(i.multiply(e)),this},toDoc:function(){return this.toParent(this.doc())}}),a.Transformation=a.invent({create:function(e,i){if(arguments.length>1&&"boolean"!=typeof i)return this.constructor.call(this,[].slice.call(arguments));if(Array.isArray(e))for(var a=0,s=this.arguments.length;a=0},index:function(t){return[].slice.call(this.node.childNodes).indexOf(t.node)},get:function(t){return a.adopt(this.node.childNodes[t])},first:function(){return this.get(0)},last:function(){return this.get(this.node.childNodes.length-1)},each:function(t,e){for(var i=this.children(),s=0,r=i.length;s=0;i--)t.childNodes[i]instanceof e.SVGElement&&x(t.childNodes[i]);return a.adopt(t).id(a.eid(t.nodeName))}function b(t){return null==t.x&&(t.x=0,t.y=0,t.width=0,t.height=0),t.w=t.width,t.h=t.height,t.x2=t.x+t.width,t.y2=t.y+t.height,t.cx=t.x+t.width/2,t.cy=t.y+t.height/2,t}function v(t){return Math.abs(t)>1e-37?t:0}["fill","stroke"].forEach((function(t){var e={};e[t]=function(e){if(void 0===e)return this;if("string"==typeof e||a.Color.isRgb(e)||e&&"function"==typeof e.fill)this.attr(t,e);else for(var i=l[t].length-1;i>=0;i--)null!=e[l[t][i]]&&this.attr(l.prefix(t,l[t][i]),e[l[t][i]]);return this},a.extend(a.Element,a.FX,e)})),a.extend(a.Element,a.FX,{translate:function(t,e){return this.transform({x:t,y:e})},matrix:function(t){return this.attr("transform",new a.Matrix(6==arguments.length?[].slice.call(arguments):t))},opacity:function(t){return this.attr("opacity",t)},dx:function(t){return this.x(new a.Number(t).plus(this instanceof a.FX?0:this.x()),!0)},dy:function(t){return this.y(new a.Number(t).plus(this instanceof a.FX?0:this.y()),!0)}}),a.extend(a.Path,{length:function(){return this.node.getTotalLength()},pointAt:function(t){return this.node.getPointAtLength(t)}}),a.Set=a.invent({create:function(t){Array.isArray(t)?this.members=t:this.clear()},extend:{add:function(){for(var t=[].slice.call(arguments),e=0,i=t.length;e-1&&this.members.splice(e,1),this},each:function(t){for(var e=0,i=this.members.length;e=0},index:function(t){return this.members.indexOf(t)},get:function(t){return this.members[t]},first:function(){return this.get(0)},last:function(){return this.get(this.members.length-1)},valueOf:function(){return this.members}},construct:{set:function(t){return new a.Set(t)}}}),a.FX.Set=a.invent({create:function(t){this.set=t}}),a.Set.inherit=function(){var t=[];for(var e in a.Shape.prototype)"function"==typeof a.Shape.prototype[e]&&"function"!=typeof a.Set.prototype[e]&&t.push(e);for(var e in t.forEach((function(t){a.Set.prototype[t]=function(){for(var e=0,i=this.members.length;e=0;t--)delete this.memory()[arguments[t]];return this},memory:function(){return this._memory||(this._memory={})}}),a.get=function(t){var e=i.getElementById(function(t){var e=(t||"").toString().match(a.regex.reference);if(e)return e[1]}(t)||t);return a.adopt(e)},a.select=function(t,e){return new a.Set(a.utils.map((e||i).querySelectorAll(t),(function(t){return a.adopt(t)})))},a.extend(a.Parent,{select:function(t){return a.select(t,this.node)}});var m="abcdef".split("");if("function"!=typeof e.CustomEvent){var y=function(t,e){e=e||{bubbles:!1,cancelable:!1,detail:void 0};var a=i.createEvent("CustomEvent");return a.initCustomEvent(t,e.bubbles,e.cancelable,e.detail),a};y.prototype=e.Event.prototype,a.CustomEvent=y}else a.CustomEvent=e.CustomEvent;return a},"function"==typeof define&&define.amd?define((function(){return Tt(Mt,Mt.document)})):"object"===("undefined"==typeof exports?"undefined":t(exports))&&"undefined"!=typeof module?module.exports=Mt.document?Tt(Mt,Mt.document):function(t){return Tt(t,t.document)}:Mt.SVG=Tt(Mt,Mt.document), +/*! svg.filter.js - v2.0.2 - 2016-02-24 + * https://github.com/wout/svg.filter.js + * Copyright (c) 2016 Wout Fierens; Licensed MIT */ +function(){SVG.Filter=SVG.invent({create:"filter",inherit:SVG.Parent,extend:{source:"SourceGraphic",sourceAlpha:"SourceAlpha",background:"BackgroundImage",backgroundAlpha:"BackgroundAlpha",fill:"FillPaint",stroke:"StrokePaint",autoSetIn:!0,put:function(t,e){return this.add(t,e),!t.attr("in")&&this.autoSetIn&&t.attr("in",this.source),t.attr("result")||t.attr("result",t),t},blend:function(t,e,i){return this.put(new SVG.BlendEffect(t,e,i))},colorMatrix:function(t,e){return this.put(new SVG.ColorMatrixEffect(t,e))},convolveMatrix:function(t){return this.put(new SVG.ConvolveMatrixEffect(t))},componentTransfer:function(t){return this.put(new SVG.ComponentTransferEffect(t))},composite:function(t,e,i){return this.put(new SVG.CompositeEffect(t,e,i))},flood:function(t,e){return this.put(new SVG.FloodEffect(t,e))},offset:function(t,e){return this.put(new SVG.OffsetEffect(t,e))},image:function(t){return this.put(new SVG.ImageEffect(t))},merge:function(){var t=[void 0];for(var e in arguments)t.push(arguments[e]);return this.put(new(SVG.MergeEffect.bind.apply(SVG.MergeEffect,t)))},gaussianBlur:function(t,e){return this.put(new SVG.GaussianBlurEffect(t,e))},morphology:function(t,e){return this.put(new SVG.MorphologyEffect(t,e))},diffuseLighting:function(t,e,i){return this.put(new SVG.DiffuseLightingEffect(t,e,i))},displacementMap:function(t,e,i,a,s){return this.put(new SVG.DisplacementMapEffect(t,e,i,a,s))},specularLighting:function(t,e,i,a){return this.put(new SVG.SpecularLightingEffect(t,e,i,a))},tile:function(){return this.put(new SVG.TileEffect)},turbulence:function(t,e,i,a,s){return this.put(new SVG.TurbulenceEffect(t,e,i,a,s))},toString:function(){return"url(#"+this.attr("id")+")"}}}),SVG.extend(SVG.Defs,{filter:function(t){var e=this.put(new SVG.Filter);return"function"==typeof t&&t.call(e,e),e}}),SVG.extend(SVG.Container,{filter:function(t){return this.defs().filter(t)}}),SVG.extend(SVG.Element,SVG.G,SVG.Nested,{filter:function(t){return this.filterer=t instanceof SVG.Element?t:this.doc().filter(t),this.doc()&&this.filterer.doc()!==this.doc()&&this.doc().defs().add(this.filterer),this.attr("filter",this.filterer),this.filterer},unfilter:function(t){return this.filterer&&!0===t&&this.filterer.remove(),delete this.filterer,this.attr("filter",null)}}),SVG.Effect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Element,extend:{in:function(t){return null==t?this.parent()&&this.parent().select('[result="'+this.attr("in")+'"]').get(0)||this.attr("in"):this.attr("in",t)},result:function(t){return null==t?this.attr("result"):this.attr("result",t)},toString:function(){return this.result()}}}),SVG.ParentEffect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Parent,extend:{in:function(t){return null==t?this.parent()&&this.parent().select('[result="'+this.attr("in")+'"]').get(0)||this.attr("in"):this.attr("in",t)},result:function(t){return null==t?this.attr("result"):this.attr("result",t)},toString:function(){return this.result()}}});var t={blend:function(t,e){return this.parent()&&this.parent().blend(this,t,e)},colorMatrix:function(t,e){return this.parent()&&this.parent().colorMatrix(t,e).in(this)},convolveMatrix:function(t){return this.parent()&&this.parent().convolveMatrix(t).in(this)},componentTransfer:function(t){return this.parent()&&this.parent().componentTransfer(t).in(this)},composite:function(t,e){return this.parent()&&this.parent().composite(this,t,e)},flood:function(t,e){return this.parent()&&this.parent().flood(t,e)},offset:function(t,e){return this.parent()&&this.parent().offset(t,e).in(this)},image:function(t){return this.parent()&&this.parent().image(t)},merge:function(){return this.parent()&&this.parent().merge.apply(this.parent(),[this].concat(arguments))},gaussianBlur:function(t,e){return this.parent()&&this.parent().gaussianBlur(t,e).in(this)},morphology:function(t,e){return this.parent()&&this.parent().morphology(t,e).in(this)},diffuseLighting:function(t,e,i){return this.parent()&&this.parent().diffuseLighting(t,e,i).in(this)},displacementMap:function(t,e,i,a){return this.parent()&&this.parent().displacementMap(this,t,e,i,a)},specularLighting:function(t,e,i,a){return this.parent()&&this.parent().specularLighting(t,e,i,a).in(this)},tile:function(){return this.parent()&&this.parent().tile().in(this)},turbulence:function(t,e,i,a,s){return this.parent()&&this.parent().turbulence(t,e,i,a,s).in(this)}};SVG.extend(SVG.Effect,t),SVG.extend(SVG.ParentEffect,t),SVG.ChildEffect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Element,extend:{in:function(t){this.attr("in",t)}}});var e={blend:function(t,e,i){this.attr({in:t,in2:e,mode:i||"normal"})},colorMatrix:function(t,e){"matrix"==t&&(e=s(e)),this.attr({type:t,values:void 0===e?null:e})},convolveMatrix:function(t){t=s(t),this.attr({order:Math.sqrt(t.split(" ").length),kernelMatrix:t})},composite:function(t,e,i){this.attr({in:t,in2:e,operator:i})},flood:function(t,e){this.attr("flood-color",t),null!=e&&this.attr("flood-opacity",e)},offset:function(t,e){this.attr({dx:t,dy:e})},image:function(t){this.attr("href",t,SVG.xlink)},displacementMap:function(t,e,i,a,s){this.attr({in:t,in2:e,scale:i,xChannelSelector:a,yChannelSelector:s})},gaussianBlur:function(t,e){null!=t||null!=e?this.attr("stdDeviation",r(Array.prototype.slice.call(arguments))):this.attr("stdDeviation","0 0")},morphology:function(t,e){this.attr({operator:t,radius:e})},tile:function(){},turbulence:function(t,e,i,a,s){this.attr({numOctaves:e,seed:i,stitchTiles:a,baseFrequency:t,type:s})}},i={merge:function(){var t;if(arguments[0]instanceof SVG.Set){var e=this;arguments[0].each((function(t){this instanceof SVG.MergeNode?e.put(this):(this instanceof SVG.Effect||this instanceof SVG.ParentEffect)&&e.put(new SVG.MergeNode(this))}))}else{t=Array.isArray(arguments[0])?arguments[0]:arguments;for(var i=0;i1&&(M*=a=Math.sqrt(a),T*=a);s=(new SVG.Matrix).rotate(I).scale(1/M,1/T).rotate(-I),F=F.transform(s),R=R.transform(s),r=[R.x-F.x,R.y-F.y],n=r[0]*r[0]+r[1]*r[1],o=Math.sqrt(n),r[0]/=o,r[1]/=o,l=n<4?Math.sqrt(1-n/4):0,z===X&&(l*=-1);h=new SVG.Point((R.x+F.x)/2+l*-r[1],(R.y+F.y)/2+l*r[0]),c=new SVG.Point(F.x-h.x,F.y-h.y),d=new SVG.Point(R.x-h.x,R.y-h.y),g=Math.acos(c.x/Math.sqrt(c.x*c.x+c.y*c.y)),c.y<0&&(g*=-1);u=Math.acos(d.x/Math.sqrt(d.x*d.x+d.y*d.y)),d.y<0&&(u*=-1);X&&g>u&&(u+=2*Math.PI);!X&&gr.maxX-e.width&&(o=(a=r.maxX-e.width)-this.startPoints.box.x),null!=r.minY&&sr.maxY-e.height&&(n=(s=r.maxY-e.height)-this.startPoints.box.y),null!=r.snapToGrid&&(a-=a%r.snapToGrid,s-=s%r.snapToGrid,o-=o%r.snapToGrid,n-=n%r.snapToGrid),this.el instanceof SVG.G?this.el.matrix(this.startPoints.transform).transform({x:o,y:n},!0):this.el.move(a,s));return i},t.prototype.end=function(t){var e=this.drag(t);this.el.fire("dragend",{event:t,p:e,m:this.m,handler:this}),SVG.off(window,"mousemove.drag"),SVG.off(window,"touchmove.drag"),SVG.off(window,"mouseup.drag"),SVG.off(window,"touchend.drag")},SVG.extend(SVG.Element,{draggable:function(e,i){"function"!=typeof e&&"object"!=typeof e||(i=e,e=!0);var a=this.remember("_draggable")||new t(this);return(e=void 0===e||e)?a.init(i||{},e):(this.off("mousedown.drag"),this.off("touchstart.drag")),this}})}.call(void 0),function(){function t(t){this.el=t,t.remember("_selectHandler",this),this.pointSelection={isSelected:!1},this.rectSelection={isSelected:!1},this.pointsList={lt:[0,0],rt:["width",0],rb:["width","height"],lb:[0,"height"],t:["width",0],r:["width","height"],b:["width","height"],l:[0,"height"]},this.pointCoord=function(t,e,i){var a="string"!=typeof t?t:e[t];return i?a/2:a},this.pointCoords=function(t,e){var i=this.pointsList[t];return{x:this.pointCoord(i[0],e,"t"===t||"b"===t),y:this.pointCoord(i[1],e,"r"===t||"l"===t)}}}t.prototype.init=function(t,e){var i=this.el.bbox();this.options={};var a=this.el.selectize.defaults.points;for(var s in this.el.selectize.defaults)this.options[s]=this.el.selectize.defaults[s],void 0!==e[s]&&(this.options[s]=e[s]);var r=["points","pointsExclude"];for(var s in r){var o=this.options[r[s]];"string"==typeof o?o=o.length>0?o.split(/\s*,\s*/i):[]:"boolean"==typeof o&&"points"===r[s]&&(o=o?a:[]),this.options[r[s]]=o}this.options.points=[a,this.options.points].reduce((function(t,e){return t.filter((function(t){return e.indexOf(t)>-1}))})),this.options.points=[this.options.points,this.options.pointsExclude].reduce((function(t,e){return t.filter((function(t){return e.indexOf(t)<0}))})),this.parent=this.el.parent(),this.nested=this.nested||this.parent.group(),this.nested.matrix(new SVG.Matrix(this.el).translate(i.x,i.y)),this.options.deepSelect&&-1!==["line","polyline","polygon"].indexOf(this.el.type)?this.selectPoints(t):this.selectRect(t),this.observe(),this.cleanup()},t.prototype.selectPoints=function(t){return this.pointSelection.isSelected=t,this.pointSelection.set||(this.pointSelection.set=this.parent.set(),this.drawPoints()),this},t.prototype.getPointArray=function(){var t=this.el.bbox();return this.el.array().valueOf().map((function(e){return[e[0]-t.x,e[1]-t.y]}))},t.prototype.drawPoints=function(){for(var t=this,e=this.getPointArray(),i=0,a=e.length;i0&&this.parameters.box.height-i[1]>0){if("text"===this.parameters.type)return this.el.move(this.parameters.box.x+i[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize-i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x+i[0],this.parameters.box.y+i[1]).size(this.parameters.box.width-i[0],this.parameters.box.height-i[1])}};break;case"rt":this.calc=function(t,e){var i=this.snapToGrid(t,e,2);if(this.parameters.box.width+i[0]>0&&this.parameters.box.height-i[1]>0){if("text"===this.parameters.type)return this.el.move(this.parameters.box.x-i[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize+i[0]);i=this.checkAspectRatio(i,!0),this.el.move(this.parameters.box.x,this.parameters.box.y+i[1]).size(this.parameters.box.width+i[0],this.parameters.box.height-i[1])}};break;case"rb":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.width+i[0]>0&&this.parameters.box.height+i[1]>0){if("text"===this.parameters.type)return this.el.move(this.parameters.box.x-i[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize+i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x,this.parameters.box.y).size(this.parameters.box.width+i[0],this.parameters.box.height+i[1])}};break;case"lb":this.calc=function(t,e){var i=this.snapToGrid(t,e,1);if(this.parameters.box.width-i[0]>0&&this.parameters.box.height+i[1]>0){if("text"===this.parameters.type)return this.el.move(this.parameters.box.x+i[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize-i[0]);i=this.checkAspectRatio(i,!0),this.el.move(this.parameters.box.x+i[0],this.parameters.box.y).size(this.parameters.box.width-i[0],this.parameters.box.height+i[1])}};break;case"t":this.calc=function(t,e){var i=this.snapToGrid(t,e,2);if(this.parameters.box.height-i[1]>0){if("text"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y+i[1]).height(this.parameters.box.height-i[1])}};break;case"r":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.width+i[0]>0){if("text"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y).width(this.parameters.box.width+i[0])}};break;case"b":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.height+i[1]>0){if("text"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y).height(this.parameters.box.height+i[1])}};break;case"l":this.calc=function(t,e){var i=this.snapToGrid(t,e,1);if(this.parameters.box.width-i[0]>0){if("text"===this.parameters.type)return;this.el.move(this.parameters.box.x+i[0],this.parameters.box.y).width(this.parameters.box.width-i[0])}};break;case"rot":this.calc=function(t,e){var i=t+this.parameters.p.x,a=e+this.parameters.p.y,s=Math.atan2(this.parameters.p.y-this.parameters.box.y-this.parameters.box.height/2,this.parameters.p.x-this.parameters.box.x-this.parameters.box.width/2),r=Math.atan2(a-this.parameters.box.y-this.parameters.box.height/2,i-this.parameters.box.x-this.parameters.box.width/2),o=this.parameters.rotation+180*(r-s)/Math.PI+this.options.snapToAngle/2;this.el.center(this.parameters.box.cx,this.parameters.box.cy).rotate(o-o%this.options.snapToAngle,this.parameters.box.cx,this.parameters.box.cy)};break;case"point":this.calc=function(t,e){var i=this.snapToGrid(t,e,this.parameters.pointCoords[0],this.parameters.pointCoords[1]),a=this.el.array().valueOf();a[this.parameters.i][0]=this.parameters.pointCoords[0]+i[0],a[this.parameters.i][1]=this.parameters.pointCoords[1]+i[1],this.el.plot(a)}}this.el.fire("resizestart",{dx:this.parameters.x,dy:this.parameters.y,event:t}),SVG.on(window,"touchmove.resize",(function(t){e.update(t||window.event)})),SVG.on(window,"touchend.resize",(function(){e.done()})),SVG.on(window,"mousemove.resize",(function(t){e.update(t||window.event)})),SVG.on(window,"mouseup.resize",(function(){e.done()}))},t.prototype.update=function(t){if(t){var e=this._extractPosition(t),i=this.transformPoint(e.x,e.y),a=i.x-this.parameters.p.x,s=i.y-this.parameters.p.y;this.lastUpdateCall=[a,s],this.calc(a,s),this.el.fire("resizing",{dx:a,dy:s,event:t})}else this.lastUpdateCall&&this.calc(this.lastUpdateCall[0],this.lastUpdateCall[1])},t.prototype.done=function(){this.lastUpdateCall=null,SVG.off(window,"mousemove.resize"),SVG.off(window,"mouseup.resize"),SVG.off(window,"touchmove.resize"),SVG.off(window,"touchend.resize"),this.el.fire("resizedone")},t.prototype.snapToGrid=function(t,e,i,a){var s;return void 0!==a?s=[(i+t)%this.options.snapToGrid,(a+e)%this.options.snapToGrid]:(i=null==i?3:i,s=[(this.parameters.box.x+t+(1&i?0:this.parameters.box.width))%this.options.snapToGrid,(this.parameters.box.y+e+(2&i?0:this.parameters.box.height))%this.options.snapToGrid]),t<0&&(s[0]-=this.options.snapToGrid),e<0&&(s[1]-=this.options.snapToGrid),t-=Math.abs(s[0])o.maxX&&(t=o.maxX-s),void 0!==o.minY&&r+eo.maxY&&(e=o.maxY-r),[t,e]},t.prototype.checkAspectRatio=function(t,e){if(!this.options.saveAspectRatio)return t;var i=t.slice(),a=this.parameters.box.width/this.parameters.box.height,s=this.parameters.box.width+t[0],r=this.parameters.box.height-t[1],o=s/r;return oa&&(i[0]=this.parameters.box.width-r*a,e&&(i[0]=-i[0])),i},SVG.extend(SVG.Element,{resize:function(e){return(this.remember("_resizeHandler")||new t(this)).init(e||{}),this}}),SVG.Element.prototype.resize.defaults={snapToAngle:.1,snapToGrid:1,constraint:{},saveAspectRatio:!1}}).call(this)}(),void 0===window.Apex&&(window.Apex={});var Ft=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return a(t,[{key:"initModules",value:function(){this.ctx.publicMethods=["updateOptions","updateSeries","appendData","appendSeries","toggleSeries","showSeries","hideSeries","setLocale","resetSeries","zoomX","toggleDataPointSelection","dataURI","addXaxisAnnotation","addYaxisAnnotation","addPointAnnotation","clearAnnotations","removeAnnotation","paper","destroy"],this.ctx.eventList=["click","mousedown","mousemove","mouseleave","touchstart","touchmove","touchleave","mouseup","touchend"],this.ctx.animations=new f(this.ctx),this.ctx.axes=new J(this.ctx),this.ctx.core=new Et(this.ctx.el,this.ctx),this.ctx.config=new H({}),this.ctx.data=new O(this.ctx),this.ctx.grid=new _(this.ctx),this.ctx.graphics=new b(this.ctx),this.ctx.coreUtils=new y(this.ctx),this.ctx.crosshairs=new Q(this.ctx),this.ctx.events=new Z(this.ctx),this.ctx.exports=new V(this.ctx),this.ctx.localization=new $(this.ctx),this.ctx.options=new S,this.ctx.responsive=new K(this.ctx),this.ctx.series=new z(this.ctx),this.ctx.theme=new tt(this.ctx),this.ctx.formatters=new W(this.ctx),this.ctx.titleSubtitle=new et(this.ctx),this.ctx.legend=new lt(this.ctx),this.ctx.toolbar=new ht(this.ctx),this.ctx.dimensions=new ot(this.ctx),this.ctx.updateHelpers=new Yt(this.ctx),this.ctx.zoomPanSelection=new ct(this.ctx),this.ctx.w.globals.tooltip=new bt(this.ctx)}}]),t}(),Rt=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return a(t,[{key:"clear",value:function(t){var e=t.isUpdating;this.ctx.zoomPanSelection&&this.ctx.zoomPanSelection.destroy(),this.ctx.toolbar&&this.ctx.toolbar.destroy(),this.ctx.animations=null,this.ctx.axes=null,this.ctx.annotations=null,this.ctx.core=null,this.ctx.data=null,this.ctx.grid=null,this.ctx.series=null,this.ctx.responsive=null,this.ctx.theme=null,this.ctx.formatters=null,this.ctx.titleSubtitle=null,this.ctx.legend=null,this.ctx.dimensions=null,this.ctx.options=null,this.ctx.crosshairs=null,this.ctx.zoomPanSelection=null,this.ctx.updateHelpers=null,this.ctx.toolbar=null,this.ctx.localization=null,this.ctx.w.globals.tooltip=null,this.clearDomElements({isUpdating:e})}},{key:"killSVG",value:function(t){t.each((function(t,e){this.removeClass("*"),this.off(),this.stop()}),!0),t.ungroup(),t.clear()}},{key:"clearDomElements",value:function(t){var e=this,i=t.isUpdating,a=this.w.globals.dom.Paper.node;a.parentNode&&a.parentNode.parentNode&&!i&&(a.parentNode.parentNode.style.minHeight="unset");var s=this.w.globals.dom.baseEl;s&&this.ctx.eventList.forEach((function(t){s.removeEventListener(t,e.ctx.events.documentEvent)}));var r=this.w.globals.dom;if(null!==this.ctx.el)for(;this.ctx.el.firstChild;)this.ctx.el.removeChild(this.ctx.el.firstChild);this.killSVG(r.Paper),r.Paper.remove(),r.elWrap=null,r.elGraphical=null,r.elAnnotations=null,r.elLegendWrap=null,r.baseEl=null,r.elGridRect=null,r.elGridRectMask=null,r.elGridRectMarkerMask=null,r.elForecastMask=null,r.elNonForecastMask=null,r.elDefs=null}}]),t}(),Ht=new WeakMap;return function(){function t(i,a){e(this,t),this.opts=a,this.ctx=this,this.w=new N(a).init(),this.el=i,this.w.globals.cuid=p.randomId(),this.w.globals.chartID=this.w.config.chart.id?p.escapeString(this.w.config.chart.id):this.w.globals.cuid,new Ft(this).initModules(),this.create=p.bind(this.create,this),this.windowResizeHandler=this._windowResizeHandler.bind(this),this.parentResizeHandler=this._parentResizeCallback.bind(this)}return a(t,[{key:"render",value:function(){var t=this;return new Promise((function(e,i){if(null!==t.el){void 0===Apex._chartInstances&&(Apex._chartInstances=[]),t.w.config.chart.id&&Apex._chartInstances.push({id:t.w.globals.chartID,group:t.w.config.chart.group,chart:t}),t.setLocale(t.w.config.chart.defaultLocale);var a=t.w.config.chart.events.beforeMount;if("function"==typeof a&&a(t,t.w),t.events.fireEvent("beforeMount",[t,t.w]),window.addEventListener("resize",t.windowResizeHandler),h=t.el.parentNode,c=t.parentResizeHandler,d=!1,g=new ResizeObserver((function(t){d&&c.call(h,t),d=!0})),h.nodeType===Node.DOCUMENT_FRAGMENT_NODE?Array.from(h.children).forEach((function(t){return g.observe(t)})):g.observe(h),Ht.set(c,g),!t.css){var s=t.el.getRootNode&&t.el.getRootNode(),r=p.is("ShadowRoot",s),o=t.el.ownerDocument,n=o.getElementById("apexcharts-css");!r&&n||(t.css=document.createElement("style"),t.css.id="apexcharts-css",t.css.textContent='.apexcharts-canvas {\n position: relative;\n user-select: none;\n /* cannot give overflow: hidden as it will crop tooltips which overflow outside chart area */\n}\n\n\n/* scrollbar is not visible by default for legend, hence forcing the visibility */\n.apexcharts-canvas ::-webkit-scrollbar {\n -webkit-appearance: none;\n width: 6px;\n}\n\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\n border-radius: 4px;\n background-color: rgba(0, 0, 0, .5);\n box-shadow: 0 0 1px rgba(255, 255, 255, .5);\n -webkit-box-shadow: 0 0 1px rgba(255, 255, 255, .5);\n}\n\n\n.apexcharts-inner {\n position: relative;\n}\n\n.apexcharts-text tspan {\n font-family: inherit;\n}\n\n.legend-mouseover-inactive {\n transition: 0.15s ease all;\n opacity: 0.20;\n}\n\n.apexcharts-series-collapsed {\n opacity: 0;\n}\n\n.apexcharts-tooltip {\n border-radius: 5px;\n box-shadow: 2px 2px 6px -4px #999;\n cursor: default;\n font-size: 14px;\n left: 62px;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n top: 20px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n white-space: nowrap;\n z-index: 12;\n transition: 0.15s ease all;\n}\n\n.apexcharts-tooltip.apexcharts-active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-tooltip.apexcharts-theme-light {\n border: 1px solid #e3e3e3;\n background: rgba(255, 255, 255, 0.96);\n}\n\n.apexcharts-tooltip.apexcharts-theme-dark {\n color: #fff;\n background: rgba(30, 30, 30, 0.8);\n}\n\n.apexcharts-tooltip * {\n font-family: inherit;\n}\n\n\n.apexcharts-tooltip-title {\n padding: 6px;\n font-size: 15px;\n margin-bottom: 4px;\n}\n\n.apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title {\n background: #ECEFF1;\n border-bottom: 1px solid #ddd;\n}\n\n.apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title {\n background: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid #333;\n}\n\n.apexcharts-tooltip-text-y-value,\n.apexcharts-tooltip-text-goals-value,\n.apexcharts-tooltip-text-z-value {\n display: inline-block;\n font-weight: 600;\n margin-left: 5px;\n}\n\n.apexcharts-tooltip-text-y-label:empty,\n.apexcharts-tooltip-text-y-value:empty,\n.apexcharts-tooltip-text-goals-label:empty,\n.apexcharts-tooltip-text-goals-value:empty,\n.apexcharts-tooltip-text-z-value:empty {\n display: none;\n}\n\n.apexcharts-tooltip-text-y-value,\n.apexcharts-tooltip-text-goals-value,\n.apexcharts-tooltip-text-z-value {\n font-weight: 600;\n}\n\n.apexcharts-tooltip-text-goals-label, \n.apexcharts-tooltip-text-goals-value {\n padding: 6px 0 5px;\n}\n\n.apexcharts-tooltip-goals-group, \n.apexcharts-tooltip-text-goals-label, \n.apexcharts-tooltip-text-goals-value {\n display: flex;\n}\n.apexcharts-tooltip-text-goals-label:not(:empty),\n.apexcharts-tooltip-text-goals-value:not(:empty) {\n margin-top: -6px;\n}\n\n.apexcharts-tooltip-marker {\n width: 12px;\n height: 12px;\n position: relative;\n top: 0px;\n margin-right: 10px;\n border-radius: 50%;\n}\n\n.apexcharts-tooltip-series-group {\n padding: 0 10px;\n display: none;\n text-align: left;\n justify-content: left;\n align-items: center;\n}\n\n.apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-marker {\n opacity: 1;\n}\n\n.apexcharts-tooltip-series-group.apexcharts-active,\n.apexcharts-tooltip-series-group:last-child {\n padding-bottom: 4px;\n}\n\n.apexcharts-tooltip-series-group-hidden {\n opacity: 0;\n height: 0;\n line-height: 0;\n padding: 0 !important;\n}\n\n.apexcharts-tooltip-y-group {\n padding: 6px 0 5px;\n}\n\n.apexcharts-tooltip-box, .apexcharts-custom-tooltip {\n padding: 4px 8px;\n}\n\n.apexcharts-tooltip-boxPlot {\n display: flex;\n flex-direction: column-reverse;\n}\n\n.apexcharts-tooltip-box>div {\n margin: 4px 0;\n}\n\n.apexcharts-tooltip-box span.value {\n font-weight: bold;\n}\n\n.apexcharts-tooltip-rangebar {\n padding: 5px 8px;\n}\n\n.apexcharts-tooltip-rangebar .category {\n font-weight: 600;\n color: #777;\n}\n\n.apexcharts-tooltip-rangebar .series-name {\n font-weight: bold;\n display: block;\n margin-bottom: 5px;\n}\n\n.apexcharts-xaxistooltip {\n opacity: 0;\n padding: 9px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n background: #ECEFF1;\n border: 1px solid #90A4AE;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xaxistooltip.apexcharts-theme-dark {\n background: rgba(0, 0, 0, 0.7);\n border: 1px solid rgba(0, 0, 0, 0.5);\n color: #fff;\n}\n\n.apexcharts-xaxistooltip:after,\n.apexcharts-xaxistooltip:before {\n left: 50%;\n border: solid transparent;\n content: " ";\n height: 0;\n width: 0;\n position: absolute;\n pointer-events: none;\n}\n\n.apexcharts-xaxistooltip:after {\n border-color: rgba(236, 239, 241, 0);\n border-width: 6px;\n margin-left: -6px;\n}\n\n.apexcharts-xaxistooltip:before {\n border-color: rgba(144, 164, 174, 0);\n border-width: 7px;\n margin-left: -7px;\n}\n\n.apexcharts-xaxistooltip-bottom:after,\n.apexcharts-xaxistooltip-bottom:before {\n bottom: 100%;\n}\n\n.apexcharts-xaxistooltip-top:after,\n.apexcharts-xaxistooltip-top:before {\n top: 100%;\n}\n\n.apexcharts-xaxistooltip-bottom:after {\n border-bottom-color: #ECEFF1;\n}\n\n.apexcharts-xaxistooltip-bottom:before {\n border-bottom-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:after {\n border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:before {\n border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip-top:after {\n border-top-color: #ECEFF1\n}\n\n.apexcharts-xaxistooltip-top:before {\n border-top-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip-top.apexcharts-theme-dark:after {\n border-top-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip-top.apexcharts-theme-dark:before {\n border-top-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip.apexcharts-active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-yaxistooltip {\n opacity: 0;\n padding: 4px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n background: #ECEFF1;\n border: 1px solid #90A4AE;\n}\n\n.apexcharts-yaxistooltip.apexcharts-theme-dark {\n background: rgba(0, 0, 0, 0.7);\n border: 1px solid rgba(0, 0, 0, 0.5);\n color: #fff;\n}\n\n.apexcharts-yaxistooltip:after,\n.apexcharts-yaxistooltip:before {\n top: 50%;\n border: solid transparent;\n content: " ";\n height: 0;\n width: 0;\n position: absolute;\n pointer-events: none;\n}\n\n.apexcharts-yaxistooltip:after {\n border-color: rgba(236, 239, 241, 0);\n border-width: 6px;\n margin-top: -6px;\n}\n\n.apexcharts-yaxistooltip:before {\n border-color: rgba(144, 164, 174, 0);\n border-width: 7px;\n margin-top: -7px;\n}\n\n.apexcharts-yaxistooltip-left:after,\n.apexcharts-yaxistooltip-left:before {\n left: 100%;\n}\n\n.apexcharts-yaxistooltip-right:after,\n.apexcharts-yaxistooltip-right:before {\n right: 100%;\n}\n\n.apexcharts-yaxistooltip-left:after {\n border-left-color: #ECEFF1;\n}\n\n.apexcharts-yaxistooltip-left:before {\n border-left-color: #90A4AE;\n}\n\n.apexcharts-yaxistooltip-left.apexcharts-theme-dark:after {\n border-left-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip-left.apexcharts-theme-dark:before {\n border-left-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip-right:after {\n border-right-color: #ECEFF1;\n}\n\n.apexcharts-yaxistooltip-right:before {\n border-right-color: #90A4AE;\n}\n\n.apexcharts-yaxistooltip-right.apexcharts-theme-dark:after {\n border-right-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip-right.apexcharts-theme-dark:before {\n border-right-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip.apexcharts-active {\n opacity: 1;\n}\n\n.apexcharts-yaxistooltip-hidden {\n display: none;\n}\n\n.apexcharts-xcrosshairs,\n.apexcharts-ycrosshairs {\n pointer-events: none;\n opacity: 0;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xcrosshairs.apexcharts-active,\n.apexcharts-ycrosshairs.apexcharts-active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-ycrosshairs-hidden {\n opacity: 0;\n}\n\n.apexcharts-selection-rect {\n cursor: move;\n}\n\n.svg_select_boundingRect, .svg_select_points_rot {\n pointer-events: none;\n opacity: 0;\n visibility: hidden;\n}\n.apexcharts-selection-rect + g .svg_select_boundingRect,\n.apexcharts-selection-rect + g .svg_select_points_rot {\n opacity: 0;\n visibility: hidden;\n}\n\n.apexcharts-selection-rect + g .svg_select_points_l,\n.apexcharts-selection-rect + g .svg_select_points_r {\n cursor: ew-resize;\n opacity: 1;\n visibility: visible;\n}\n\n.svg_select_points {\n fill: #efefef;\n stroke: #333;\n rx: 2;\n}\n\n.apexcharts-svg.apexcharts-zoomable.hovering-zoom {\n cursor: crosshair\n}\n\n.apexcharts-svg.apexcharts-zoomable.hovering-pan {\n cursor: move\n}\n\n.apexcharts-zoom-icon,\n.apexcharts-zoomin-icon,\n.apexcharts-zoomout-icon,\n.apexcharts-reset-icon,\n.apexcharts-pan-icon,\n.apexcharts-selection-icon,\n.apexcharts-menu-icon,\n.apexcharts-toolbar-custom-icon {\n cursor: pointer;\n width: 20px;\n height: 20px;\n line-height: 24px;\n color: #6E8192;\n text-align: center;\n}\n\n.apexcharts-zoom-icon svg,\n.apexcharts-zoomin-icon svg,\n.apexcharts-zoomout-icon svg,\n.apexcharts-reset-icon svg,\n.apexcharts-menu-icon svg {\n fill: #6E8192;\n}\n\n.apexcharts-selection-icon svg {\n fill: #444;\n transform: scale(0.76)\n}\n\n.apexcharts-theme-dark .apexcharts-zoom-icon svg,\n.apexcharts-theme-dark .apexcharts-zoomin-icon svg,\n.apexcharts-theme-dark .apexcharts-zoomout-icon svg,\n.apexcharts-theme-dark .apexcharts-reset-icon svg,\n.apexcharts-theme-dark .apexcharts-pan-icon svg,\n.apexcharts-theme-dark .apexcharts-selection-icon svg,\n.apexcharts-theme-dark .apexcharts-menu-icon svg,\n.apexcharts-theme-dark .apexcharts-toolbar-custom-icon svg {\n fill: #f3f4f5;\n}\n\n.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected svg,\n.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected svg,\n.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected svg {\n fill: #008FFB;\n}\n\n.apexcharts-theme-light .apexcharts-selection-icon:not(.apexcharts-selected):hover svg,\n.apexcharts-theme-light .apexcharts-zoom-icon:not(.apexcharts-selected):hover svg,\n.apexcharts-theme-light .apexcharts-zoomin-icon:hover svg,\n.apexcharts-theme-light .apexcharts-zoomout-icon:hover svg,\n.apexcharts-theme-light .apexcharts-reset-icon:hover svg,\n.apexcharts-theme-light .apexcharts-menu-icon:hover svg {\n fill: #333;\n}\n\n.apexcharts-selection-icon,\n.apexcharts-menu-icon {\n position: relative;\n}\n\n.apexcharts-reset-icon {\n margin-left: 5px;\n}\n\n.apexcharts-zoom-icon,\n.apexcharts-reset-icon,\n.apexcharts-menu-icon {\n transform: scale(0.85);\n}\n\n.apexcharts-zoomin-icon,\n.apexcharts-zoomout-icon {\n transform: scale(0.7)\n}\n\n.apexcharts-zoomout-icon {\n margin-right: 3px;\n}\n\n.apexcharts-pan-icon {\n transform: scale(0.62);\n position: relative;\n left: 1px;\n top: 0px;\n}\n\n.apexcharts-pan-icon svg {\n fill: #fff;\n stroke: #6E8192;\n stroke-width: 2;\n}\n\n.apexcharts-pan-icon.apexcharts-selected svg {\n stroke: #008FFB;\n}\n\n.apexcharts-pan-icon:not(.apexcharts-selected):hover svg {\n stroke: #333;\n}\n\n.apexcharts-toolbar {\n position: absolute;\n z-index: 11;\n max-width: 176px;\n text-align: right;\n border-radius: 3px;\n padding: 0px 6px 2px 6px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.apexcharts-menu {\n background: #fff;\n position: absolute;\n top: 100%;\n border: 1px solid #ddd;\n border-radius: 3px;\n padding: 3px;\n right: 10px;\n opacity: 0;\n min-width: 110px;\n transition: 0.15s ease all;\n pointer-events: none;\n}\n\n.apexcharts-menu.apexcharts-menu-open {\n opacity: 1;\n pointer-events: all;\n transition: 0.15s ease all;\n}\n\n.apexcharts-menu-item {\n padding: 6px 7px;\n font-size: 12px;\n cursor: pointer;\n}\n\n.apexcharts-theme-light .apexcharts-menu-item:hover {\n background: #eee;\n}\n\n.apexcharts-theme-dark .apexcharts-menu {\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n}\n\n@media screen and (min-width: 768px) {\n .apexcharts-canvas:hover .apexcharts-toolbar {\n opacity: 1;\n }\n}\n\n.apexcharts-datalabel.apexcharts-element-hidden {\n opacity: 0;\n}\n\n.apexcharts-pie-label,\n.apexcharts-datalabels,\n.apexcharts-datalabel,\n.apexcharts-datalabel-label,\n.apexcharts-datalabel-value {\n cursor: default;\n pointer-events: none;\n}\n\n.apexcharts-pie-label-delay {\n opacity: 0;\n animation-name: opaque;\n animation-duration: 0.3s;\n animation-fill-mode: forwards;\n animation-timing-function: ease;\n}\n\n.apexcharts-canvas .apexcharts-element-hidden {\n opacity: 0;\n}\n\n.apexcharts-hide .apexcharts-series-points {\n opacity: 0;\n}\n\n.apexcharts-gridline,\n.apexcharts-annotation-rect,\n.apexcharts-tooltip .apexcharts-marker,\n.apexcharts-area-series .apexcharts-area,\n.apexcharts-line,\n.apexcharts-zoom-rect,\n.apexcharts-toolbar svg,\n.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\n.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\n.apexcharts-radar-series path,\n.apexcharts-radar-series polygon {\n pointer-events: none;\n}\n\n\n/* markers */\n\n.apexcharts-marker {\n transition: 0.15s ease all;\n}\n\n@keyframes opaque {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n\n\n/* Resize generated styles */\n\n@keyframes resizeanim {\n from {\n opacity: 0;\n }\n to {\n opacity: 0;\n }\n}\n\n.resize-triggers {\n animation: 1ms resizeanim;\n visibility: hidden;\n opacity: 0;\n}\n\n.resize-triggers,\n.resize-triggers>div,\n.contract-trigger:before {\n content: " ";\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n overflow: hidden;\n}\n\n.resize-triggers>div {\n background: #eee;\n overflow: auto;\n}\n\n.contract-trigger:before {\n width: 200%;\n height: 200%;\n}',r?s.prepend(t.css):o.head.appendChild(t.css))}var l=t.create(t.w.config.series,{});if(!l)return e(t);t.mount(l).then((function(){"function"==typeof t.w.config.chart.events.mounted&&t.w.config.chart.events.mounted(t,t.w),t.events.fireEvent("mounted",[t,t.w]),e(l)})).catch((function(t){i(t)}))}else i(new Error("Element not found"));var h,c,d,g}))}},{key:"create",value:function(t,e){var i=this.w;new Ft(this).initModules();var a=this.w.globals;(a.noData=!1,a.animationEnded=!1,this.responsive.checkResponsiveConfig(e),i.config.xaxis.convertedCatToNumeric)&&new R(i.config).convertCatToNumericXaxis(i.config,this.ctx);if(null===this.el)return a.animationEnded=!0,null;if(this.core.setupElements(),"treemap"===i.config.chart.type&&(i.config.grid.show=!1,i.config.yaxis[0].show=!1),0===a.svgWidth)return a.animationEnded=!0,null;var s=y.checkComboSeries(t);a.comboCharts=s.comboCharts,a.comboBarCount=s.comboBarCount;var r=t.every((function(t){return t.data&&0===t.data.length}));(0===t.length||r)&&this.series.handleNoData(),this.events.setupEventHandlers(),this.data.parseData(t),this.theme.init(),new P(this).setGlobalMarkerSize(),this.formatters.setLabelFormatters(),this.titleSubtitle.draw(),a.noData&&a.collapsedSeries.length!==a.series.length&&!i.config.legend.showForSingleSeries||this.legend.init(),this.series.hasAllSeriesEqualX(),a.axisCharts&&(this.core.coreCalculations(),"category"!==i.config.xaxis.type&&this.formatters.setLabelFormatters(),this.ctx.toolbar.minX=i.globals.minX,this.ctx.toolbar.maxX=i.globals.maxX),this.formatters.heatmapLabelFormatters(),this.dimensions.plotCoords();var o=this.core.xySettings();this.grid.createGridMask();var n=this.core.plotChartType(t,o),l=new T(this);l.bringForward(),i.config.dataLabels.background.enabled&&l.dataLabelsBackground(),this.core.shiftGraphPosition();var h={plot:{left:i.globals.translateX,top:i.globals.translateY,width:i.globals.gridWidth,height:i.globals.gridHeight}};return{elGraph:n,xyRatios:o,elInner:i.globals.dom.elGraphical,dimensions:h}}},{key:"mount",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,i=this,a=i.w;return new Promise((function(s,r){if(null===i.el)return r(new Error("Not enough data to display or target element not found"));(null===e||a.globals.allSeriesCollapsed)&&i.series.handleNoData(),"treemap"!==a.config.chart.type&&i.axes.drawAxis(a.config.chart.type,e.xyRatios),i.grid=new _(i);var o=i.grid.drawGrid();i.annotations=new C(i),i.annotations.drawImageAnnos(),i.annotations.drawTextAnnos(),"back"===a.config.grid.position&&o&&a.globals.dom.elGraphical.add(o.el);var n=new G(t.ctx),l=new q(t.ctx);if(null!==o&&(n.xAxisLabelCorrections(o.xAxisTickWidth),l.setYAxisTextAlignments(),a.config.yaxis.map((function(t,e){-1===a.globals.ignoreYAxisIndexes.indexOf(e)&&l.yAxisTitleRotate(e,t.opposite)}))),"back"===a.config.annotations.position&&(a.globals.dom.Paper.add(a.globals.dom.elAnnotations),i.annotations.drawAxesAnnotations()),Array.isArray(e.elGraph))for(var h=0;h0&&a.globals.memory.methodsToExec.forEach((function(t){t.method(t.params,!1,t.context)})),a.globals.axisCharts||a.globals.noData||i.core.resizeNonAxisCharts(),s(i)}))}},{key:"destroy",value:function(){var t,e;window.removeEventListener("resize",this.windowResizeHandler),this.el.parentNode,t=this.parentResizeHandler,(e=Ht.get(t))&&(e.disconnect(),Ht.delete(t));var i=this.w.config.chart.id;i&&Apex._chartInstances.forEach((function(t,e){t.id===p.escapeString(i)&&Apex._chartInstances.splice(e,1)})),new Rt(this.ctx).clear({isUpdating:!1})}},{key:"updateOptions",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],s=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=this.w;return o.globals.selection=void 0,t.series&&(this.series.resetSeries(!1,!0,!1),t.series.length&&t.series[0].data&&(t.series=t.series.map((function(t,i){return e.updateHelpers._extendSeries(t,i)}))),this.updateHelpers.revertDefaultAxisMinMax()),t.xaxis&&(t=this.updateHelpers.forceXAxisUpdate(t)),t.yaxis&&(t=this.updateHelpers.forceYAxisUpdate(t)),o.globals.collapsedSeriesIndices.length>0&&this.series.clearPreviousPaths(),t.theme&&(t=this.theme.updateThemeOptions(t)),this.updateHelpers._updateOptions(t,i,a,s,r)}},{key:"updateSeries",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return this.series.resetSeries(!1),this.updateHelpers.revertDefaultAxisMinMax(),this.updateHelpers._updateSeries(t,e,i)}},{key:"appendSeries",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=this.w.config.series.slice();return a.push(t),this.series.resetSeries(!1),this.updateHelpers.revertDefaultAxisMinMax(),this.updateHelpers._updateSeries(a,e,i)}},{key:"appendData",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this;i.w.globals.dataChanged=!0,i.series.getPreviousPaths();for(var a=i.w.config.series.slice(),s=0;s0&&void 0!==arguments[0])||arguments[0],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.series.resetSeries(t,e)}},{key:"addEventListener",value:function(t,e){this.events.addEventListener(t,e)}},{key:"removeEventListener",value:function(t,e){this.events.removeEventListener(t,e)}},{key:"addXaxisAnnotation",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addXaxisAnnotationExternal(t,e,a)}},{key:"addYaxisAnnotation",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addYaxisAnnotationExternal(t,e,a)}},{key:"addPointAnnotation",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addPointAnnotationExternal(t,e,a)}},{key:"clearAnnotations",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,e=this;t&&(e=t),e.annotations.clearAnnotations(e)}},{key:"removeAnnotation",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,i=this;e&&(i=e),i.annotations.removeAnnotation(i,t)}},{key:"getChartArea",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-inner")}},{key:"getSeriesTotalXRange",value:function(t,e){return this.coreUtils.getSeriesTotalsXRange(t,e)}},{key:"getHighestValueInSeries",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=new U(this.ctx);return e.getMinYMaxY(t).highestY}},{key:"getLowestValueInSeries",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=new U(this.ctx);return e.getMinYMaxY(t).lowestY}},{key:"getSeriesTotal",value:function(){return this.w.globals.seriesTotals}},{key:"toggleDataPointSelection",value:function(t,e){return this.updateHelpers.toggleDataPointSelection(t,e)}},{key:"zoomX",value:function(t,e){this.ctx.toolbar.zoomUpdateOptions(t,e)}},{key:"setLocale",value:function(t){this.localization.setCurrentLocaleValues(t)}},{key:"dataURI",value:function(t){return new V(this.ctx).dataURI(t)}},{key:"paper",value:function(){return this.w.globals.dom.Paper}},{key:"_parentResizeCallback",value:function(){this.w.globals.animationEnded&&this.w.config.chart.redrawOnParentResize&&this._windowResize()}},{key:"_windowResize",value:function(){var t=this;clearTimeout(this.w.globals.resizeTimer),this.w.globals.resizeTimer=window.setTimeout((function(){t.w.globals.resized=!0,t.w.globals.dataChanged=!1,t.ctx.update()}),150)}},{key:"_windowResizeHandler",value:function(){var t=this.w.config.chart.redrawOnWindowResize;"function"==typeof t&&(t=t()),t&&this._windowResize()}}],[{key:"getChartByID",value:function(t){var e=p.escapeString(t),i=Apex._chartInstances.filter((function(t){return t.id===e}))[0];return i&&i.chart}},{key:"initOnLoad",value:function(){for(var e=document.querySelectorAll("[data-apexcharts]"),i=0;i2?s-2:0),o=2;o Date: Mon, 22 Nov 2021 22:25:42 +0100 Subject: [PATCH 39/48] update screenshot --- assets/screenshot.png | Bin 123248 -> 43494 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/screenshot.png b/assets/screenshot.png index 294bef79e04b4f74bb0707e4964e9ee495d1278b..919baea5beef01ca5604829622554252b9c43ed5 100644 GIT binary patch literal 43494 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 UBhQJe9RPl6Dw?+nZkj#+4~Q}|^Z)<= literal 123248 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 vqdc$zn*D Date: Mon, 22 Nov 2021 22:37:07 +0100 Subject: [PATCH 40/48] update readme --- README.md | 62 ++++++++++++++++++++++++++----------------------------- 1 file changed, 29 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index c5e11f5..0e27bd9 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ You have found the easiest way to install & manage WireGuard on any Linux host!

- +

## Features @@ -20,6 +20,7 @@ You have found the easiest way to install & manage WireGuard on any Linux host! * Show a client's QR code. * Download a client's configuration file. * Statistics for which clients are connected. +* Tx/Rx charts for each connected client. * Gravatar support. ## Requirements @@ -41,42 +42,37 @@ $ exit And log in again. -You might need to install docker-compose separately. For example, on a Raspberry Pi: +### 2. Run WireGuard Easy -```bash -sudo apt-get install docker-compose -``` +To automatically install & run wg-easy, in a terminal: -### 2. Configure WireGuard +
+docker run -d \
+  --name=wg-easy \
+  --cap-add=NET_ADMIN \
+  --cap-add=SYS_MODULE \
+  -e WG_HOST=YOUR_SERVER_IP \
+  -e PASSWORD=YOUR_ADMIN_PASSWORD \
+  -v ~/.wg-easy:/etc/wireguard \
+  -p 51820:51820/udp \
+  -p 51821:51821/tcp \
+  --sysctl="net.ipv4.conf.all.src_valid_mark=1" \
+  --sysctl="net.ipv4.ip_forward=1" \
+  --restart unless-stopped \
+  weejewel/wg-easy
+
-Run these commands to prepare and configure WireGuard. +> 🌍 Replace `YOUR_SERVER_IP` with your WAN IP, or a Dynamic DNS hostname. +> +> 🔑 Replace `YOUR_ADMIN_PASSWORD` with a password to log in on the Web UI. -```bash -$ mkdir ~/.wg-easy -$ cd ~/.wg-easy -$ wget https://raw.githubusercontent.com/WeeJeWel/wg-easy/master/docker-compose.yml -$ vim docker-compose.yml -``` +The Web UI will now be available on `http://0.0.0.0:51821`. -Change `WG_HOST=raspberrypi.local` to your server's public address, e.g. `WG_HOST=vpn.mydomain.com`. - -Optionally, set a Web UI password by uncommenting `PASSWORD=foobar123` and change the password. - -> By default, any WireGuard client will have access to the Web UI, unless you set a password. - -### 3. Run WireGuard - -Finally, run WireGuard. It will automatically start after a reboot. - -```bash -$ docker-compose up --detach -``` - -The Web UI will be available on `http://0.0.0.0:51821`. You can create new clients there. +> 💾 Your configuration files will be saved in `~/.wg-easy` ## Options -These options can be configured in `docker-compose.yml` under `environment`. +These options can be configured by setting environment variables using `-e KEY="VALUE"` in the `docker run` command. | Env | Default | Example | Description | | - | - | - | - | @@ -95,8 +91,8 @@ These options can be configured in `docker-compose.yml` under `environment`. To update to the latest version, run: ```bash -docker-compose down -docker-compose pull -docker-compose up --detach --remove-orphans -docker image prune +docker stop wg-easy +docker rm wg-easy ``` + +And then run the 'Run WireGuard Easy' command above again. \ No newline at end of file From 8c9c3732204d8bf0734da39b7eaca8bfd4654ec7 Mon Sep 17 00:00:00 2001 From: Emile Nijssen Date: Mon, 22 Nov 2021 22:38:10 +0100 Subject: [PATCH 41/48] update screenshot to @2x --- assets/screenshot.png | Bin 43494 -> 107555 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/screenshot.png b/assets/screenshot.png index 919baea5beef01ca5604829622554252b9c43ed5..c5b73ccb96b3f4b372ad4c7b19384d1f1705ebe3 100644 GIT binary patch literal 107555 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

)tKEuB82c#cC!(TCjISw0A@XTSV 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

qo@Z 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%0Am&-fX8n#JhRG^b&`om~0m>DNDA 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 literal 43494 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 UBhQJe9RPl6Dw?+nZkj#+4~Q}|^Z)<= From 44b75a54968c579f0a7d0fc036ee068473a0374c Mon Sep 17 00:00:00 2001 From: Emile Nijssen Date: Mon, 22 Nov 2021 22:39:53 +0100 Subject: [PATCH 42/48] update readme --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 0e27bd9..59a1acf 100644 --- a/README.md +++ b/README.md @@ -44,10 +44,10 @@ And log in again. ### 2. Run WireGuard Easy -To automatically install & run wg-easy, in a terminal: +To automatically install & run wg-easy, simply run:

-docker run -d \
+$ docker run -d \
   --name=wg-easy \
   --cap-add=NET_ADMIN \
   --cap-add=SYS_MODULE \
@@ -62,13 +62,13 @@ docker run -d \
   weejewel/wg-easy
 
-> 🌍 Replace `YOUR_SERVER_IP` with your WAN IP, or a Dynamic DNS hostname. +> 💡 Replace `YOUR_SERVER_IP` with your WAN IP, or a Dynamic DNS hostname. > -> 🔑 Replace `YOUR_ADMIN_PASSWORD` with a password to log in on the Web UI. +> 💡 Replace `YOUR_ADMIN_PASSWORD` with a password to log in on the Web UI. The Web UI will now be available on `http://0.0.0.0:51821`. -> 💾 Your configuration files will be saved in `~/.wg-easy` +> 💡 Your configuration files will be saved in `~/.wg-easy` ## Options @@ -88,7 +88,7 @@ These options can be configured by setting environment variables using `-e KEY=" # Updating -To update to the latest version, run: +To update to the latest version, simply run: ```bash docker stop wg-easy From 5cf5fcbfeb45f3b33ad077593620f4385c253549 Mon Sep 17 00:00:00 2001 From: Emile Nijssen Date: Mon, 22 Nov 2021 22:40:35 +0100 Subject: [PATCH 43/48] update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 59a1acf..a6afd21 100644 --- a/README.md +++ b/README.md @@ -95,4 +95,4 @@ docker stop wg-easy docker rm wg-easy ``` -And then run the 'Run WireGuard Easy' command above again. \ No newline at end of file +And then run the `docker run -d \ ...` command above again. \ No newline at end of file From 6ba32d288024bf1d6f52ba551049f9fc84ccb312 Mon Sep 17 00:00:00 2001 From: Emile Nijssen Date: Mon, 22 Nov 2021 22:47:58 +0100 Subject: [PATCH 44/48] update readme --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index a6afd21..b59263a 100644 --- a/README.md +++ b/README.md @@ -49,13 +49,13 @@ To automatically install & run wg-easy, simply run:
 $ docker run -d \
   --name=wg-easy \
-  --cap-add=NET_ADMIN \
-  --cap-add=SYS_MODULE \
-  -e WG_HOST=YOUR_SERVER_IP \
-  -e PASSWORD=YOUR_ADMIN_PASSWORD \
+  -e WG_HOST=🚨YOUR_SERVER_IP \
+  -e PASSWORD=🚨YOUR_ADMIN_PASSWORD \
   -v ~/.wg-easy:/etc/wireguard \
   -p 51820:51820/udp \
   -p 51821:51821/tcp \
+  --cap-add=NET_ADMIN \
+  --cap-add=SYS_MODULE \
   --sysctl="net.ipv4.conf.all.src_valid_mark=1" \
   --sysctl="net.ipv4.ip_forward=1" \
   --restart unless-stopped \

From 2f81f38d2d2040fec4d92338afc0c6e0bebdebe2 Mon Sep 17 00:00:00 2001
From: Emile Nijssen 
Date: Mon, 22 Nov 2021 22:48:36 +0100
Subject: [PATCH 45/48] v4

---
 docs/changelog.json | 3 ++-
 src/package.json    | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/docs/changelog.json b/docs/changelog.json
index 93cad84..22827e0 100644
--- a/docs/changelog.json
+++ b/docs/changelog.json
@@ -1,5 +1,6 @@
 {
   "1": "Initial version. Enjoy!",
   "2": "You can now rename a client, and update the address. Enjoy!",
-  "3": "Many improvements and small changes. Enjoy!"
+  "3": "Many improvements and small changes. Enjoy!",
+  "4": "Now with pretty charts for client's network speed. Enjoy!"
 }
\ No newline at end of file
diff --git a/src/package.json b/src/package.json
index 70184b8..fcef39a 100644
--- a/src/package.json
+++ b/src/package.json
@@ -1,5 +1,5 @@
 {
-  "release": 3,
+  "release": 4,
   "name": "wg-easy",
   "version": "1.0.0",
   "description": "",

From 68ea077d74c0982d1276f319aa9e96175df9b70c Mon Sep 17 00:00:00 2001
From: Emile Nijssen 
Date: Mon, 22 Nov 2021 22:54:42 +0100
Subject: [PATCH 46/48] update readme

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index b59263a..a70165e 100644
--- a/README.md
+++ b/README.md
@@ -93,6 +93,7 @@ To update to the latest version, simply run:
 ```bash
 docker stop wg-easy
 docker rm wg-easy
+docker pull weejewel/wg-easy
 ```
 
 And then run the `docker run -d \ ...` command above again.
\ No newline at end of file

From 03e8544097670b684c4cac19923df260ddd30828 Mon Sep 17 00:00:00 2001
From: Emile Nijssen 
Date: Mon, 22 Nov 2021 22:57:29 +0100
Subject: [PATCH 47/48] update readme

---
 README.md | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/README.md b/README.md
index a70165e..026cc2f 100644
--- a/README.md
+++ b/README.md
@@ -70,6 +70,10 @@ The Web UI will now be available on `http://0.0.0.0:51821`.
 
 > 💡 Your configuration files will be saved in `~/.wg-easy`
 
+### 3. Sponsor
+
+Are you enjoying this project? [Buy me a beer!](https://github.com/sponsors/WeeJeWel) 🍻
+
 ## Options
 
 These options can be configured by setting environment variables using `-e KEY="VALUE"` in the `docker run` command.

From 1b036c3b4cdb84790937bc087dc274a023fbc93d Mon Sep 17 00:00:00 2001
From: Emile Nijssen 
Date: Mon, 29 Nov 2021 18:03:39 +0100
Subject: [PATCH 48/48] Add total Download/Upload in title

---
 src/www/index.html |  4 ++--
 src/www/js/app.js  | 36 +++++++++++++++++++-----------------
 2 files changed, 21 insertions(+), 19 deletions(-)

diff --git a/src/www/index.html b/src/www/index.html
index 6db84e1..d4d6521 100644
--- a/src/www/index.html
+++ b/src/www/index.html
@@ -154,7 +154,7 @@
                     
 
                     
-                    
+                    
                       ·
                       
@@ -166,7 +166,7 @@
                     
 
                     
-                    
+                    
                       ·
                       
diff --git a/src/www/js/app.js b/src/www/js/app.js
index 095115f..df65975 100644
--- a/src/www/js/app.js
+++ b/src/www/js/app.js
@@ -227,26 +227,10 @@ new Vue({
     },
   },
   filters: {
+    bytes,
     timeago: value => {
       return timeago().format(value);
     },
-    bytes: (bytes, decimals, kib, maxunit) => {
-      kib = kib || false;
-      if (bytes === 0) return '0 B';
-      if (Number.isNaN(parseFloat(bytes)) && !Number.isFinite(bytes)) return 'NaN';
-      const k = kib ? 1024 : 1000;
-      const dm = decimals != null && !Number.isNaN(decimals) && decimals >= 0 ? decimals : 2;
-      const sizes = kib
-        ? ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB', 'BiB']
-        : ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB', 'BB'];
-      let i = Math.floor(Math.log(bytes) / Math.log(k));
-      if (maxunit !== undefined) {
-        const index = sizes.indexOf(maxunit);
-        if (index !== -1) i = index;
-      }
-      // eslint-disable-next-line no-restricted-properties
-      return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;
-    },
   },
   mounted() {
     this.api = new API();
@@ -292,3 +276,21 @@ new Vue({
     }).catch(console.error);
   },
 });
+
+function bytes(bytes, decimals, kib, maxunit) {
+  kib = kib || false;
+  if (bytes === 0) return '0 B';
+  if (Number.isNaN(parseFloat(bytes)) && !Number.isFinite(bytes)) return 'NaN';
+  const k = kib ? 1024 : 1000;
+  const dm = decimals != null && !Number.isNaN(decimals) && decimals >= 0 ? decimals : 2;
+  const sizes = kib
+    ? ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB', 'BiB']
+    : ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB', 'BB'];
+  let i = Math.floor(Math.log(bytes) / Math.log(k));
+  if (maxunit !== undefined) {
+    const index = sizes.indexOf(maxunit);
+    if (index !== -1) i = index;
+  }
+  // eslint-disable-next-line no-restricted-properties
+  return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;
+}